Introducción
La inyección SQL es una vulnerabilidad web común que permite a los atacantes interferir con las consultas que una aplicación realiza a su base de datos. sqlmap es una 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 y la toma de control de servidores de bases de datos.
Si bien sqlmap es conocido principalmente por sus capacidades de prueba de inyección, también incluye potentes funciones para descubrir posibles puntos de inyección rastreando un sitio web objetivo. Esto es particularmente útil cuando no se tiene una URL o parámetro específico en mente y se desea que sqlmap explore el sitio e identifique todos los puntos de entrada posibles para la inyección.
En este laboratorio, aprenderá a aprovechar la funcionalidad de rastreo de sqlmap para descubrir automáticamente URLs y formularios en un sitio web objetivo, y luego probarlos para detectar vulnerabilidades de inyección SQL. Identificará una URL raíz, utilizará la bandera --crawl, establecerá la profundidad del rastreo, ejecutará la operación y, finalmente, revisará los puntos de inyección descubiertos.
Identificar una URL Raíz para el Sitio Web Objetivo
En este paso, identificará la URL raíz del sitio web objetivo desde la cual sqlmap comenzará a rastrear. Este es el punto de entrada para que sqlmap comience a descubrir enlaces y formularios. Para este laboratorio, utilizaremos un servidor web simple ejecutándose localmente.
Primero, asegurémonos de que el servidor web esté en funcionamiento y sea accesible. Puede usar curl para verificar si el servidor responde.
curl http://127.0.0.1:8000
Debería ver alguna salida HTML, lo que indica que el servidor está activo. La URL raíz para nuestro sitio web objetivo será http://127.0.0.1:8000.
A continuación, utilizaremos esta URL como punto de partida para sqlmap.
Usar la Bandera --crawl para Descubrir Enlaces y Formularios
En este paso, aprenderá a usar la bandera --crawl con sqlmap. Esta bandera instruye a sqlmap a rastrear el sitio web objetivo y descubrir nuevas URLs y formularios para probar vulnerabilidades de inyección SQL. Sin esta bandera, sqlmap solo probaría la URL proporcionada explícitamente.
La sintaxis básica para usar --crawl es:
sqlmap -u < target_url > --crawl
Intentemos ejecutar sqlmap con la bandera --crawl en nuestra URL objetivo. Este comando iniciará el proceso de rastreo.
sqlmap -u http://127.0.0.1:8000 --crawl
Verá que sqlmap comienza a rastrear el sitio web, identificando enlaces y formularios. Le hará algunas preguntas durante el proceso. Para el propósito de este laboratorio, generalmente puede aceptar las opciones predeterminadas presionando Enter o escribiendo y cuando se le solicite.
Por ejemplo, cuando se le pregunte "¿desea guardar los resultados en un archivo CSV?", puede escribir n y presionar Enter. Cuando se le pregunte "¿desea probar otras vulnerabilidades comunes?", puede escribir n y presionar Enter.
Establecer la Profundidad de Rastreo con --crawl-depth=2
En este paso, refinará el proceso de rastreo estableciendo una profundidad de rastreo específica utilizando la bandera --crawl-depth. La profundidad de rastreo determina cuántos niveles de profundidad seguirá sqlmap al descubrir nuevas URLs. Una profundidad de 1 significa que solo visitará enlaces directamente desde la URL inicial. Una profundidad de 2 significa que visitará enlaces desde la URL inicial, y luego enlaces desde esas páginas recién descubiertas, y así sucesivamente.
Para nuestro pequeño sitio web objetivo, una profundidad de 2 será suficiente para descubrir todas las páginas disponibles.
La sintaxis para establecer la profundidad de rastreo es:
sqlmap -u <target_url> --crawl --crawl-depth=<depth_value>
Ejecutemos sqlmap nuevamente, esta vez especificando una profundidad de rastreo de 2.
sqlmap -u http://127.0.0.1:8000 --crawl --crawl-depth=2
Observe cómo cambia la salida de sqlmap, descubriendo potencialmente más enlaces o formularios a medida que profundiza en la estructura del sitio. Nuevamente, puede aceptar las indicaciones predeterminadas presionando Enter o escribiendo n para pruebas adicionales.
Ejecutar la Operación de Rastreo y Prueba
En este paso, ejecutará la operación completa de rastreo y prueba. Si bien los pasos anteriores demostraron las banderas de rastreo, sqlmap por defecto también intentará probar puntos de inyección en las URLs descubiertas. Para hacer las pruebas más explícitas y asegurar que sqlmap realice una verificación exhaustiva, podemos agregar la bandera --batch para automatizar las respuestas a las indicaciones y la bandera --forms para apuntar específicamente a los formularios.
La bandera --batch le indica a sqlmap que se ejecute en modo no interactivo, aceptando respuestas predeterminadas para todas las indicaciones. Esto es útil para la automatización. La bandera --forms instruye específicamente a sqlmap a analizar y probar formularios HTML en el objetivo.
Combinemos estas banderas con nuestro comando anterior:
sqlmap -u http://127.0.0.1:8000 --crawl --crawl-depth=2 --batch --forms
Este comando:
- Iniciará el rastreo desde
http://127.0.0.1:8000. - Profundizará dos niveles (
--crawl-depth=2). - Responderá automáticamente a las indicaciones con valores predeterminados (
--batch). - Buscará y probará específicamente formularios HTML (
--forms).
Observe la salida. sqlmap listará las URLs que descubre y los parámetros que prueba. También indicará si encuentra algún punto de inyección potencial.
Revisar las URLs Descubiertas y los Posibles Puntos de Inyección
En este paso final, revisará la salida de sqlmap para comprender qué URLs y formularios se descubrieron y si se identificaron posibles puntos de inyección.
Después de que sqlmap complete su ejecución, proporcionará un resumen de sus hallazgos. Busque líneas que indiquen "parameter is vulnerable" (el parámetro es vulnerable) o mensajes similares.
Incluso si sqlmap no encuentra una vulnerabilidad de inyección SQL confirmada (lo cual se espera para nuestro sitio simulado simple), de todos modos le mostrará las URLs y los parámetros que probó. Esta información es crucial para el análisis manual o pruebas automatizadas adicionales.
Fragmentos de salida de ejemplo que podría ver:
...
[INFO] retrieved new form: 'http://127.0.0.1:8000/search.php' (GET)
...
[INFO] testing GET parameter 'id'
...
[INFO] testing GET parameter 'param'
...
[INFO] testing GET parameter 'query'
...
La conclusión clave es que sqlmap rastreó con éxito el sitio, identificó index.php, page.php y search.php (a través del formulario), y luego procedió a probar sus respectivos parámetros (id, name, param, query). Esto demuestra el poder de la función de rastreo de sqlmap para mapear automáticamente la superficie de ataque de una aplicación objetivo.
También puede consultar los archivos de registro de sqlmap (generalmente en ~/.sqlmap/output/) para obtener un informe más detallado, aunque para este laboratorio, la salida de la consola es suficiente.
Resumen
En este laboratorio, aprendió con éxito a utilizar las potentes capacidades de rastreo de sqlmap para descubrir posibles puntos de inyección SQL en un sitio web objetivo. Comenzó identificando una URL raíz, luego usó la bandera --crawl para instruir a sqlmap a explorar el sitio. Refinó aún más el proceso de rastreo estableciendo una profundidad específica con --crawl-depth. Finalmente, ejecutó una operación integral de rastreo y prueba utilizando --batch y --forms para automatizar el proceso y apuntar específicamente a los formularios.
Al completar este laboratorio, ahora comprende cómo:
- Identificar una URL de inicio para el rastreo de sqlmap.
- Utilizar la bandera
--crawlpara descubrir enlaces y formularios. - Controlar la profundidad del rastreo con
--crawl-depth. - Ejecutar una operación automatizada de rastreo y prueba con
--batchy--forms. - Interpretar la salida de sqlmap para identificar URLs descubiertas, parámetros y posibles puntos de inyección.
Esta habilidad es fundamental para el reconocimiento en pruebas de penetración web, lo que le permite mapear eficientemente la superficie de ataque de una aplicación web antes de intentar explotar vulnerabilidades específicas.
