Ajustar la Agresividad del Escaneo con Nivel y Riesgo en sqlmap

Kali LinuxBeginner
Practicar Ahora

Introducción

sqlmap es una potente herramienta de pruebas de penetración de código abierto que automatiza el proceso de detección y explotación de fallos de inyección SQL. Al realizar un escaneo, dos de los parámetros más importantes que puedes controlar son --level y --risk. Estos parámetros determinan la exhaustividad y la agresividad del escaneo.

  • Level: Controla el número de pruebas a realizar. Varía de 1 a 5, donde los niveles más altos realizan pruebas más extensas en más puntos de inyección (como cabeceras HTTP).
  • Risk: Controla el nivel de riesgo de las cargas útiles (payloads) utilizadas. Varía de 1 a 3, donde los riesgos más altos utilizan cargas útiles potencialmente disruptivas (como consultas basadas en tiempo que pueden ralentizar una base de datos).

En este laboratorio, aprenderás a utilizar estos dos parámetros para ajustar tus escaneos de sqlmap. Comenzarás con un escaneo por defecto y aumentarás progresivamente el nivel y el riesgo para observar cómo impactan en el alcance, la duración y los tipos de cargas útiles utilizadas en el escaneo.

Comprender el Nivel (1) y Riesgo (1) Predeterminados

En este paso, realizarás un escaneo básico con sqlmap sin especificar el level ni el risk. Por defecto, sqlmap utiliza --level=1 y --risk=1. Este es el escaneo menos exhaustivo y más seguro.

El Level 1 prueba solo los parámetros GET y POST. El Risk 1 utiliza cargas útiles que generalmente son inofensivas para una aplicación web, como pruebas básicas basadas en booleanos y en errores.

Ejecutemos el escaneo predeterminado contra la aplicación vulnerable que se configuró para ti. La opción --batch responde automáticamente a todas las preguntas con la opción predeterminada, haciendo que el escaneo sea no interactivo.

Ejecuta el siguiente comando en tu terminal:

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --batch

Verás que sqlmap inicia su proceso de prueba. Presta atención al resumen al final, que muestra el número de solicitudes realizadas y las vulnerabilidades encontradas.

...
[INFO] testing 'Boolean-based blind - WHERE or HAVING clause'
[INFO] testing 'Error-based - WHERE or HAVING clause'
[INFO] testing 'Time-based blind'
...
[INFO] GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N] N
sqlmap identified the following injection point(s) with a total of XXX HTTP(s) requests:
---
Parameter: id (GET)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: id=1 AND 2129=2129

    Type: error-based
    Title: SQLite OR error-based - CUME_DIST
    Payload: id=1 OR 1 GROUP BY CUME_DIST(1)

    Type: time-based blind
    Title: SQLite > 2.0 AND time-based blind
    Payload: id=1 AND 7415=CASE WHEN (substr(sqli,1,1)='S') THEN 7415 ELSE 0 END
---
[INFO] fetched data logged to text files under '/home/labex/.local/share/sqlmap/output/127.0.0.1'
...

Este escaneo inicial es relativamente rápido y confirma la vulnerabilidad en el parámetro id.

Aumentar la Profundidad del Escaneo con --level=3

En este paso, aumentarás la profundidad del escaneo estableciendo el nivel a 3. Un nivel más alto indica a sqlmap que realice más pruebas y verifique la existencia de vulnerabilidades en ubicaciones adicionales.

  • --level=2 añade pruebas para las cabeceras HTTP Cookie.
  • --level=3 añade pruebas para las cabeceras HTTP User-Agent y Referer.

Al aumentar el nivel, le estás pidiendo a sqlmap que sea más exhaustivo. Esto aumentará naturalmente el número de solicitudes y la duración del escaneo.

Ahora, ejecuta el escaneo nuevamente, pero esta vez añade la opción --level=3:

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --level=3 --batch

Observa la salida. Notarás que sqlmap ahora menciona explícitamente la prueba de cabeceras como Cookie y User-Agent.

...
[INFO] testing for SQL injection on GET parameter 'id'
...
[INFO] testing for SQL injection on HTTP Cookie header
...
[INFO] testing for SQL injection on HTTP User-Agent header
...
sqlmap identified the following injection point(s) with a total of YYY HTTP(s) requests:
---
Parameter: id (GET)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: id=1 AND 2129=2129
...
---
[INFO] fetched data logged to text files under '/home/labex/.local/share/sqlmap/output/127.0.0.1'
...

Aunque nuestra aplicación simple no es vulnerable a través de estas cabeceras, una aplicación del mundo real podría serlo. Deberías notar que el número total de solicitudes HTTP (YYY) es mayor que en el paso anterior (XXX).

Aumentar la Invasividad del Escaneo con --risk=2

En este paso, explorarás el parámetro --risk. Este parámetro controla el "peligro" de las cargas útiles utilizadas.

  • --risk=1 (Predeterminado): Utiliza cargas útiles mayormente inofensivas.
  • --risk=2: Añade pruebas de inyección ciega basadas en tiempo con consultas pesadas. Estas pueden generar una carga significativa en el servidor de la base de datos.
  • --risk=3: Añade pruebas de inyección SQL basadas en OR y otras cargas útiles potencialmente destructivas que podrían modificar datos.

Un riesgo mayor puede descubrir vulnerabilidades que las pruebas más seguras podrían pasar por alto, pero también aumenta la posibilidad de interrumpir el sistema objetivo. Debe usarse con precaución.

Ejecutemos un escaneo con un riesgo elevado. Volveremos al nivel predeterminado (1) para aislar el efecto del parámetro de riesgo.

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --risk=2 --batch

Durante este escaneo, verás que sqlmap emplea técnicas basadas en tiempo más agresivas. Estas cargas útiles funcionan haciendo que la base de datos realice una operación que consume tiempo (como una función de benchmark o sleep) y luego midiendo el tiempo de respuesta del servidor para inferir información.

...
[INFO] testing 'Boolean-based blind - WHERE or HAVING clause'
[INFO] testing 'Error-based - WHERE or HAVING clause'
[INFO] testing 'Time-based blind (heavy query)'
...
[INFO] GET parameter 'id' appears to be 'Time-based blind' injectable
...

El escaneo con --risk=2 es más intensivo que el escaneo predeterminado, incluso al mismo nivel, porque las cargas útiles en sí son más complejas.

Ejecutar un Escaneo Combinando --level=5 y --risk=3

En este paso, combinarás el nivel y el riesgo más altos para el escaneo más completo y agresivo posible.

  • --level=5: El nivel más alto. Prueba todos los puntos de inyección posibles, incluida la cabecera HTTP Host.
  • --risk=3: El riesgo más alto. Utiliza cargas útiles que pueden modificar entradas de la base de datos. Esto es peligroso y solo debe usarse en sistemas donde tenga permiso explícito para pruebas destructivas.

Esta combinación resulta en un escaneo muy largo e intensivo. Es el enfoque de "todo incluido", lanzando todas las pruebas conocidas contra el objetivo.

Ejecuta el siguiente comando. Ten en cuenta que este escaneo tardará significativamente más que los anteriores.

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --level=5 --risk=3 --batch

Verás que sqlmap ejecuta una gran cantidad de pruebas contra todos los puntos de inyección concebibles con sus cargas útiles más potentes.

...
[INFO] testing for SQL injection on GET parameter 'id'
...
[INFO] testing for SQL injection on HTTP Cookie header
...
[INFO] testing for SQL injection on HTTP User-Agent header
...
[INFO] testing for SQL injection on HTTP Referer header
...
[INFO] testing for SQL injection on HTTP Host header
...
[CRITICAL] OR-based injection tests might result in an update of all table rows. Continue? [y/N] y
...

Este escaneo demuestra la capacidad máxima de sqlmap, pero también resalta la importancia de comprender las compensaciones. Un escaneo de este tipo a menudo es poco práctico y demasiado arriesgado para compromisos estándar.

Observar el Aumento de Cargas Útiles y la Duración del Escaneo

En este paso final, reflexionarás sobre los resultados de los escaneos anteriores. No hay nuevos comandos que ejecutar. El objetivo es comprender el impacto de ajustar level y risk comparando los resúmenes de los escaneos.

Si revisas la salida de la terminal de cada paso, notarás un patrón claro:

  1. Escaneo Predeterminado (--level=1, --risk=1): La línea base. Fue rápido y envió la menor cantidad de solicitudes.
  2. Nivel Aumentado (--level=3): El número de solicitudes aumentó porque sqlmap probó más puntos de inyección (Cookie, User-Agent). La duración aumentó en consecuencia.
  3. Riesgo Aumentado (--risk=2): La duración del escaneo aumentó, no necesariamente debido a más solicitudes, sino porque las cargas útiles basadas en tiempo son inherentemente lentas.
  4. Máxima Agresividad (--level=5, --risk=3): Este escaneo envió un número enormemente mayor de solicitudes y tardó significativamente más en completarse.

Aquí hay un resumen del comportamiento esperado:

Parámetros de Escaneo Puntos de Inyección Probados Tipos de Carga Útil Duración Relativa
Predeterminado (L1, R1) GET/POST Básica booleana, error Corta
--level=3 GET/POST, Cookie, User-Agent Básica booleana, error Media
--risk=2 GET/POST Añade basadas en tiempo pesadas Media-Larga
--level=5 --risk=3 Todas las cabeceras Añade basadas en OR, apiladas Muy Larga

La conclusión clave es que existe una compensación directa. Aumentar level y risk proporciona pruebas más exhaustivas y una mayor probabilidad de encontrar vulnerabilidades oscuras, pero tiene el costo de un tiempo de escaneo significativamente mayor y un mayor riesgo de interrumpir el sistema objetivo.

Resumen

En este laboratorio, has explorado con éxito cómo ajustar la agresividad de los escaneos de sqlmap utilizando los parámetros --level y --risk.

Aprendiste que:

  • --level controla el alcance del escaneo, determinando qué partes de una solicitud HTTP se prueban en busca de vulnerabilidades. Niveles más altos son más completos.
  • --risk controla la intrusividad del escaneo, determinando los tipos de cargas útiles SQL utilizadas. Riesgos más altos tienen más probabilidades de encontrar vulnerabilidades, pero pueden ser peligrosos para la base de datos objetivo.
  • La configuración predeterminada (level=1, risk=1) está diseñada para ser rápida y segura.
  • Aumentar estos valores conduce a tiempos de escaneo más largos y requiere más precaución.

Como buena práctica, siempre comienza con configuraciones de level y risk más bajas. Solo escálalas si los escaneos iniciales no tienen éxito y tienes la autorización adecuada para realizar pruebas más agresivas. ¡Felicitaciones por completar este laboratorio!