
Un toolkit C# per MS SQL progettato per la ricognizione offensiva e il post-sfruttamento.
[![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 è un toolkit per Microsoft SQL Server progettato per la ricognizione offensiva e il post-exploitation. Per informazioni dettagliate su come utilizzare ogni tecnica, fare riferimento alla <a href="https://github.com/skahwah/SQLRecon/wiki">wiki</a>.
Puoi scaricare una copia di SQLRecon dalla pagina [releases](https://github.com/skahwah/SQLRecon/releases). In alternativa, sentiti libero di compilare tu stesso la soluzione. Dovrebbe essere semplice come clonare il repository, fare doppio clic sul file della soluzione e compilare.
È stata inoltre fornita una <a href="https://github.com/skahwah/SQLRecon/wiki/9.-Prevention,-Detection-and-Mitigation-Guidance">guida per prevenzione, rilevamento e mitigazione</a> per tutti voi difensori là fuori.
Dai un'occhiata al mio post sul blog sul sito <a href="https://securityintelligence.com/posts/databases-beware-abusing-microsoft-sql-server-with-sqlrecon/">IBM Security Intelligence</a>. Se preferisci i video, dai un'occhiata alla mia <a href="https://www.youtube.com/watch?v=LsYSePobFWA">presentazione al Black Hat</a>.
# Moduli di enumerazione
I moduli di enumerazione non richiedono la fornitura di un provider di autenticazione. Questi moduli devono essere passati al flag del modulo di enumerazione (`/e:, /enum:`). La wiki contiene dettagli sull'uso dei <a href="https://github.com/skahwah/SQLRecon/wiki/1.-Enumeration">moduli di enumerazione</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.
```
# Provider di autenticazione
SQLRecon supporta un'ampia gamma di provider di autenticazione (`/a:, /auth:`) per consentire l'interazione 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.
```
### Provider di autenticazione - Dettagli aggiuntivi
- **Hosts**: Il flag host (`/h:, host:`) è obbligatorio e consente di specificare uno o più server SQL. Se si desidera eseguire un modulo su più server SQL, separare gli host con una virgola, ad esempio `/h:SQL01,10.10.10.2,SQL03`.
- **Database**: SQLRecon si connette al database `master` per impostazione predefinita, ma è possibile modificarlo fornendo un nome di database personalizzato tramite il flag database (`/database:`).
- **Debug**: Il flag `/debug` è opzionale e mostra tutte le query SQL eseguite da un modulo, senza eseguirle realmente sugli host remoti. Un esempio è disponibile nella <a href="https://github.com/skahwah/SQLRecon/wiki">wiki</a>.
- **Port**: In alcuni casi, un Microsoft SQL Server potrebbe non essere in ascolto su una porta TCP standard. Alcuni esempi sono il clustering di failover di Microsoft SQL Server o le porte TCP dinamiche. SQLRecon si connette ai database tramite la porta TCP `1433` per impostazione predefinita, ma è possibile modificarla usando il flag `/port:`.
- **Timeout**: Il tempo di connessione predefinito al database SQL è di `3` secondi, ma questo valore può essere modificato fornendo un valore di timeout (`/t:, /timeout:`) che corrisponde al numero di secondi prima di terminare il tentativo di connessione.
- **Verbose**: Il flag `/v, /verbose` è opzionale e mostra tutte le query SQL che verranno eseguite da un modulo prima di eseguirle sugli host remoti. Un esempio è disponibile nella <a href="https://github.com/skahwah/SQLRecon/wiki">wiki</a>.
Si noti che il provider di autenticazione `EntraID` richiede che la libreria di autenticazione di Azure Active Directory (ADAL) o la libreria di autenticazione Microsoft (MSAL) sia presente sul sistema dal quale viene eseguito SQLRecon. Questo è necessario per le funzionalità di autenticazione e autorizzazione di Azure EntraID.
# Moduli SQL
I moduli SQL vengono eseguiti su una o più istanze di Microsoft SQL Server. Questi moduli devono essere passati tramite il flag dei moduli (`/m:, /module:`).
| Nome modulo | Descrizione | Impersonificazione | Esecuzione collegata | Esecuzione catena collegata | Richiede contesto privilegiato |
| ----------- | ----------- | ------------- | ---------------- | ---------------------- | --------------------------- |
| `CheckRpc` | Ottiene un elenco dei server collegati e del loro stato RPC. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Databases` | Mostra tutti i database. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Impersonate` | Elenca gli account utente che possono essere impersonati. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Info` | Mostra informazioni sul server SQL. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Links` | Elenca i server SQL collegati. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Users` | Mostra quali account utente e gruppi possono autenticarsi sul database. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Whoami` | Mostra i tuoi privilegi. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Query /c:QUERY` | Esegue una query SQL. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Smb /unc:UNC_PATH` | Cattura l'hash NetNTLMv2. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Columns /db:DATABASE /table:TABLE` | Mostra tutte le colonne nel database e nella tabella specificati. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Rows /db:DATABASE /table:TABLE` | Mostra il numero di righe nella tabella del database specificato. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Search /keyword:KEYWORD` | Cerca nomi di colonne nella tabella specificata del database a cui sei connesso. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `Tables /db:DATABASE` | Mostra tutte le tabelle nel database specificato. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :negative_squared_cross_mark: |
| `EnableRpc /rhost:LINKED_HOST` | Abilita RPC e RPC out su un server collegato. | :white_check_mark: | :x: | :x: | :heavy_check_mark: |
| `EnableClr` | Abilita l'integrazione CLR. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `EnableOle` | Abilita le procedure di automazione OLE. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `EnableXp` | Abilita xp_cmdshell. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `DisableRpc /rhost:LINKED_HOST` | Disabilita RPC e RPC out su un server collegato. | :white_check_mark: | :x: | :x: | :heavy_check_mark: |
| `DisableClr` | Disabilita l'integrazione CLR. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `DisableOle` | Disabilita le procedure di automazione OLE. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `DisableXp` | Disabilita xp_cmdshell. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `AgentStatus` | Mostra se l'agente SQL è in esecuzione e ottiene i processi dell'agente. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `AgentCmd /c:COMMAND` | Esegue un comando di sistema usando i processi dell'agente. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `Adsi /adsi:SERVER_NAME /lport:LOCAL_PORT` | Ottiene credenziali ADSI in chiaro da un server ADSI collegato. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `Clr /dll:DLL /function:FUNCTION` | Carica ed esegue un assembly .NET in una stored procedure personalizzata. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `OleCmd /c:COMMAND /subsystem:(OPTIONAL)` | Esegue un comando di sistema usando le procedure di automazione OLE. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
| `XpCmd /c:COMMAND` | Esegue un comando di sistema usando xp_cmdshell. | :white_check_mark: | :white_check_mark: | :white_check_mark: | :heavy_check_mark: |
### Moduli SQL - Standard
Il flag host (`/h:, host:`) è obbligatorio e consente di specificare uno o più server SQL. Se si desidera eseguire un modulo su più server SQL, separare gli host con una virgola, ad esempio `/h:SQL01,10.10.10.2,SQL03`.
La wiki contiene i dettagli sull'uso di ogni modulo che supporta l'esecuzione su una o più istanze di <a href="https://github.com/skahwah/SQLRecon/wiki/3.-Standard-Modules">SQL Server</a>.
### Moduli SQL - Impersonificazione
I moduli di impersonificazione vengono eseguiti su una o più istanze di Microsoft SQL Server, nel contesto di un utente SQL impersonato. Tutti i moduli di impersonificazione hanno i seguenti requisiti minimi:
- Deve essere specificato un utente da impersonare (`/i:, /iuser:`).
- Deve essere specificato un modulo che supporta l'impersonificazione (`/m:, /module:`).
La wiki contiene i dettagli sull'uso di ogni modulo che supporta l'esecuzione tramite <a href="https://github.com/skahwah/SQLRecon/wiki/4.-Impersonation-Modules">Impersonificazione</a>.
### Moduli SQL - Collegati
I moduli collegati vengono eseguiti su una o più istanze di un server Microsoft SQL collegato. Tutti i moduli collegati hanno i seguenti requisiti minimi:
- Deve essere specificato un server SQL collegato (`/l:, /link:`). Il flag link consente di specificare uno o più server SQL collegati. Ad esempio, se SQL01 ha un collegamento a SQL02 e SQL01 ha un collegamento a DB04, è possibile separare gli host collegati con una virgola e il modulo verrà eseguito su ogni server SQL collegato, ad esempio `/l:SQL02,DB04`.
- Deve essere specificato un modulo che supporta l'esecuzione collegata (`/m:, /module:`).
La wiki contiene i dettagli sull'uso di ogni modulo che supporta l'esecuzione su una o più istanze di un <a href="https://github.com/skahwah/SQLRecon/wiki/5.-Linked-Modules">Server SQL collegato</a>.
### Moduli SQL - Catena di collegamenti
I moduli a catena di collegamenti vengono eseguiti sul server Microsoft SQL finale in una catena di server collegati. Tutti i moduli a catena di collegamenti hanno i seguenti requisiti minimi:
- Deve essere specificata una catena di server SQL collegati tramite il flag `/l:, /link:`. Se SQL01 ha un collegamento a SQL02 e SQL02 ha un collegamento a PAYMENTS01, e si desidera eseguire un modulo su PAYMENTS01, l'argomento sarà `/l:SQL02,PAYMENTS01`.
- Il flag `/chain` deve essere incluso per eseguire il modulo sul server SQL finale nella catena di collegamenti fornita.
- Deve essere specificato un modulo che supporta l'esecuzione a catena di collegamenti (`/m:, /module:`).
La wiki contiene i dettagli sull'uso di ogni modulo che supporta l'esecuzione sul server SQL finale fornito in una <a href="https://github.com/skahwah/SQLRecon/wiki/6.-Linked-Chain-Modules">Catena di server SQL collegati</a>.
# Moduli SCCM
SQLRecon dispone di diversi moduli che possono aiutare nell'enumerazione e nell'attacco a Microsoft System Center Configuration Manager (SCCM) e Microsoft Endpoint Configuration Manager (ECM). Il server SCCM o ECM dovrà esporre un database Microsoft SQL, localmente o in remoto.
I moduli SCCM devono essere passati tramite il flag dei moduli SCCM (`/s:, /sccm:`).
La maggior parte dei moduli SCCM può essere eseguita nel contesto di un utente SQL impersonato (`/i:, /iuser:`).
La wiki contiene i dettagli sull'uso di ogni modulo contro un <a href="https://github.com/skahwah/SQLRecon/wiki/7.-SCCM-Modules">database SCCM/ECM</a>.
| Nome modulo | Descrizione | Impersonificazione | Richiede contesto privilegiato |
| ----------- | ----------- | ------------- | --------------------------- |
| `Users` | Mostra tutti gli utenti SCCM. | :white_check_mark: | :negative_squared_cross_mark: |
| `Sites` | Mostra tutti gli altri siti con dati memorizzati. | :white_check_mark: | :negative_squared_cross_mark: |
| `Logons` | Mostra tutti i client SCCM associati e l'ultimo utente che ha effettuato l'accesso. | :white_check_mark: | :negative_squared_cross_mark: |
| `Credentials` | Mostra le credenziali crittografate custodite da SCCM. | :white_check_mark: | :negative_squared_cross_mark: |
| `TaskList` | Mostra tutte le sequenze di attività, ma non accede al contenuto dei dati delle attività. | :white_check_mark: | :negative_squared_cross_mark: |
| `TaskData` | Decrittografa tutte le sequenze di attività in testo chiaro. | :white_check_mark: | :negative_squared_cross_mark: |
| `DecryptCredentials` | Decrittografa un blob di credenziali SCCM. Deve essere eseguito in un processo ad alta integrità o SYSTEM sul server SCCM. | :x: | :heavy_check_mark: |
| `AddAdmin /user:DOMAIN\USERNAME /sid:SID` | Eleva un account specificato a 'Full Administrator' in SCCM. | :white_check_mark: | :heavy_check_mark: |
| `RemoveAdmin /user:ADMIN_ID /remove:STRING` | Rimuove i privilegi di un utente oppure rimuove completamente un utente dal database SCCM. | :white_check_mark: | :heavy_check_mark: |
<details>
<summary>Moduli SCCM - Dettagli aggiuntivi</summary>
* Il modulo `Users` elenca tutti gli utenti nella tabella `RBAC_Admins`. Questi sono tutti gli utenti configurati con un certo livello di accesso a SCCM.
* Il modulo `Sites` elenca tutti gli altri siti con dati memorizzati nella tabella `DPInfo` del database SCCM. Questo può fornire ulteriori strade di attacco, poiché siti diversi possono essere configurati in modi diversi (non sicuri).
* Il modulo `Logons` interroga la tabella `Computer_System_DATA` per recuperare tutti i client SCCM associati insieme all'utente che ha effettuato l'ultimo accesso. <b>NOTA:</b> Per impostazione predefinita questo dato viene aggiornato solo una volta alla settimana e non sarà aggiornato al 100%. Usare `/option:` come argomento opzionale (non richiesto) per filtrare i client SCCM.
* Il modulo `TaskList` fornisce un elenco di tutte le sequenze di attività memorizzate nel database SCCM, ma non accede al contenuto effettivo dei dati delle attività.
* Il modulo `TaskData` recupera tutte le sequenze di attività memorizzate nel database SCCM e le decrittografa in testo chiaro. Le sequenze di attività possono contenere credenziali per aggiungere sistemi ai domini, mappare condivisioni, eseguire comandi, ecc.
* Il modulo `Credentials` elenca le credenziali custodite da SCCM per l'uso in varie funzioni. Queste credenziali non possono essere decrittografate da remoto poiché la chiave è memorizzata sul server SCCM. Tuttavia, questo modulo fornisce informazioni utili per capire se ha senso tentare di ottenere la chiave.
* Il modulo `DecryptCredentials` tenta di decrittografare i blob di credenziali SCCM recuperati. Questo modulo deve essere eseguito in un processo ad alta integrità o SYSTEM su un server SCCM.
* Il modulo `AddAdmin` eleva l'account specificato a 'Full Administrator' all'interno di SCCM. Se l'utente target è già un utente SCCM, questo modulo aggiungerà invece i privilegi necessari per elevarlo. Fornire due argomenti: `/user:current /sid:current` se si desidera aggiungere l'utente che sta eseguendo il processo SQLRecon come 'Full Administrator' in SCCM. Se si desidera aggiungere un altro utente come 'Full Administrator' in SCCM, specificare il nome utente di dominio e il SID completo `/user:DOMAIN\USERNAME /sid:S-1-5-...`. Questo modulo richiede privilegi sysadmin o simili, poiché è necessaria la scrittura nelle tabelle del database SCCM.
* Il modulo `RemoveAdmin` rimuove i privilegi di un utente eliminando completamente un utente appena aggiunto dal database SCCM. Se l'utente esisteva già in qualche forma, questo modulo rimuove solo i tre ruoli aggiunti all'account tramite scritture nella tabella dei permessi. Usare gli argomenti forniti dall'output del comando `sAddAdmin` per eseguire questo comando. Questo modulo richiede privilegi sysadmin o simili, poiché è necessaria la scrittura nelle tabelle del database SCCM.
</details>
# Estendere SQLRecon
Se sei interessato a estendere SQLRecon, fai riferimento alla sezione contributi ed estensione nella <a href="https://github.com/skahwah/SQLRecon/wiki/8.-Contributing-and-Extending-SQLRecon">wiki</a>.
Ti invito ad aprire una [issue](https://github.com/skahwah/SQLRecon/issues) se hai suggerimenti o idee.
### Roadmap
L'obiettivo è migliorare continuamente SQLRecon. Di seguito sono elencate alcune aree di ricerca pianificate:
* Implementare il supporto per l'autenticazione basata su hash NTLM.
* Esplorare le funzionalità enablerpc/disablerpc per i server SQL collegati e a catena di collegamenti.
### Crediti
Le seguenti persone hanno contribuito direttamente o indirettamente a vari aspetti di 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)
# Cronologia
<details>
<summary>v3.9</summary>
* Aggiunti i database a cui l'utente ha accesso nel modulo `whoami` (JBalanza).
* Corretto un problema nel modulo `adsi` per cui il server LDAP non deve essere aggiunto al database msdb; inoltre, la funzione creata ora viene eliminata correttamente.
* Corretto un problema per cui le query RPC con un'istruzione AT falliscono sul server di destinazione se il nome host fornito è un FQDN.
* Aggiornato il README.
* Aggiornata la Wiki.
</details>
<details>
<summary>v3.8</summary>
* Aggiunta la logica per supportare l'esecuzione di assembly CLR su SQL Server 2016 e versioni precedenti. Questo riguarda il modulo clr. Esecuzione supportata in tutti i contesti.
* Aggiunta la logica per caricare un assembly CLR del server LDAP su SQL Server 2016 e versioni precedenti. Questo riguarda il modulo adsi. Esecuzione supportata in tutti i contesti.
* Aggiornato il README.
* Aggiornata la Wiki.
</details>
<details>
<summary>v3.7</summary>
* Refactoring completo della base di codice.
* Documentazione aggiornata (commenti al codice, README e wiki)
* Esecuzione su una catena di server SQL collegati. Ad esempio, se `SQL01` ha un collegamento a `SQL02`, `SQL02` ha un collegamento a `SQL03` e `SQL03` ha un collegamento a `PAYMENTS01`, ora è possibile eseguire comandi da `SQL01` su `PAYMENTS01` usando la catena di server collegati (`/link:SQL02,SQL03,PAYMENTS01 /chain`). Credito a Azaël Martin (n3rada).
* Rimossi i moduli '`l`' e '`i`' e introdotta la logica di contesto, così i nomi dei moduli possono essere gli stessi tra esecuzione standard, impersonificazione, collegata e a catena.
* Aggiunto il supporto alla catena per tutti i moduli collegati.
* Aggiunto il supporto per il debug (`/debug`), che mostra varie informazioni di debug e tutte le query SQL che verranno eseguite da un modulo, senza eseguirle.
* Aggiunto il verbose (`/verbose, /v`), che mostra tutte le query SQL che verranno eseguite durante l'esecuzione del modulo.
* Aggiunto il timeout (`/timeout, /t`), che accetta un valore intero per il timeout di connessione al database del server SQL.
* Migliorato il modulo `links` per includere informazioni dettagliate. Credito a Azaël Martin (n3rada).
* Migliorato il modulo `whoami` per includere principal Windows e utenti del database. Credito a Azaël Martin (n3rada).
* Migliorato il modulo `impersonation` per includere principal Windows e utenti del database. Credito a Azaël Martin (n3rada).
* Aggiunto il recupero degli indirizzi IP nel modulo di enumerazione `sqlspns`. Credito a Azaël Martin (n3rada).
* Standardizzato l'output della console in markdown dove applicabile. Credito a Azaël Martin (n3rada).
* Aggiunto il supporto DNS al modulo `/enum:info`.
* Aggiunto l'argomento opzionale `/subsystem` al modulo `olecmdexec`, che accetta l'esecuzione tramite i sottosistemi di automazione OLE `CmdExec` o `PowerShell`.
* Aggiornati gli harness di test per riflettere le modifiche alla CLI e i nuovi moduli.
* Modificata l'autenticazione `AzureAD` in `EntraID`.
</details>
<details>
<summary>v3.6</summary>
* Ora è supportata l'esecuzione su più server SQL forniti tramite il flag `/host` o `/h` usando valori separati da virgola.
* Ora è supportata l'esecuzione su più server SQL collegati forniti tramite il flag `/link` o `/l` usando valori separati da virgola.
* Modificato `/lhost` in `/link`.
* Rimossi i moduli '`s`' e creato lo switch `/s`, `/sccm` per i moduli SCCM.
* Aggiunto il supporto all'impersonificazione per tutti i moduli SCCM, ad eccezione di `DecryptCredentials`.
* Aggiunto un nuovo modulo di enumerazione (`/enum`) chiamato `info` che è in grado di utilizzare un contesto non autenticato per ottenere informazioni sul server SQL, inclusi nome dell'istanza e porta TCP, usando il protocollo UDP.
* Spostata la logica degli argomenti in metodi individuali all'interno di `ModuleHandler.cs` per favorire la semplificazione e l'estensibilità.
* Spostate tutte le query SQL in `Queries.cs`.
* Creato `EnumerationModules.cs`.
* Creato `FormatQuery.cs`.
* Creato `SccmModules.cs`.
* Rinominato `ModuleHandler.cs` in `SqlModules.cs`.
</details>
<details>
<summary>v3.5</summary>
* Correzione di un bug per cui l'esecuzione collegata di `adsi` non rimuoveva il server LDAP.
* Rimossa l'esecuzione dei processi dell'agente da `adsi` collegato, a favore di openquery/rpc.
* Modificato `/lhost` in `/adsi` nel modulo `adsi`.
* Modificato `/rhost` in `/unc` nel modulo `smb`.
* Rimosso `CaptureHash.cs` e semplificata la logica.
* Rimosso `SetEnumerationType.cs` e semplificata la logica.
* Rinominato `Impersonation.cs` in `Impersonate.cs`.
* Rinominato `OleCmdExec.cs` in `OleAutomation.cs`.
* Rinominato `PrintUtils.cs` in `Print.cs`.
* Rinominato `SQLServerInfo.cs` in `Info.cs`.
</details>
<details>
<summary>v3.4</summary>
* Aggiunto il supporto all'impersonificazione per il modulo `smb`.
* Aggiunto il supporto all'impersonificazione per il modulo `info`.
* Aggiunto il supporto collegato per il modulo `info`.
</details>
<details>
<summary>v3.3</summary>
* Creati i moduli `rows`, `iRows` e `lRows`.
* Aggiornato `sLogons` per includere un filtro opzionale.
* Correzione di un bug per cui i moduli `xp_cmdshell` non stampavano l'output dei comandi nella console.
* Pulito il menu Help.
</details>
<details>
<summary>v3.2</summary>
* Revisione completa del parsing degli argomenti della riga di comando.
* Aggiornati README, casi di test e wiki con nuovi esempi.
* Rielaborato il parsing degli argomenti basato su enumerazione e autenticazione.
* Creato `SetEnumerationType.cs`.
* Modificato il modulo di enumerazione `domain` in `SqlSpns`.
</details>
<details>
<summary>v3.1</summary>* Modificato il costruttore di `SetAuthenticationType.cs` in un nuovo metodo chiamato `EvaluateAuthenticationType`.
* Creato `CreateSqlConnectionObject` in `SetAuthenticationType.cs`, che estende SQLRecon per supportare più oggetti di connessione SQL simultanei.
* Creato `ADSI.cs`, che incorpora gli attacchi alle credenziali ADSI come descritto [qui](https://www.tarlogic.com/blog/linked-servers-adsi-passwords/).
* Creati i moduli `adsi`, `iAdsi` e `lAdsi`.
* Creati i moduli `lLinks` e `iLinks`.
* Aggiornati README, casi di test e wiki con nuovi esempi.
</details>
<details>
<summary>v3.0</summary>
* Implementato il controllo degli errori per utenti impersonati inesistenti.
* Creati `ExecuteImpersonationQuery` e `ExecuteImpersonationCustomQuery`.
* Eliminato `Impersonate.cs`.
* Aggiunto il modulo `checkRpc`.
* Aggiunto il modulo `iCheckRpc`.
* Aggiunto il modulo `lCheckRpc`.
* Rielaborati i moduli SCCM.
* Rielaborato il parsing degli argomenti SCCM.
* Comandi in camel case nel menu di aiuto per una lettura più semplice.
* Aggiornati i test con i nuovi moduli.
</details>
<details>
<summary>v2.9</summary>
* Rinominato `EnableDisable.cs` in `ConfigureOptions.cs`.
* Revisionate completamente le configurazioni delle opzioni avanzate.
* Implementato il controllo degli errori RPC ovunque venga chiamato `ExecuteLinkedCustomQueryRpcExec`.
</details>
<details>
<summary>v2.8</summary>
* Creato` PrintUtils.cs`, che implementa una classe di stampa per un output standardizzato.
* Spostato `TablePrinter` da `Help.cs` a `PrintUtils.cs`.
* Standardizzata la formattazione di stampa per tutti gli output della console utilizzando la classe `PrintUtils`.
* Cambiati i modificatori di accesso per classi e variabili di classe.
* Aggiunto un controllo per verificare se il risultato è vuoto per:
* `query`
* `search`
* `tables`
* `lColumns`
* `lQuery`
* `lSearch`
* `lTables`
* `iColumns`
* `iQuery`
* `iSearch`
* Significativi test di affidabilità e funzionalità su tutti i provider di autenticazione e moduli.
</details>
<details>
<summary>v2.7</summary>
* Modificata l'autenticazione `Azure` in `AzureAD`.
* Creata l'autenticazione `AzureLocal`.
* Aggiunto il modulo `disableRpc`.
* Aggiunto il modulo `enableRpc`.
* Aggiunto il modulo `iEnableRpc`.
* Aggiunto il modulo `iDisableRpc`.
* Rimosso il modulo `lEnableRpc`.
* Rimosso il modulo `lDisbleRpc`.
* Aggiornati i test con i nuovi moduli.
</details>
<details>
<summary>v2.6.1</summary>
* Correzioni di bug per `lAgentCmd`.
* Corretta la stabilità di `clr`, `iClr` e `lClr` utilizzando `SqlCommand.ExecuteNonQuery` durante la creazione della stored procedure.
* Corretto il bug di `lClr` che non rimuoveva gli assembly o le stored procedure create.
</details>
<details>
<summary>v2.6</summary>
* Aggiunto il modulo `columns`.
* Aggiunto il modulo `iColumns`.
* Aggiunto il modulo `iDatabases`.
* Aggiunto il modulo `iSearch`.
* Aggiunto il modulo `iTables`.
* Aggiunto il modulo `lColumns`.
* Aggiunto il modulo `lSearch`.
</details>
<details>
<summary>v2.5</summary>
* Diversi bug corretti nei moduli SCCM.
* Organizzato il menu di aiuto utilizzando una tabella.
* Migliorato l'output fornito da `ExecuteLinkedCustomQueryRpcExec`.
* Migliorati i commenti al codice in tutto il progetto.
* Migliorata la coerenza dei nomi dei metodi nelle funzioni di esecuzione dei comandi.
* Migliorata la modularità attraverso un uso migliore della programmazione orientata agli oggetti.
* Modificato il flag per la porta personalizzata del server SQL in `x`.
* Spostato `Random.cs` nella directory `utilities`.
* Standardizzato lo stile di stampa per renderlo più coerente in tutti i moduli.
* Creati gli harness di test standard, per l'impersonazione e per i server collegati.
</details>
<details>
<summary>v2.4</summary>
* Modificata l'autenticazione `Windows` in `WinToken`.
* Creata l'autenticazione `WinDomain`, che utilizza nome utente e password del dominio AD per l'autenticazione tramite impersonazione. Dai un'occhiata a `Impersonation.cs`.
* Rielaborati il parsing e la gestione degli argomenti in `ArgumentLogic.cs`,` SQLAuthentication.cs` e `ModuleHandler.cs`.
* `ModuleHandler.cs` non utilizza più una grande istruzione if/else if/else per eseguire i moduli. Al suo posto, ora viene usata la reflection per chiamare i metodi che corrispondono ai nomi dei moduli dei comandi.
* Aggiunta la directory `commands`, che contiene variabili globali utilizzate in tutto il programma.
* Integrati tutti i provider di autenticazione in `SQLAuthentication.cs`.
* Spostato il parsing degli argomenti da `Program.cs` a `ArgumentLogic.cs`.
* Rimossa la directory `authentication`.
* Modificato lo stile del codice per seguire meglio la [guida allo stile di codice C#/.NET di Microsoft](https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/coding-conventions).
* Modificato `Help.cs` da un metodo a un costruttore.
* Modificato `CaptureHash.cs` da un metodo a un costruttore.
* Modificato `Impersonate.cs` da un metodo a un costruttore.
* Eseguito il refactoring completo della base di codice.
</details>
<details>
<summary>v2.3</summary>
* Aggiunta la funzionalità SCCM.
* Aggiunti i moduli SCCM, che possono essere eseguiti utilizzando il comando `sccm`.
* Corretto il controllo dello stato RPC sui server SQL collegati.
* Aggiunta la capacità di scaricare assembly .NET tramite HTTP/S.
</details>
<details>
<summary>v2.2</summary>
* Ampliati i ruoli interrogati nei moduli `roles`, `iRoles` e `lRoles`.
* Creati i moduli `users`, `iUsers` e `lUsers`.
* Corretto il problema per cui l'hash non veniva rimosso da `sp_drop_trusted_assembly` nei moduli `clr` e `iClr`.
* Creato il modulo `lAgentCmd`.
* Creato il modulo `lClr`.
</details>
<details>
<summary>v2.1.6</summary>
* Aggiunto il modulo `info`.
* Correzioni nel menu di aiuto.
* Risolti i problemi con gli argomenti obbligatori con l'autenticazione `Local` e `Azure`.
</details>
<details>
<summary>v2.1.5</summary>
* Aggiunto il modulo per enumerare gli SPN del dominio (`-e domain`).
</details>
<details>
<summary>v2.1.4</summary>
* Corretto un problema minore di formattazione delle stringhe.
</details>
<details>
<summary>v2.1.3</summary>
* Aggiunto il flag `-r` nelle modalità di autenticazione `Windows` e `Local` per consentire l'uso di porte TCP non standard.
</details>
<details>
<summary>v2.1.2</summary>
* Migliorata la logica relativa alle stringhe di connessione nulle.
</details>
<details>
<summary>v2.1.1</summary>
* Rimosso `Environment.Exit` da `TestAuthentication.cs`.
</details>
<details>
<summary>v2.1</summary>
* Creato `AgentJobs.cs`.
* Creato `agentStatus`.
* Creato `iAgentStatus`.
* Creato `lAgentStatus`.
* Creato `agentCmd`.
* Creato `iAgentCmd`.
</details>
<details>
<summary>v2.0</summary>
* Creato `clr`.
* Creato `iEnableClr`.
* Creato `iDisbleClr`.
* Creato `iClr`.
* Creato `iWhoami`.
* Creato `iMapped`.
* Creato `iRoles`.
* Creato `lEnableRpc`.
* Creato `lDisableRpc`.
* Creato `lWhoai`.
* Creato `lEnableXp`.
* Creato `lDisableXp`.
* Creato `lEnableOle`.
* Creato `lDisableOle`.
* Creato `lEnableClr`.
* Creato `lDisableClr`.
* Creato `lXpCmd`.
* Creato `lXpOle`.
* Creato `Random.cs`.
* Creato `EnableDisable.cs`.
* Implementati nomi di assembly generati casualmente per `clr`.
* Implementati nomi di variabili e metodi generati casualmente per `ole`.
* Integrati i moduli `mapped` e `roles` in `whoami`.
* Integrati i moduli `lMapped` e `lRoles` in `lWhoami`.
* Integrati i moduli `iMapped` e `iRoles` in `iWhoami`.
* Eseguito il refactoring completo della base di codice.
</details>
<details>
<summary>v1.2</summary>
* Creato il modulo `lSmb`.
* Creato il modulo `lWhoami`.
* Creato il modulo `lRoles`.
</details>
<details>
<summary>v1.1</summary>
* Corretto il modulo `oldCmd`.
* Corretto il modulo `iOleCmd`.
* Corretto il modulo `lDatabases`.
* Corretto il modulo `lTables`.
* Pulita la base di codice.
* Corrette le incongruenze nel menu di aiuto.
</details>