¡Hola amigos! vamos a explicar como poder hacernos por nuestros medios un crackeador de credenciales de MySql. Nos vamos a centrar en atacar una debilidad existente en MySql desde sus inicios, si bien es cierto que la han fortificado desde la versión 4.1, yo considero que en realidad sigue como estaba, pero un poquito mejor.
Para crackear las claves no vamos a requerir de acceso a la tabla mysql.user (mediante un sqli o similar), sino esnifando la trama de la conexión al mas puro estilo MITM (Man in the Middle).
Para ello realizaremos los siguientes pasos:
1- Entender como funciona el proceso de login en MySql
En la siguiente dirección podemos ver el código que utiliza MySql para la comprobación de la contraseña, aunque el link se trata de un fork hecho por twitter, nos vale, ya que este aspecto no cambia desde la versión 4.1 de MySql , no es necesario saber c o c++ pues amablemente, nos han comentado como funciona.
2 – Obteniendo la trama de una conexión lícita
Lo primero es lo primero, como se trata de un ataque de red, los credenciales se pueden obtener mediante un MITM (como hemos visto en otras ocasiones) … o en un ataque local, ¿local? pues si, supongamos que nuestro programa de gestión del trabajo utiliza MySql, tenemos derecho a instalar un WireShark, y somos unos meros operarios al que no nos dejan acceder a todos los datos de la empresa. Bastaría con encender el WireShark y abrir el programa en cuestión, para capturar la trama de la conexión a la base de datos. Pero, ¿es esto tan fácil?
Para la prueba de concepto, me he instalado un servidor MySql en una máquina remota, y he puesto al usuario root una contraseña que aparece en un diccionario de palabras (rockyou), ¡pero larga!
Y en el momento que el programa, se conecte de forma lícita, enviará la trama que necesitamos, la cual capturaremos por WireShark (o mediante un MITM)
Podemos ver que WireShark ya hace el trabajo sucio, y localiza los dos valores que más adelante vamos a necesitar:
- En la salida del servidor: Los dos Salt (lo que llamabamos antes public_seed), tal y como os dije, aparece partida en dos Salt.
- Y en la respuesta del cliente: el hash del password (lo que llamábamos antes reply).
¡OJO! no confundir con el hash que guarda MySql en la tabla mysql.user, pues es totalmente diferente.
Salt: 28544c632e5956244e3b7e2b56537b3329712357
Hash: 78c87d4766993a5cc3b6b6c4a943069ecd94780b
3 – ¡Creando el kraken! … digo ¡el cracker!
Lo primero es intentar replicar el funcionamiento de la función que realiza el cliente para generar el reply, para ello, nos creamos una función, que realize exactamente el mismo procedimiento (el lenguaje elegido es C#, pero puede hacerse en cualquiera)
Esperamos unos segundos y … tachan!!
4 – ¡Pero que diantres es eso del c# y de programar!
Algunos os estaréis preguntando si se puede hacer sin necesidad de programar, y la respuesta es: SI, pero le quitamos la gracia. No … en serio, hashcat y john the ripper tienen ya implementados el hash de MySql (tanto el obtenido por un sniffer como el Hash de la tabla mysql.user).
11200
MySQL Challenge-Response Authentication (SHA1)
$mysqlna$1c24ab8d0ee94d70ab1f2e814d8f0948a14d10b9*437e93572f18ae44d9e779160c2505271f85821d
$mysqlna$28544c632e5956244e3b7e2b56537b3329712357*78c87d4766993a5cc3b6b6c4a943069ecd94780b
hashcat -m 11200 hash.txt /usr/share/wordlists/rockyou.txt