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 ์์ ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
Tamper | Description |
---|---|
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'๋ฅผ ์ถ๊ฐํฉ๋๋ค. |
์น ์ฑ, ๋คํธ์ํฌ ๋ฐ ํด๋ผ์ฐ๋์ ๋ํ ํด์ปค์ ๊ด์ ์ ์ป์ผ์ธ์.
์ค์ ๋น์ฆ๋์ค์ ์ํฅ์ ๋ฏธ์น๋ ์ค์ํ ์ทจ์ฝ์ ์ ์ฐพ์๋ณด๊ณ ๋ณด๊ณ ํ์ธ์. 20๊ฐ ์ด์์ ๋ง์ถคํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณต๊ฒฉ ํ๋ฉด์ ๋งคํํ๊ณ , ๊ถํ ์์น์ ํ์ฉํ๋ ๋ณด์ ๋ฌธ์ ๋ฅผ ์ฐพ์๋ด๋ฉฐ, ์๋ํ๋ ์ต์คํ๋ก์์ ์ฌ์ฉํ์ฌ ํ์ ์ฆ๊ฑฐ๋ฅผ ์์งํ์ฌ ๊ทํ์ ๋ ธ๋ ฅ์ ์ค๋๋ ฅ ์๋ ๋ณด๊ณ ์๋ก ์ ํํ์ธ์.
AWS ํดํน ๋ฐฐ์ฐ๊ณ ์ฐ์ตํ๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE) GCP ํดํน ๋ฐฐ์ฐ๊ณ ์ฐ์ตํ๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE)