SQLMap - CheatSheet
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
์น ์ฑ, ๋คํธ์ํฌ ๋ฐ ํด๋ผ์ฐ๋์ ๋ํ ํด์ปค์ ๊ด์ ์ ์ป์ผ์ธ์
์ค์ ๋น์ฆ๋์ค์ ์ํฅ์ ๋ฏธ์น๋ ์ค์ํ ์ทจ์ฝ์ ์ ์ฐพ์๋ณด๊ณ ๋ณด๊ณ ํ์ธ์. ๊ณต๊ฒฉ ํ๋ฉด์ ๋งคํํ๊ณ ๊ถํ ์์น์ ํ์ฉํ๋ ๋ณด์ ๋ฌธ์ ๋ฅผ ์ฐพ์๋ด๋ฉฐ, ํ์ ์ฆ๊ฑฐ๋ฅผ ์์งํ๊ธฐ ์ํด ์๋ํ๋ ์ต์คํ๋ก์์ ์ฌ์ฉํ์ฌ ๊ทํ์ ๋ ธ๋ ฅ์ ์ค๋๋ ฅ ์๋ ๋ณด๊ณ ์๋ก ์ ํํ๋ 20๊ฐ ์ด์์ ๋ง์ถคํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ธ์.
์์ฒญ์ ์บก์ฒํ๊ณ req.txt ํ์ผ์ ์์ฑํฉ๋๋ค.
Sqlmap๋ -e
๋๋ --eval
์ ์ฌ์ฉํ์ฌ ๊ฐ ํ์ด๋ก๋๋ฅผ ์ ์กํ๊ธฐ ์ ์ ์ผ๋ถ ํ์ด์ฌ ์๋ผ์ด๋๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ํ์ด๋ก๋๋ฅผ ์ ์กํ๊ธฐ ์ ์ ์ฌ์ฉ์ ์ ์ ๋ฐฉ์์ผ๋ก ์ฝ๊ฒ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ๋ค์ ์์ ์์ flask ์ฟ ํค ์ธ์
์ ์ ์กํ๊ธฐ ์ ์ ์๋ ค์ง ๋น๋ฐ๋ก flask์ ์ํด ์๋ช
๋ฉ๋๋ค:
์ด ๊ฒ์๋ฌผ ์ฝ๊ธฐ sqlmap์ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ๊ณ ๋ณต์กํ 2์ฐจ ์ฃผ์ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ด์ฉ์ ๋๋ค.
๊ธฐ์ตํ์ธ์, ๋น์ ์ ํ์ด์ฌ์ผ๋ก ์์ ์ tamper๋ฅผ ๋ง๋ค ์ ์์ผ๋ฉฐ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ์ฌ๊ธฐ์์ ๋ ๋ฒ์งธ ์์ ์ฃผ์ ํ์ด์ง์์ tamper ์์ ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
์น ์ฑ, ๋คํธ์ํฌ ๋ฐ ํด๋ผ์ฐ๋์ ๋ํ ํด์ปค์ ๊ด์ ์ ์ป์ผ์ธ์.
์ค์ ๋น์ฆ๋์ค์ ์ํฅ์ ๋ฏธ์น๋ ์ค์ํ ์ทจ์ฝ์ ์ ์ฐพ์๋ณด๊ณ ๋ณด๊ณ ํ์ธ์. 20๊ฐ ์ด์์ ๋ง์ถคํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณต๊ฒฉ ํ๋ฉด์ ๋งคํํ๊ณ , ๊ถํ ์์น์ ํ์ฉํ๋ ๋ณด์ ๋ฌธ์ ๋ฅผ ์ฐพ์๋ด๋ฉฐ, ์๋ํ๋ ์ต์คํ๋ก์์ ์ฌ์ฉํ์ฌ ํ์ ์ฆ๊ฑฐ๋ฅผ ์์งํ์ฌ ๊ทํ์ ๋ ธ๋ ฅ์ ์ค๋๋ ฅ ์๋ ๋ณด๊ณ ์๋ก ์ ํํ์ธ์.
Tamper | Description |
---|---|
AWS ํดํน ๋ฐฐ์ฐ๊ณ ์ฐ์ตํ๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE) GCP ํดํน ๋ฐฐ์ฐ๊ณ ์ฐ์ตํ๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE)
apostrophemask.py
์ํฌ์คํธ๋กํผ ๋ฌธ์๋ฅผ UTF-8 ์ ์ฒด ํญ ๋์ ๋ฌธ์๋ก ๊ต์ฒดํฉ๋๋ค.
apostrophenullencode.py
์ํฌ์คํธ๋กํผ ๋ฌธ์๋ฅผ ๋ถ๋ฒ์ ์ธ ์ด์ค ์ ๋์ฝ๋ ๋์ ๋ฌธ์๋ก ๊ต์ฒดํฉ๋๋ค.
appendnullbyte.py
ํ์ด๋ก๋ ๋์ ์ธ์ฝ๋ฉ๋ NULL ๋ฐ์ดํธ ๋ฌธ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
base64encode.py
์ฃผ์ด์ง ํ์ด๋ก๋์ ๋ชจ๋ ๋ฌธ์๋ฅผ Base64๋ก ์ธ์ฝ๋ฉํฉ๋๋ค.
between.py
'>' ์ฐ์ฐ์๋ฅผ 'NOT BETWEEN 0 AND #'๋ก ๊ต์ฒดํฉ๋๋ค.
bluecoat.py
SQL ๋ฌธ์ฅ ๋ค์ ๊ณต๋ฐฑ ๋ฌธ์๋ฅผ ์ ํจํ ๋ฌด์์ ๊ณต๋ฐฑ ๋ฌธ์๋ก ๊ต์ฒดํฉ๋๋ค. ์ดํ '=' ๋ฌธ์๋ฅผ LIKE ์ฐ์ฐ์๋ก ๊ต์ฒดํฉ๋๋ค.
chardoubleencode.py
์ฃผ์ด์ง ํ์ด๋ก๋์ ๋ชจ๋ ๋ฌธ์๋ฅผ ๋ ๋ฒ URL ์ธ์ฝ๋ฉํฉ๋๋ค (์ด๋ฏธ ์ธ์ฝ๋ฉ๋ ๊ฒ์ ์ฒ๋ฆฌํ์ง ์์).
commalesslimit.py
'LIMIT M, N'๊ณผ ๊ฐ์ ์ธ์คํด์ค๋ฅผ 'LIMIT N OFFSET M'์ผ๋ก ๊ต์ฒดํฉ๋๋ค.
commalessmid.py
'MID(A, B, C)'์ ๊ฐ์ ์ธ์คํด์ค๋ฅผ 'MID(A FROM B FOR C)'๋ก ๊ต์ฒดํฉ๋๋ค.
concat2concatws.py
'CONCAT(A, B)'์ ๊ฐ์ ์ธ์คํด์ค๋ฅผ 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)'๋ก ๊ต์ฒดํฉ๋๋ค.
charencode.py
์ฃผ์ด์ง ํ์ด๋ก๋์ ๋ชจ๋ ๋ฌธ์๋ฅผ URL ์ธ์ฝ๋ฉํฉ๋๋ค (์ด๋ฏธ ์ธ์ฝ๋ฉ๋ ๊ฒ์ ์ฒ๋ฆฌํ์ง ์์).
charunicodeencode.py
์ฃผ์ด์ง ํ์ด๋ก๋์ ๋น์ธ์ฝ๋ฉ ๋ฌธ์๋ฅผ ์ ๋์ฝ๋ URL ์ธ์ฝ๋ฉํฉ๋๋ค (์ด๋ฏธ ์ธ์ฝ๋ฉ๋ ๊ฒ์ ์ฒ๋ฆฌํ์ง ์์). "%u0022"
charunicodeescape.py
์ฃผ์ด์ง ํ์ด๋ก๋์ ๋น์ธ์ฝ๋ฉ ๋ฌธ์๋ฅผ ์ ๋์ฝ๋ URL ์ธ์ฝ๋ฉํฉ๋๋ค (์ด๋ฏธ ์ธ์ฝ๋ฉ๋ ๊ฒ์ ์ฒ๋ฆฌํ์ง ์์). "\u0022"
equaltolike.py
'=' ์ฐ์ฐ์์ ๋ชจ๋ ๋ฐ์์ 'LIKE' ์ฐ์ฐ์๋ก ๊ต์ฒดํฉ๋๋ค.
escapequotes.py
๋ฐ์ดํ ('์ ")๋ฅผ ์ฌ๋์๋ก ์ด์ค์ผ์ดํํฉ๋๋ค.
greatest.py
'>' ์ฐ์ฐ์๋ฅผ 'GREATEST' ๋์ ๋ฌธ์๋ก ๊ต์ฒดํฉ๋๋ค.
halfversionedmorekeywords.py
๊ฐ ํค์๋ ์์ ๋ฒ์ ์ด ์๋ MySQL ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
ifnull2ifisnull.py
'IFNULL(A, B)'์ ๊ฐ์ ์ธ์คํด์ค๋ฅผ 'IF(ISNULL(A), B, A)'๋ก ๊ต์ฒดํฉ๋๋ค.
modsecurityversioned.py
์ ์ฒด ์ฟผ๋ฆฌ๋ฅผ ๋ฒ์ ์ด ์๋ ์ฃผ์์ผ๋ก ๊ฐ์๋๋ค.
modsecurityzeroversioned.py
์ ์ฒด ์ฟผ๋ฆฌ๋ฅผ ์ ๋ก ๋ฒ์ ์ฃผ์์ผ๋ก ๊ฐ์๋๋ค.
multiplespaces.py
SQL ํค์๋ ์ฃผ์์ ์ฌ๋ฌ ๊ฐ์ ๊ณต๋ฐฑ์ ์ถ๊ฐํฉ๋๋ค.
nonrecursivereplacement.py
๋ฏธ๋ฆฌ ์ ์๋ SQL ํค์๋๋ฅผ ๊ต์ฒด์ ์ ํฉํ ํํ์ผ๋ก ๊ต์ฒดํฉ๋๋ค (์: .replace("SELECT", "") ํํฐ).
percentage.py
๊ฐ ๋ฌธ์ ์์ ๋ฐฑ๋ถ์จ ๊ธฐํธ ('%')๋ฅผ ์ถ๊ฐํฉ๋๋ค.
overlongutf8.py
์ฃผ์ด์ง ํ์ด๋ก๋์ ๋ชจ๋ ๋ฌธ์๋ฅผ ๋ณํํฉ๋๋ค (์ด๋ฏธ ์ธ์ฝ๋ฉ๋ ๊ฒ์ ์ฒ๋ฆฌํ์ง ์์).
randomcase.py
๊ฐ ํค์๋ ๋ฌธ์๋ฅผ ๋ฌด์์ ๋์๋ฌธ์ ๊ฐ์ผ๋ก ๊ต์ฒดํฉ๋๋ค.
randomcomments.py
SQL ํค์๋์ ๋ฌด์์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
securesphere.py
ํน๋ณํ ์ ์๋ ๋ฌธ์์ด์ ์ถ๊ฐํฉ๋๋ค.
sp_password.py
ํ์ด๋ก๋ ๋์ 'sp_password'๋ฅผ ์ถ๊ฐํ์ฌ DBMS ๋ก๊ทธ์์ ์๋์ผ๋ก ๋๋ ํํฉ๋๋ค.
space2comment.py
๊ณต๋ฐฑ ๋ฌธ์ (' ')๋ฅผ ์ฃผ์์ผ๋ก ๊ต์ฒดํฉ๋๋ค.
space2dash.py
๊ณต๋ฐฑ ๋ฌธ์ (' ')๋ฅผ ๋์ ์ฃผ์ ('--')์ผ๋ก ๊ต์ฒดํ๊ณ ๋ฌด์์ ๋ฌธ์์ด๊ณผ ์ ์ค ('\n')์ ์ถ๊ฐํฉ๋๋ค.
space2hash.py
๊ณต๋ฐฑ ๋ฌธ์ (' ')๋ฅผ ํ์ด๋ ๋ฌธ์ ('#')๋ก ๊ต์ฒดํ๊ณ ๋ฌด์์ ๋ฌธ์์ด๊ณผ ์ ์ค ('\n')์ ์ถ๊ฐํฉ๋๋ค.
space2morehash.py
๊ณต๋ฐฑ ๋ฌธ์ (' ')๋ฅผ ํ์ด๋ ๋ฌธ์ ('#')๋ก ๊ต์ฒดํ๊ณ ๋ฌด์์ ๋ฌธ์์ด๊ณผ ์ ์ค ('\n')์ ์ถ๊ฐํฉ๋๋ค.
space2mssqlblank.py
๊ณต๋ฐฑ ๋ฌธ์ (' ')๋ฅผ ์ ํจํ ๋์ฒด ๋ฌธ์ ์งํฉ์์ ๋ฌด์์ ๊ณต๋ฐฑ ๋ฌธ์๋ก ๊ต์ฒดํฉ๋๋ค.
space2mssqlhash.py
๊ณต๋ฐฑ ๋ฌธ์ (' ')๋ฅผ ํ์ด๋ ๋ฌธ์ ('#')๋ก ๊ต์ฒดํ๊ณ ์ ์ค ('\n')์ ์ถ๊ฐํฉ๋๋ค.
space2mysqlblank.py
๊ณต๋ฐฑ ๋ฌธ์ (' ')๋ฅผ ์ ํจํ ๋์ฒด ๋ฌธ์ ์งํฉ์์ ๋ฌด์์ ๊ณต๋ฐฑ ๋ฌธ์๋ก ๊ต์ฒดํฉ๋๋ค.
space2mysqldash.py
๊ณต๋ฐฑ ๋ฌธ์ (' ')๋ฅผ ๋์ ์ฃผ์ ('--')์ผ๋ก ๊ต์ฒดํ๊ณ ์ ์ค ('\n')์ ์ถ๊ฐํฉ๋๋ค.
space2plus.py
๊ณต๋ฐฑ ๋ฌธ์ (' ')๋ฅผ ๋ํ๊ธฐ ๊ธฐํธ ('+')๋ก ๊ต์ฒดํฉ๋๋ค.
space2randomblank.py
๊ณต๋ฐฑ ๋ฌธ์ (' ')๋ฅผ ์ ํจํ ๋์ฒด ๋ฌธ์ ์งํฉ์์ ๋ฌด์์ ๊ณต๋ฐฑ ๋ฌธ์๋ก ๊ต์ฒดํฉ๋๋ค.
symboliclogical.py
AND ๋ฐ OR ๋ ผ๋ฆฌ ์ฐ์ฐ์๋ฅผ ๊ทธ๋ค์ ๊ธฐํธ ๋์ ๋ฌธ์ (&& ๋ฐ
unionalltounion.py
UNION ALL SELECT๋ฅผ UNION SELECT๋ก ๊ต์ฒดํฉ๋๋ค.
unmagicquotes.py
๋ฐ์ดํ ๋ฌธ์ (')๋ฅผ ๋ค์ค ๋ฐ์ดํธ ์กฐํฉ %bf%27๋ก ๊ต์ฒดํ๊ณ ๋์ ์ผ๋ฐ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค (์๋ํ๊ฒ ํ๊ธฐ ์ํด).
uppercase.py
๊ฐ ํค์๋ ๋ฌธ์๋ฅผ ๋๋ฌธ์ ๊ฐ 'INSERT'๋ก ๊ต์ฒดํฉ๋๋ค.
varnish.py
HTTP ํค๋ 'X-originating-IP'๋ฅผ ์ถ๊ฐํฉ๋๋ค.
versionedkeywords.py
๊ฐ ๋นํจ์ ํค์๋๋ฅผ ๋ฒ์ ์ด ์๋ MySQL ์ฃผ์์ผ๋ก ๊ฐ์๋๋ค.
versionedmorekeywords.py
๊ฐ ํค์๋๋ฅผ ๋ฒ์ ์ด ์๋ MySQL ์ฃผ์์ผ๋ก ๊ฐ์๋๋ค.
xforwardedfor.py
๊ฐ์ง HTTP ํค๋ 'X-Forwarded-For'๋ฅผ ์ถ๊ฐํฉ๋๋ค.