Blog

ACTUALIDAD
20 Jul 2020

Enumerar Bases de datos MYSQL con Metasploit

//
Comentarios0
/

Enumerar Bases de datos MYSQL con Metasploit

Lo hemos dicho una y otra vez, el reconocimiento es quizás la fase más crítica de un ataque. Es especialmente importante cuando se prepara un ataque contra una base de datos, ya que un movimiento incorrecto puede destruir hasta el último bit de datos. Metasploit contiene una variedad de módulos que pueden usarse para enumerar bases de datos MySQL, lo que facilita nuestro trabajo en la recopilación de información.

¿Qué información es valiosa para un atacante?

Para un hacker experto, casi cualquier dato puede ser importante a la hora de preparar un ataque. Cuando pensamos en SQL desde esta perspectiva, muchas veces nuestras mentes van directamente a un ataque mediante inyección SQL, pero la recopilación de información sobre la base de datos en sí misma a veces puede ser igual de importante.

Lo que debemos tener en cuenta al enumerar una base de datos incluye la versión, ya que a veces el éxito de un ataque puede ser tan sencillo como encontrar un Exploit para una versión desactualizada. También debemos buscar credenciales válidas, que no solo se puedan usar para la base de datos, sino que a menudo se pueden utilizar para otras aplicaciones o sistemas (la reutilización de contraseñas es algo común y un problema real para las organizaciones y empresas). Por último, la información sobre la estructura de la base de datos puede ser extremadamente útil para realizar la inyección SQL, ya que saber lo que hay, suele ser la mitad de la batalla.

Comenzamos….

  1. Nuestro primer paso será, determinar si MySQL se está ejecutando en el objetivo. Como sabemos que se ejecuta en el puerto 3306 de forma predeterminada, podemos utilizar Nmap para escanear nuestro objetivo y comprobar si está activo:

Podemos comprobar que MySQL se está ejecutando y que el puerto 3306 está abierto. (debemos recordar que donde hemos puesto 192.168.111.136 iría la dirección IP de nuestro objetivo).

  1. Ahora que estamos seguros de que MySQL está corriendo en nuestro objetivo, podemos comenzar con la fase de enumeración y recopilar tanta información como sea posible. Para comenzar, iniciamos Metasploit con el comando msfconsole.

Una vez cargado, podemos buscar módulos relacionados con MySQL utilizando el siguiente comando:

De todas las opciones que nos ofrece, trabajaremos con el módulo mysql_login, que buscará credenciales válidas para el servicio MySQL. Lo cargamos con el comando use:

Y utilizaremos options para ver las opciones del escáner que hemos seleccionado.

Crearemos un archivo de texto que contenga una lista de posibles nombres de usuario. Lo utilizaremos en breve, aunque también se pueden utilizar listas más largas, disponibles públicamente. Lo llamaremos users.txt:

Lo guardamos y creamos otro, pero esta vez llamado passwords.txt e igualmente ponemos los passwords más comunes o podemos utilizar algunos d ellos listados disponibles en la red.

Y procedemos a setear las opciones de nuestro escáner con los nuevos archivos que hemos creado.

MySQL también puede permitir inicios de sesión con una contraseña en blanco, por lo que es aconsejable verificar eso también. Establecemos la opción true para buscar contraseñas en blanco:

Lo último que setearemos es la dirección IP de nuestro objetivo:

Una vez que hemos seteado todas las opciones, lanzamos el escáner.

Podemos ver que intenta todas las combinaciones posibles para nombres de usuario y contraseñas que le indicamos en los archivos, y encontró un par de inicios de sesión válidos en el proceso. Parece que tanto guest como root son inicios de sesión válidos con contraseñas en blanco.

  1. Procederemos a ver de que forma podemos enumerar automáticamente información diversa sobre la base de datos MySQL, incluido el número de versión, la información del servidor, el directorio de datos y varias otras opciones que se pueden configurar en MySQL. Para ello, trabajaremos con el siguiente módulo:

Cómo hicimos anteriormente, veremos las opciones disponibles en este módulo:

Podemos observar que el puerto está predeterminado, lo único que necesitamos configurar, será username y la dirección IP del objetivo. Sabemos por el paso anterior que esta instancia de MySQL permite que root inicie sesión con una contraseña en blanco:

Una vez todo configurado, lo lanzamos:

  1. Volvemos a cambiar de módulo, en este paso, utilizaremos el módulo mysql_schemadump, que, como su nombre indica, volcará la información del esquema sobre la base de datos. Pueden ser una gran cantidad de datos para examinar, pero puede ayudar a identificar piezas clave de la base de datos en la fase de reconocimiento. Primero, cargamos el módulo:

Volvemos a utilizar options para ver que debemos setear en este módulo.

Cómo en el módulo anterior, simplemente debemos setear rhosts y username y lo lanzamos:

Como se indicó anteriormente, devolverá mucha información, pero afortunadamente, Metasploit la guarda en un archivo de texto.

  1. El próximo módulo que probaremos intentará reunir cualquier hash de contraseña adicional que encuentre en la base de datos. Puede ser útil para pasar a otros sistemas, identificar la reutilización de contraseñas u obtener privilegios de administrador.

Igualmente, en este módulo deberemos setear únicamente rhosts y username (Si, algunos os preguntareis porque si son los mismos campos en todos los módulos no utilizo setg, simplemente para que os acostumbréis a setear, si tenéis practica en esto utilizarlo directamente).

Lanzamos con run.

Podemos ver que completa y guarda los hashes descubiertos. En este caso, ninguno de los usuarios del sistema tiene configuradas las contraseñas.

  1. El último módulo que veremos en este post es el módulo mysql_sql, que puede ejecutar consultas SQL desde Metasploit. Requiere un conocimiento práctico del lenguaje SQL, por lo que, en este punto, podría ser más eficiente simplemente conectarse a la base de datos. Sin embargo, realizándolo así, veremos cómo hacer todo sin tener que abandonar Metasploit. Cargamos el módulo.

Seteamos los campos rhosts y user. Además, debemos establecer la consulta SQL que queremos que se ejecute contra el objetivo. Por ejemplo, uno de los primeros comandos para familiarizarse cuando nos conectamos a una base de datos es el comando show. Este nos mostrará todas las bases de datos disponibles. Por último, lanzamos como en los anteriores con el comando run.

Podemos ver que nos muestra un número importante de bases de datos diferentes presentes en esta instancia de MySQL.