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
SQLRecon — Un kit de herramientas C# MS SQL diseñado para reconocimiento ofensivo y post-explotación. | Kitploit
Herramientas/GitHubGitHub/xforcered/sqlrecon
Escalada de PrivilegiosReconocimientoAtaques de ContraseñasExplotaciónMovimiento LateralPost-ExplotaciónPruebas de PenetraciónRed TeamingSeguridad de Bases de Datos
GitHubxforcered/sqlrecon

SQLRecon

Un kit de herramientas C# MS SQL diseñado para reconocimiento ofensivo y post-explotación.

3993822hace 1 añoRevisado 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
Ver Repositorio
 
[![licence badge]][licence] 
[![wiki Badge]][wiki] 
[![stars badge]][stars] 
[![forks badge]][forks] 
[![issues badge]][issues] 

[licence badge]:https://img.shields.io/badge/License-BSD_3--Clause-blue.svg
[stars badge]:https://img.shields.io/github/stars/skahwah/SQLRecon.svg
[forks badge]:https://img.shields.io/github/forks/skahwah/SQLRecon.svg
[issues badge]:https://img.shields.io/github/issues/skahwah/SQLRecon.svg
[wiki badge]:https://img.shields.io/badge/SQLRecon-Wiki-green.svg

[licence]:https://raw.githubusercontent.com/skahwah/SQLRecon/main/LICENSE
[stars]:https://github.com/skahwah/SQLRecon/stargazers
[forks]:https://github.com/skahwah/SQLRecon/network
[issues]:https://github.com/skahwah/SQLRecon/issues
[wiki]:https://github.com/skahwah/SQLRecon/wiki

# SQLRecon

<p align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/47905/99bf48def961883bb073770c7a033a300b7f22b0da39f3fd30ad0e0da30b9da2.png">
</p>

SQLRecon es un conjunto de herramientas para Microsoft SQL Server diseñado para reconocimiento ofensivo y post-explotación. Para obtener información detallada sobre cómo usar cada técnica, consulta la <a href="https://github.com/skahwah/SQLRecon/wiki">wiki</a>. 

Puedes descargar una copia de SQLRecon desde la página de [releases](https://github.com/skahwah/SQLRecon/releases). Alternativamente, siéntete libre de compilar la solución tú mismo. Esto debería ser tan sencillo como clonar el repositorio, hacer doble clic en el archivo de la solución y compilar.

<a href="https://github.com/skahwah/SQLRecon/wiki/9.-Prevention,-Detection-and-Mitigation-Guidance">También se ha proporcionado orientación sobre prevención, detección y mitigación</a> para todos los defensores que estáis ahí fuera.

Echa un vistazo a mi publicación en el sitio web de <a href="https://securityintelligence.com/posts/databases-beware-abusing-microsoft-sql-server-with-sqlrecon/">IBM Security Intelligence</a>. Si prefieres los vídeos, entonces echa un vistazo a mi <a href="https://www.youtube.com/watch?v=LsYSePobFWA">presentación en Black Hat</a>.

# Módulos de enumeración

Los módulos de enumeración no requieren que se proporcione un proveedor de autenticación. Estos módulos deben pasarse mediante el indicador de módulo de enumeración (`/e:, /enum:`). La wiki tiene detalles sobre el uso de <a href="https://github.com/skahwah/SQLRecon/wiki/1.-Enumeration">módulos de enumeración</a>.```
Info    - Show information about the SQL server.
          /h:, /host    -> SQL server hostname or IP. Multiple hosts supported.
          /port:        -> (OPTIONAL) Defaults to 1434 (UDP).
          /t:, timeout: -> (OPTIONAL) Defaults to 3s.

SqlSpns - Use the current user token to enumerate the AD domain for MSSQL SPNs.
          /d:, /domain: -> (OPTIONAL) NETBIOS name or FQDN of domain.
```
# Authentication Providers

SQLRecon admite un conjunto diverso de proveedores de autenticación (`/a:, /auth:`) para permitir la interacción con un Microsoft SQL Server.```
WinToken   - Use the current users token to authenticate against the SQL database
             /h:, /host:     -> SQL server hostname or IP

WinDomain  - Use AD credentials to authenticate against the SQL database
             /h:, /host:     -> SQL server hostname or IP. Multiple hosts supported.
             /d:, /domain:   -> NETBIOS name or FQDN of domain.
             /u:, /username: -> Username for domain user.
             /p:, /password: -> Password for domain user.

Local      - Use local SQL credentials to authenticate against the SQL database
             /h:, /host:     -> SQL server hostname or IP. Multiple hosts supported.
             /u:, /username: -> Username for local SQL user.
             /p:, /password: -> Password for local SQL user.

EntraID    - Use Azure EntraID credentials to authenticate against the Azure SQL database
             /h:, /host:     -> SQL server hostname or IP. Multiple hosts supported.
             /d:, /domain:   -> FQDN of domain (DOMAIN.COM).
             /u:, /username: -> Username for domain user.
             /p:, /password: -> Password for domain user.

AzureLocal - Use local SQL credentials to authenticate against the Azure SQL database
             /h:, /host:     -> SQL server hostname or IP. Multiple hosts supported.
             /u:, /username: -> Username for local SQL user.
             /p:, /password: -> Password for local SQL user.
```
### Proveedores de autenticación - Detalles adicionales

- **Hosts**: El indicador de host (`/h:, host:`) es obligatorio y permite uno o más servidores SQL. Si desea ejecutar un módulo contra varios servidores SQL, separe los hosts con una coma, por ejemplo `/h:SQL01,10.10.10.2,SQL03`.
- **Base de datos**: SQLRecon se conecta a la base de datos `master` de forma predeterminada; sin embargo, esto se puede cambiar opcionalmente proporcionando un nombre de base de datos personalizado mediante el indicador database (`/database:`).
- **Depuración**: El indicador `/debug` es opcional y muestra todas las consultas SQL que ejecuta un módulo, sin ejecutarlas realmente en los hosts remotos. Puede encontrar un ejemplo de esto en la <a href="https://github.com/skahwah/SQLRecon/wiki">wiki</a>.
- **Puerto**: En algunos casos, es posible que un Microsoft SQL Server no esté escuchando en un puerto TCP estándar. Algunos ejemplos son el clúster de conmutación por error de Microsoft SQL Server o los puertos TCP dinámicos. SQLRecon se conecta a las bases de datos a través del puerto TCP `1433` de forma predeterminada; sin embargo, esto se puede cambiar opcionalmente usando el indicador `/port:`.
- **Tiempo de espera**: El tiempo de conexión predeterminado a la base de datos SQL es de `3` segundos; sin embargo, este valor se puede cambiar opcionalmente proporcionando un valor de tiempo de espera (`/t:, /timeout:`) que corresponde al número de segundos antes de terminar el intento de conexión.
- **Verboso**: El indicador `/v, /verbose` es opcional y muestra todas las consultas SQL que ejecuta un módulo antes de ejecutarlas en los hosts remotos. Puede encontrar un ejemplo de esto en la <a href="https://github.com/skahwah/SQLRecon/wiki">wiki</a>.

Tenga en cuenta que el proveedor de autenticación `EntraID` requiere que la Biblioteca de autenticación de Azure Active Directory (ADAL) o la Biblioteca de autenticación de Microsoft (MSAL) exista en el sistema desde el que se ejecuta SQLRecon. Esto es para la funcionalidad de autenticación y autorización de Azure EntraID.

# Módulos SQL

Los módulos SQL se ejecutan contra una o más instancias de Microsoft SQL Server. Estos módulos deben pasarse al indicador de módulo (`/m:, /module:`).

| Nombre del módulo | Descripción | Suplantación | Ejecución vinculada | Ejecución de cadena vinculada | Requiere contexto privilegiado |
| ----------- | ----------- | ------------- | ---------------- | ---------------------- | --------------------------- |
| `CheckRpc` | Obtener una lista de servidores vinculados y su estado de RPC. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Databases` | Mostrar todas las bases de datos. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Impersonate` | Enumerar las cuentas de usuario que se pueden suplantar. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Info` | Mostrar información sobre el servidor SQL. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Links` | Enumerar servidores SQL vinculados. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Users` | Mostrar qué cuentas de usuario y grupos pueden autenticarse contra la base de datos. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Whoami` | Mostrar sus privilegios. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Query /c:QUERY` | Ejecutar una consulta SQL. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Smb /unc:UNC_PATH` | Capturar hash NetNTLMv2. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Columns /db:DATABASE /table:TABLE` | Mostrar todas las columnas de la base de datos y la tabla proporcionadas. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Rows /db:DATABASE /table:TABLE` | Mostrar el número de filas en la tabla de la base de datos proporcionada. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Search /keyword:KEYWORD` | Buscar nombres de columnas en la tabla proporcionada de la base de datos a la que está conectado. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Tables /db:DATABASE` | Mostrar todas las tablas de la base de datos proporcionada. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `EnableRpc /rhost:LINKED_HOST` | Habilitar RPC y RPC out en un servidor vinculado. | :white_check_mark: | :x: | :x: | :heavy_check_mark: |
| `EnableClr` | Habilitar la integración de CLR. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `EnableOle` | Habilitar los procedimientos de automatización OLE. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `EnableXp` | Habilitar xp_cmdshell. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `DisableRpc /rhost:LINKED_HOST` | Deshabilitar RPC y RPC out en un servidor vinculado. | :white_check_mark: | :x: | :x: | :heavy_check_mark: |
| `DisableClr` | Deshabilitar la integración de CLR. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `DisableOle` | Deshabilitar los procedimientos de automatización OLE. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `DisableXp` | Deshabilitar xp_cmdshell. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `AgentStatus` | Mostrar si el agente SQL se está ejecutando y obtener trabajos del agente. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `AgentCmd /c:COMMAND` | Ejecutar un comando del sistema usando trabajos del agente. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `Adsi /adsi:SERVER_NAME /lport:LOCAL_PORT` | Obtener credenciales ADSI en texto claro de un servidor ADSI vinculado. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `Clr /dll:DLL /function:FUNCTION` | Cargar y ejecutar un ensamblado .NET en un procedimiento almacenado personalizado. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `OleCmd /c:COMMAND /subsystem:(OPTIONAL)` | Ejecutar un comando del sistema usando procedimientos de automatización OLE. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `XpCmd /c:COMMAND` | Ejecutar un comando del sistema usando xp_cmdshell. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |

### Módulos SQL - Estándar

El indicador de host (`/h:, host:`) es obligatorio y permite uno o más servidores SQL. Si desea ejecutar un módulo contra varios servidores SQL, separe los hosts con una coma, por ejemplo `/h:SQL01,10.10.10.2,SQL03`.

La wiki tiene detalles sobre el uso de cada módulo que admite la ejecución en una o más instancias de <a href="https://github.com/skahwah/SQLRecon/wiki/3.-Standard-Modules">SQL Server</a>.

### Módulos SQL - Suplantación

Los módulos de suplantación se ejecutan contra una o más instancias de Microsoft SQL Server, bajo el contexto de un usuario SQL suplantado. Todos los módulos de suplantación tienen los siguientes requisitos mínimos:
- Se debe especificar un usuario de suplantación (`/i:, /iuser:`).
- Se debe especificar un módulo que admita la suplantación (`/m:, /module:`).

La wiki tiene detalles sobre el uso de cada módulo que admite la ejecución mediante <a href="https://github.com/skahwah/SQLRecon/wiki/4.-Impersonation-Modules">suplantación</a>.

### Módulos SQL - Vinculados

Los módulos vinculados se ejecutan en una o más instancias de un Microsoft SQL Server vinculado. Todos los módulos vinculados tienen los siguientes requisitos mínimos:
- Se debe especificar un servidor SQL vinculado (`/l:, /link:`). El indicador de vínculo permite uno o más servidores SQL vinculados. Por ejemplo, si SQL01 tiene un vínculo con SQL02, y SQL01 tiene un vínculo con DB04, puede separar los hosts vinculados con una coma, y se ejecutará un módulo en cada servidor SQL vinculado, por ejemplo `/l:SQL02,DB04`.
- Se debe especificar un módulo que admita la ejecución vinculada (`/m:, /module:`).

La wiki tiene detalles sobre el uso de cada módulo que admite la ejecución en una o más instancias de un <a href="https://github.com/skahwah/SQLRecon/wiki/5.-Linked-Modules">servidor SQL vinculado</a>.

### Módulos SQL - Cadena vinculada

Los módulos de cadena vinculada se ejecutan en el Microsoft SQL Server final de una cadena de servidores vinculados. Todos los módulos de cadena vinculada tienen los siguientes requisitos mínimos:
- Se debe especificar una cadena de servidores SQL vinculados en el indicador `/l:, /link:`. Si SQL01 tiene un vínculo con SQL02, y SQL02 tiene un vínculo con PAYMENTS01, y desea ejecutar un módulo en PAYMENTS01, entonces el argumento sería `/l:SQL02,PAYMENTS01`.
- El indicador `/chain` debe incluirse para ejecutar el módulo contra el servidor SQL final de la cadena vinculada proporcionada.
- Se debe especificar un módulo que admita la ejecución de cadena vinculada (`/m:, /module:`).

La wiki tiene detalles sobre el uso de cada módulo que admite la ejecución en el servidor SQL final proporcionado en una <a href="https://github.com/skahwah/SQLRecon/wiki/6.-Linked-Chain-Modules">cadena de servidores SQL vinculados</a>.

# Módulos SCCM

SQLRecon tiene varios módulos que pueden ayudar a enumerar y atacar Microsoft System Center Configuration Manager (SCCM) y Microsoft Endpoint Configuration Manager (ECM). El servidor SCCM o ECM deberá tener una base de datos Microsoft SQL expuesta local o remotamente.

Los módulos SCCM deben pasarse al indicador de módulo SCCM (`/s:, /sccm:`).

La mayoría de los módulos SCCM se pueden ejecutar bajo el contexto de un usuario SQL suplantado (`/i:, /iuser:`).

La wiki tiene detalles sobre el uso de cada módulo contra una <a href="https://github.com/skahwah/SQLRecon/wiki/7.-SCCM-Modules">base de datos SCCM/ECM</a>.

| Nombre del módulo | Descripción | Suplantación | Requiere contexto privilegiado |
| ----------- | ----------- | ------------- | --------------------------- |
| `Users` | Mostrar todos los usuarios de SCCM. | :white_check_mark: | :negative_squared_cross_mark: |
| `Sites` | Mostrar todos los demás sitios con datos almacenados. | :white_check_mark: | :negative_squared_cross_mark: |
| `Logons` | Mostrar todos los clientes SCCM asociados y el último usuario que inició sesión. | :white_check_mark: | :negative_squared_cross_mark: |
| `Credentials` | Mostrar las credenciales cifradas almacenadas por SCCM. | :white_check_mark: | :negative_squared_cross_mark: |
| `TaskList` | Mostrar todas las secuencias de tareas, pero no acceder al contenido de los datos de las tareas. | :white_check_mark: | :negative_squared_cross_mark: |
| `TaskData` | Descifrar todas las secuencias de tareas a texto plano. | :white_check_mark: | :negative_squared_cross_mark: |
| `DecryptCredentials` | Descifrar un blob de credenciales de SCCM. Debe ejecutarse en un proceso de alta integridad o SYSTEM en el servidor SCCM. | :x: | :heavy_check_mark: |
| `AddAdmin /user:DOMAIN\USERNAME /sid:SID` | Elevar una cuenta proporcionada a 'Administrador completo' en SCCM. | :white_check_mark: | :heavy_check_mark: |
| `RemoveAdmin /user:ADMIN_ID /remove:STRING` | Elimina los privilegios de un usuario, o elimina un usuario por completo de la base de datos SCCM. | :white_check_mark: | :heavy_check_mark: |

<details>
<summary>Módulos SCCM - Detalles adicionales</summary>

* El módulo `Users` lista todos los usuarios de la tabla `RBAC_Admins`. Estos son todos los usuarios configurados con algún nivel de acceso a SCCM.
* El módulo `Sites` lista todos los demás sitios con datos almacenados en la tabla `DPInfo` de las bases de datos de SCCM. Esto puede proporcionar vías de ataque adicionales, ya que diferentes sitios pueden configurarse de diferentes maneras (inseguras).
* El módulo `Logons` consulta la tabla `Computer_System_DATA` para recuperar todos los clientes SCCM asociados junto con el usuario que inició sesión en ellos por última vez. <b>NOTA:</b> Esto solo se actualiza una vez por semana de forma predeterminada y no estará 100 % actualizado. Use `/option:` como argumento opcional (no requerido) para filtrar los clientes SCCM.
* El módulo `TaskList` proporciona una lista de todas las secuencias de tareas almacenadas en la base de datos SCCM, pero no accede al contenido real de los datos de las tareas.
* El módulo `TaskData` recupera todas las secuencias de tareas almacenadas en la base de datos SCCM y las descifra a texto plano. Las secuencias de tareas pueden contener credenciales para unir sistemas a dominios, asignar recursos compartidos, ejecutar comandos, etc.
* El módulo `Credentials` enumera las credenciales almacenadas por SCCM para su uso en diversas funciones. Estas credenciales no se pueden descifrar de forma remota porque la clave se almacena en el servidor SCCM. Sin embargo, este módulo proporciona información sobre si tiene sentido intentar obtener la clave.
* El módulo `DecryptCredentials` intenta descifrar los blobs de credenciales SCCM recuperados. Este módulo debe ejecutarse en un proceso de alta integridad o SYSTEM en un servidor SCCM.
* El módulo `AddAdmin` eleva la cuenta especificada a 'Administrador completo' dentro de SCCM. Si el usuario objetivo ya es un usuario de SCCM, este módulo agregará los privilegios necesarios para elevarlo. Proporcione dos argumentos: `/user:current /sid:current` si busca agregar al usuario que actualmente ejecuta el proceso de SQLRecon como un 'Administrador completo' en SCCM. Si busca agregar a otro usuario como un 'Administrador completo' en SCCM, especifique su nombre de usuario de dominio y SID completo `/user:DOMAIN\USERNAME /sid:S-1-5-...`.  Este módulo requiere sysadmin o privilegios similares, ya que se requiere escribir en las tablas de la base de datos SCCM.
* El módulo `RemoveAdmin` elimina los privilegios de un usuario al eliminar por completo a un usuario recién agregado de la base de datos SCCM. Si el usuario ya existía de alguna forma, este módulo solo elimina los tres roles que se agregaron a la cuenta mediante escrituras en la tabla de permisos. Use los argumentos proporcionados por la salida del comando `sAddAdmin` para ejecutar este comando. Este módulo requiere sysadmin o privilegios similares, ya que se requiere escribir en las tablas de la base de datos SCCM.
</details>

# Ampliación de SQLRecon

Si está interesado en ampliar SQLRecon, consulte la sección de contribución y ampliación en la <a href="https://github.com/skahwah/SQLRecon/wiki/8.-Contributing-and-Extending-SQLRecon">wiki</a>.

Le animo a abrir un [issue](https://github.com/skahwah/SQLRecon/issues) si tiene sugerencias o ideas.

### Hoja de ruta

El objetivo es mejorar SQLRecon de forma continua. A continuación se enumeran algunas áreas de investigación planificadas:

* Implementar soporte para autenticación basada en hash NTLM.
* Explorar las funcionalidades de enablerpc/disablerpc para servidores SQL vinculados y en cadena.

### Créditos

Las siguientes personas han contribuido directa o indirectamente a diversos aspectos de SQLRecon.

- Adam Chester [(xpn)](https://github.com/xpn)
- Azaël Martin [(n3rada)](https://github.com/n3rada)
- Daniel Duggan [(rasta-mouse)](https://github.com/rasta-mouse)
- Dave Cossa [(G0ldenGunSec)](https://github.com/G0ldenGunSec)
- Dwight Hohnstein [(djhohnstein)](https://github.com/djhohnstein)
- Joshua Magri [(passthehashbrowns)](https://github.com/passthehashbrowns)

# Historial

<details>
<summary>v3.9</summary>

* Se agregaron las bases de datos a las que el usuario tiene acceso en el módulo `whoami` (JBalanza).
* Se corrigió un problema en el módulo `adsi` donde el servidor LDAP no necesita agregarse a la base de datos msdb; además, la función creada ahora se elimina correctamente.
* Se corrigió un problema donde las consultas RPC que tienen una declaración AT fallan en el servidor de destino si el nombre de host proporcionado es un FQDN.
* Se actualizó el README.
* Se actualizó la Wiki.
</details>

<details>
<summary>v3.8</summary>

* Se agregó lógica para admitir la ejecución de ensamblados CLR en SQL Server 2016 y versiones anteriores. Esto es para el módulo clr. Ejecución admitida en todos los contextos.
* Se agregó lógica para cargar un ensamblado CLR de servidor LDAP en SQL Server 2016 y versiones anteriores. Esto es para el módulo adsi. Ejecución admitida en todos los contextos.
* Se actualizó el README.
* Se actualizó la Wiki.
</details>

<details>
<summary>v3.7</summary>

* Refactorización completa de la base de código.
* Documentación actualizada (comentarios de código, README y wiki)
* Ejecución contra una cadena de servidores SQL vinculados. Por ejemplo, si `SQL01` tiene un vínculo con `SQL02`, y `SQL02` tiene un vínculo con `SQL03`, y `SQL03` tiene un vínculo con `PAYMENTS01`. Ahora es posible ejecutar comandos desde `SQL01` en `PAYMENTS01` usando la cadena de servidores vinculados (`/link:SQL02,SQL03,PAYMENTS01 /chain`). Crédito a Azaël Martin (n3rada).
* Se eliminaron los módulos '`l`' y '`i`', y se introdujo lógica de contexto para que los nombres de los módulos puedan ser los mismos en la ejecución estándar, de suplantación, vinculada y en cadena.
* Se agregó soporte de cadena a todos los módulos vinculados.
* Se agregó soporte para depuración (`/debug`), que mostrará diversa información de depuración y todas las consultas SQL que ejecutará un módulo, sin ejecutarlas.
* Se agregó el modo verboso (`/verbose, /v`), que mostrará todas las consultas SQL que se ejecutarán durante la ejecución del módulo.
* Se agregó tiempo de espera (`/timeout, /t`), que toma un valor entero para el tiempo de espera de conexión a la base de datos del servidor SQL.
* Se mejoró el módulo `links` para incluir información detallada. Crédito a Azaël Martin (n3rada).
* Se mejoró el módulo `whoami` para incluir entidades de seguridad de Windows y usuarios de bases de datos. Crédito a Azaël Martin (n3rada).
* Se mejoró el módulo `impersonation` para incluir entidades de seguridad de Windows y usuarios de bases de datos. Crédito a Azaël Martin (n3rada).
* Se agregó la recuperación de direcciones IP al módulo de enumeración `sqlspns`. Crédito a Azaël Martin (n3rada).
* Se estandarizó la salida de consola a markdown cuando corresponde. Crédito a Azaël Martin (n3rada).
* Se agregó soporte DNS al módulo `/enum:info`.
* Se agregó el argumento opcional `/subsystem` al módulo `olecmdexec`, que acepta la ejecución mediante los subsistemas de automatización OLE `CmdExec` o `PowerShell`.
* Se actualizaron los bancos de pruebas para reflejar los cambios en la CLI y los nuevos módulos.
* Se cambió la autenticación `AzureAD` a `EntraID`.
</details>

<details>
<summary>v3.6</summary>

* Ahora se admite la ejecución contra múltiples servidores SQL proporcionados en el indicador `/host` o `/h` usando valores separados por comas.
* Ahora se admite la ejecución contra múltiples servidores SQL vinculados proporcionados en el indicador `/link` o `/l` usando valores separados por comas.
* Se cambió `/lhost` a `/link`.
* Se eliminaron los módulos '`s`' y se creó la opción `/s`, `/sccm` para los módulos SCCM.
* Se agregó soporte de suplantación a todos los módulos SCCM, con la excepción de `DecryptCredentials`.
* Se agregó un nuevo módulo de enumeración (`/enum`) llamado `info`, que puede usar un contexto no autenticado para obtener información del servidor SQL, incluidos el nombre de la instancia y el puerto TCP mediante el protocolo UDP.
* Se movió la lógica de argumentos a métodos individuales dentro de `ModuleHandler.cs` para promover la simplificación y la extensibilidad.
* Se movieron todas las consultas SQL a `Queries.cs`.
* Se creó `EnumerationModules.cs`.
* Se creó `FormatQuery.cs`.
* Se creó `SccmModules.cs`.
* Se renombró `ModuleHandler.cs` a `SqlModules.cs`.
</details>

<details>
<summary>v3.5</summary>

* Corrección de errores donde la ejecución vinculada de `adsi` no eliminaba el servidor LDAP.
* Se eliminó la ejecución de trabajos del agente de `adsi` vinculado, en favor de openquery/rpc.
* Se cambió `/lhost` a `/adsi` en el módulo `adsi`.
* Se cambió `/rhost` a `/unc` en el módulo `smb`.
* Se eliminó `CaptureHash.cs` y se simplificó la lógica.
* Se eliminó `SetEnumerationType.cs` y se simplificó la lógica.
* Se renombró `Impersonation.cs` a `Impersonate.cs`.
* Se renombró `OleCmdExec.cs` a `OleAutomation.cs`.
* Se renombró `PrintUtils.cs` a `Print.cs`.
* Se renombró `SQLServerInfo.cs` a `Info.cs`.
</details>

<details>
<summary>v3.4</summary>

* Se agregó soporte de suplantación para el módulo `smb`.
* Se agregó soporte de suplantación para el módulo `info`.
* Se agregó soporte vinculado para el módulo `info`.
</details>

<details>
<summary>v3.3</summary>

* Se crearon los módulos `rows`, `iRows` y `lRows`.
* Se actualizó `sLogons` para incluir un filtro opcional.
* Corrección de errores donde los módulos `xp_cmdshell` no imprimían la salida de los comandos en la consola.
* Se limpió el menú de ayuda.
</details>

<details>
<summary>v3.2</summary>

* Revisión completa del análisis de argumentos de línea de comandos.
* Se actualizaron el README, los casos de prueba y la wiki con nuevos ejemplos.
* Se rediseñó el análisis de argumentos basado en enumeración y autenticación.
* Se creó `SetEnumerationType.cs`.
* Se cambió el módulo de enumeración `domain` a `SqlSpns`.
</details>

<details>
<summary>v3.1</summary>* Se cambió el constructor de `SetAuthenticationType.cs` por un nuevo método llamado `EvaluateAuthenticationType`.
* Se creó `CreateSqlConnectionObject` en `SetAuthenticationType.cs`, que extiende SQLRecon para soportar múltiples objetos de conexión SQL simultáneos.
* Se creó `ADSI.cs`, que incorpora ataques de credenciales ADSI como se describe [aquí](https://www.tarlogic.com/blog/linked-servers-adsi-passwords/).
* Se crearon los módulos `adsi`, `iAdsi` y `lAdsi`.
* Se crearon los módulos `lLinks` e `iLinks`.
* Se actualizaron el README, los casos de prueba y la wiki con nuevos ejemplos.
</details>

<details>
<summary>v3.0</summary>

* Se implementó la comprobación de errores para usuarios suplantados inexistentes.
* Se crearon `ExecuteImpersonationQuery` y `ExecuteImpersonationCustomQuery`.
* Se eliminó `Impersonate.cs`.
* Se añadió el módulo `checkRpc`.
* Se añadió el módulo `iCheckRpc`.
* Se añadió el módulo `lCheckRpc`.
* Se rediseñaron los módulos SCCM.
* Se rediseñó el análisis de argumentos de SCCM.
* Se aplicó el formato camelCase a los comandos del menú de ayuda para facilitar la lectura.
* Se actualizaron las pruebas con los nuevos módulos.
</details>

<details>
<summary>v2.9</summary>

* Se renombró `EnableDisable.cs` a `ConfigureOptions.cs`.
* Se revisaron por completo las configuraciones de opciones avanzadas.
* Se implementó la comprobación de errores RPC en todos los lugares donde se llama a `ExecuteLinkedCustomQueryRpcExec`.
</details>

<details>
<summary>v2.8</summary>

* Se creó` PrintUtils.cs`, que implementa una clase de impresión para la salida estandarizada.
* Se movió `TablePrinter` de `Help.cs` a `PrintUtils.cs`.
* Se estandarizó el formato de impresión para toda la salida de consola usando la clase `PrintUtils`.
* Se cambiaron los modificadores de acceso para clases y variables de clase.
* Se añadió una comprobación para ver si el resultado está vacío para: 
    * `query`
    * `search`
    * `tables`
    * `lColumns`
    * `lQuery`
    * `lSearch`
    * `lTables`
    * `iColumns`
    * `iQuery`
    * `iSearch`
* Pruebas significativas de fiabilidad y funcionalidad contra todos los proveedores de autenticación y módulos.
</details>

<details>
<summary>v2.7</summary>

* Se cambió la autenticación `Azure` a `AzureAD`.
* Se creó la autenticación `AzureLocal`.
* Se añadió el módulo `disableRpc`.
* Se añadió el módulo `enableRpc`.
* Se añadió el módulo `iEnableRpc`.
* Se añadió el módulo `iDisableRpc`.
* Se eliminó el módulo `lEnableRpc`.
* Se eliminó el módulo `lDisbleRpc`.
* Se actualizaron las pruebas con los nuevos módulos.
</details>

<details>
<summary>v2.6.1</summary>

* Se corrigieron errores en `lAgentCmd`.
* Se corrigió la estabilidad de `clr`, `iClr` y `lClr` usando `SqlCommand.ExecuteNonQuery` al crear el procedimiento almacenado.
* Se corrigió un error en `lClr` que no eliminaba los ensamblados o procedimientos almacenados creados.
</details>

<details>
<summary>v2.6</summary>

* Se añadió el módulo `columns`.
* Se añadió el módulo `iColumns`.
* Se añadió el módulo `iDatabases`.
* Se añadió el módulo `iSearch`.
* Se añadió el módulo `iTables`.
* Se añadió el módulo `lColumns`.
* Se añadió el módulo `lSearch`.
</details>

<details>
<summary>v2.5</summary>

* Se corrigieron varios errores en los módulos SCCM.
* Se organizó el menú de ayuda usando una tabla.
* Se mejoró la salida proporcionada por `ExecuteLinkedCustomQueryRpcExec`.
* Se mejoró el comentado del código en todo el proyecto.
* Se mejoró la coherencia de los nombres de los métodos en las funciones de ejecución de comandos.
* Se mejoró la modularidad mediante un mejor uso de la programación orientada a objetos.
* Se cambió la bandera de puerto personalizado del servidor SQL a `x`.
* Se movió `Random.cs` al directorio `utilities`.
* Se estandarizó el estilo de impresión para hacerlo más coherente en todos los módulos.
* Se crearon bancos de pruebas estándar, de suplantación y vinculados.
</details>

<details>
<summary>v2.4</summary>

* Se cambió la autenticación `Windows` a `WinToken`.
* Se creó la autenticación `WinDomain`, que usa el nombre de usuario y la contraseña del dominio AD para autenticarse mediante suplantación. Consulta `Impersonation.cs`.
* Se rediseñó el análisis y manejo de argumentos en `ArgumentLogic.cs`, `SQLAuthentication.cs` y `ModuleHandler.cs`.
* `ModuleHandler.cs` ya no usa una enorme sentencia if/else if/else para ejecutar módulos. En su lugar, ahora se usa la reflexión para llamar a métodos que coinciden con los nombres de los módulos de comandos.
* Se añadió el directorio `commands`, que contiene variables globales que se usan en todo el programa.
* Se integraron todos los proveedores de autenticación en `SQLAuthentication.cs`.
* Se movió el análisis de argumentos de `Program.cs` a `ArgumentLogic.cs`.
* Se eliminó el directorio `authentication`.
* Se cambió el estilo del código para seguir mejor la [guía de estilo de código C#/.NET de Microsoft](https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/coding-conventions).
* Se cambió `Help.cs` de un método a un constructor.
* Se cambió `CaptureHash.cs` de un método a un constructor.
* Se cambió `Impersonate.cs` de un método a un constructor.
* Se refactorizó toda la base de código.
</details>

<details>
<summary>v2.3</summary>

* Se añadió funcionalidad SCCM.
* Se añadieron módulos SCCM, que se pueden ejecutar usando el comando `sccm`.
* Se corrigió la comprobación del estado RPC en servidores SQL vinculados.
* Se añadió la capacidad de descargar ensamblados .NET mediante HTTP/S.
</details>

<details>
<summary>v2.2</summary>

* Se ampliaron los roles que se consultan en los módulos `roles`, `iRoles` y `lRoles`.
* Se crearon los módulos `users`, `iUsers` y `lUsers`.
* Se corrigió el hash que no se eliminaba de `sp_drop_trusted_assembly` en los módulos `clr` e `iClr`.
* Se creó el módulo `lAgentCmd`.
* Se creó el módulo `lClr`.
</details>

<details>
<summary>v2.1.6</summary>

* Se añadió el módulo `info`.
* Correcciones en el menú de ayuda.
* Se resolvieron problemas con los argumentos obligatorios en la autenticación `Local` y `Azure`.
</details>

<details>
<summary>v2.1.5</summary>

* Se añadió un módulo para enumerar SPN de dominio (`-e domain`).
</details>

<details>
<summary>v2.1.4</summary>

* Se corrigió un problema menor de formato de cadenas.
</details>

<details>
<summary>v2.1.3</summary>

* Se añadió la bandera `-r` a los modos de autenticación `Windows` y `Local` para poder indicar puertos TCP no estándar.
</details>

<details>
<summary>v2.1.2</summary>

* Se mejoró la lógica en torno a las cadenas de conexión nulas.
</details>

<details>
<summary>v2.1.1</summary>

* Se eliminó `Environment.Exit` de `TestAuthentication.cs`.
</details>

<details>
<summary>v2.1</summary>

* Se creó `AgentJobs.cs`.
* Se creó `agentStatus`.
* Se creó `iAgentStatus`.
* Se creó `lAgentStatus`.
* Se creó `agentCmd`.
* Se creó `iAgentCmd`.
</details>

<details>
<summary>v2.0</summary>

* Se creó `clr`.
* Se creó `iEnableClr`.
* Se creó `iDisbleClr`.
* Se creó `iClr`.
* Se creó `iWhoami`.
* Se creó `iMapped`.
* Se creó `iRoles`.
* Se creó `lEnableRpc`.
* Se creó `lDisableRpc`.
* Se creó `lWhoai`.
* Se creó `lEnableXp`.
* Se creó `lDisableXp`.
* Se creó `lEnableOle`.
* Se creó `lDisableOle`.
* Se creó `lEnableClr`.
* Se creó `lDisableClr`.
* Se creó `lXpCmd`.
* Se creó `lXpOle`.
* Se creó `Random.cs`.
* Se creó `EnableDisable.cs`.
* Se implementaron nombres de ensamblado generados aleatoriamente para `clr`.
* Se implementaron nombres de variables y métodos generados aleatoriamente para `ole`.
* Se integraron los módulos `mapped` y `roles` en `whoami`.
* Se integraron los módulos `lMapped` y `lRoles` en `lWhoami`.
* Se integraron los módulos `iMapped` y `iRoles` en `iWhoami`.
* Se refactorizó toda la base de código.
</details>

<details>
<summary>v1.2</summary>

* Se creó el módulo `lSmb`.
* Se creó el módulo `lWhoami`.
* Se creó el módulo `lRoles`.
</details>

<details>
<summary>v1.1</summary>

* Se corrigió el módulo `oldCmd`.
* Se corrigió el módulo `iOleCmd`.
* Se corrigió el módulo `lDatabases`.
* Se corrigió el módulo `lTables`.
* Se limpió la base de código.
* Se corrigieron incoherencias en el menú de ayuda.
</details>
Descargar herramienta