Introducción
En este laboratorio, obtendrá experiencia práctica con sqlmap, 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. Específicamente, se centrará en realizar un escaneo básico contra el parámetro GET de una aplicación web para identificar posibles vulnerabilidades de inyección SQL. Comprender cómo iniciar un escaneo e interpretar su salida inicial es una habilidad fundamental para cualquier persona involucrada en la seguridad web o pruebas de penetración. Este laboratorio lo guiará a través de los pasos necesarios, desde la configuración de un entorno vulnerable hasta la ejecución de su primer comando sqlmap y el análisis de los resultados.
Identificar una URL de destino con un parámetro GET
En este paso, identificará la URL de destino que contiene un parámetro GET, que sqlmap utilizará para probar vulnerabilidades de inyección SQL. Un parámetro GET se encuentra típicamente en la URL después de un signo de interrogación (?), seguido de pares clave-valor separados por ampersands (&). Para este laboratorio, hemos configurado una aplicación PHP vulnerable simple que toma un parámetro id a través de GET.
Primero, abra el navegador web dentro del entorno LabEx. Puede acceder al navegador haciendo clic en el icono "Web Browser" en el entorno de escritorio.
Navegue a la siguiente URL: http://localhost/index.php?id=1
Observe el contenido de la página. Debería ver una salida simple que indica que la aplicación está mostrando datos basados en el parámetro id. Esto confirma que el parámetro id es un objetivo adecuado para nuestro escaneo con sqlmap.
Construir el comando de escaneo básico con la opción -u
En este paso, aprenderá a construir el comando básico de sqlmap para apuntar a una URL específica con un parámetro GET. La opción principal para especificar la URL de destino es -u (o --url).
Abra una terminal en el entorno LabEx. El usuario predeterminado es labex, y el directorio de trabajo predeterminado es ~/project.
La sintaxis básica para que sqlmap escanee una URL con un parámetro GET es:
sqlmap -u "http://example.com/page.php?param=value"
Reemplace http://example.com/page.php?param=value con nuestra URL de destino.
Para nuestro laboratorio, la URL de destino es http://localhost/index.php?id=1. Por lo tanto, el comando que utilizará es:
sqlmap -u "http://localhost/index.php?id=1"
Este comando le indica a sqlmap que comience a escanear la URL especificada y pruebe el parámetro GET id en busca de vulnerabilidades de inyección SQL.
Ejecutar el escaneo contra la URL de destino
Ahora que ha construido el comando sqlmap, es hora de ejecutarlo en la terminal. Esto iniciará el escaneo automatizado de inyección SQL.
En su terminal, ejecute el comando sqlmap que construyó en el paso anterior:
sqlmap -u "http://localhost/index.php?id=1"
sqlmap comenzará a enviar varios payloads al parámetro id para probar diferentes tipos de vulnerabilidades de inyección SQL. Durante el escaneo, sqlmap podría hacerle algunas preguntas. Para este escaneo básico, generalmente puede aceptar las opciones predeterminadas presionando Enter o escribiendo y (sí) cuando se le solicite.
Por ejemplo, sqlmap podría preguntar:
[INFO] el DBMS back-end es MySQL. ¿Desea omitir los payloads de prueba específicos para otros DBMS? [Y/n]
Escriba Y y presione Enter.
También podría preguntar:
para la URL 'http://localhost/index.php?id=1', el parámetro 'id' parece ser inyectable. ¿Desea seguir probando otros (si los hay)? [y/N]
Escriba N y presione Enter para centrarse en el parámetro inyectable identificado.
El escaneo continuará, y verá varios mensajes que indican el progreso y las pruebas que se están realizando.
_
___ ___ ___ ___
|_ -| . | . | . |
|___|_ |_ |_ |
|_| |_| |_| 3.7#stable
[INFO] starting @ 12:34:56 /2023-01-01/
[INFO] testing connection to the target URL
[INFO] checking if the target is protected by some kind of WAF/IPS
[INFO] the back-end DBMS is MySQL. Do you want to skip test payloads specific for other DBMSs? [Y/n] Y
[INFO] for the URL 'http://localhost/index.php?id=1', parameter 'id' appears to be injectable. Do you want to keep testing others (if any)? [y/N] N
[INFO] GET parameter 'id' is vulnerable.
... (output truncated) ...
Analizar la salida del escaneo inicial para puntos de inyección
Después de que el escaneo de sqlmap se complete, proporcionará un resumen de sus hallazgos. En este paso, analizará la salida inicial para identificar puntos de inyección SQL confirmados.
Revise la salida en su terminal. Busque líneas que indiquen que sqlmap ha encontrado un parámetro vulnerable. Un indicador clave es un mensaje similar a:
[INFO] GET parameter 'id' is vulnerable.
Este mensaje confirma que sqlmap ha identificado con éxito una vulnerabilidad de inyección SQL en el parámetro GET id de la URL de destino. La salida también mostrará típicamente el tipo de inyección encontrado (por ejemplo, ciega basada en booleanos, basada en errores, ciega basada en tiempo, consultas apiladas, etc.) y el sistema de gestión de bases de datos (DBMS) back-end identificado (por ejemplo, MySQL, PostgreSQL, etc.).
Comprender esta salida inicial es crucial, ya que le indica dónde reside la vulnerabilidad y con qué tipo de base de datos está tratando, lo que puede informar los pasos de explotación posteriores.
... (salida anterior) ...
[INFO] GET parameter 'id' is vulnerable.
[INFO] the back-end DBMS is MySQL.
[INFO] fetched data:
[INFO] retrieved: 'ID: 1'
[INFO] retrieved: 'ID: 2'
... (salida truncada) ...
Localizar el archivo de sesión en el directorio de salida
sqlmap guarda automáticamente todos los resultados del escaneo, incluyendo las vulnerabilidades identificadas, los datos recuperados y la información de la sesión, en un directorio de salida dedicado. En este paso, aprenderá a localizar este archivo de sesión.
Por defecto, sqlmap almacena su salida en el directorio ~/.sqlmap/output/. Dentro de este directorio, encontrará subdirectorios con nombres basados en el host de destino.
Navegue al directorio de salida de sqlmap:
cd ~/.sqlmap/output/localhost/
Luego, liste el contenido de este directorio para ver los archivos de sesión y otros datos relacionados con el escaneo:
ls -l
Debería ver un directorio con el nombre de la URL específica o un hash de la misma, y dentro de él, archivos como session.sqlite, log y potencialmente directorios dump si se extrajeron datos. El archivo session.sqlite contiene los datos de la sesión, lo que permite a sqlmap reanudar escaneos o revisar hallazgos anteriores sin volver a escanear.
labex@labex-ubuntu:~/project$ cd ~/.sqlmap/output/localhost/
labex@labex-ubuntu:~/.sqlmap/output/localhost$ ls -l
total 12
drwxr-xr-x 2 labex labex 4096 Jan 1 12:35 http%3A%2F%2Flocalhost%2Findex.php%3Fid%3D1
labex@labex-ubuntu:~/.sqlmap/output/localhost$ cd http%3A%2F%2Flocalhost%2Findex.php%3Fid%3D1/
labex@labex-ubuntu:~/.sqlmap/output/localhost/http%3A%2F%2Flocalhost%2Findex.php%3Fid%3D1$ ls -l
total 12
-rw-r--r-- 1 labex labex 1234 Jan 1 12:35 log
-rw-r--r-- 1 labex labex 8192 Jan 1 12:35 session.sqlite
Este paso es importante para comprender dónde sqlmap almacena sus datos persistentes, lo cual es útil para revisar escaneos anteriores o continuar operaciones complejas.
Resumen
En este laboratorio, realizó con éxito un escaneo básico de inyección SQL en un parámetro GET utilizando sqlmap. Aprendió a identificar una URL de destino, construir el comando sqlmap con la opción -u, ejecutar el escaneo e interpretar la salida inicial para confirmar un punto de inyección. Además, localizó el archivo de sesión y el directorio de salida donde sqlmap almacena sus resultados. Este conocimiento fundamental es crucial para cualquiera que busque profundizar en las pruebas de seguridad de aplicaciones web y las capacidades de sqlmap.



