
CVE-2021-26855 の PoC エクスプロイトコード。
元のコードは https://github.com/GreyOrder によって開発されました。
CVE-2021-26855 SSRF の Go 言語によるシンプルな使用例 影響を受けるバージョン
Exchange Server 2013 CU23 未満
Exchange Server 2016 CU18 未満
Exchange Server 2019 CU7 未満
使用条件
この脆弱性は、これまでの Exchange の脆弱性とは異なります。この脆弱性は、ログイン可能なユーザー ID を必要としません。認証なしで内部ユーザーのリソースを取得できます。CVE-2021-27065 と組み合わせて使用すると、リモートコード実行を実現できます。
脆弱性トリガーの要件
対象サーバーに脆弱性が存在すること
対象の Exchange サーバーがロードバランシングサーバーであること。つまり、2 台以上のサーバーが同時に使用されていること
対象のメールアドレス。アドレスは単なるメールアドレスではなく、ドメイン内のメールアドレスである必要があることに注意してください。この 2 つには違いがあります。テストの結果、特別な場合を除き、正しいメールアドレスであれば問題ないことが分かりました。
攻撃者は内部 Exchange サーバーの完全修飾ドメイン名 (FQDN) も特定する必要があります。実際には、ホスト名はドメイン内で解決できるため、サーバーのホスト名だけで十分です。
上記 4 つの項目のうち、FQDN は ntlm type2 メッセージで取得できます。メールアドレスは直接列挙できます。FQDN について補足すると、私は ntlm type2 でシステム情報を取得しているだけなので、ツールがデフォルトで取得する FQDN は現在アクセスしているマシンのものです。そのため、この脆弱性を直接トリガーすることはできません。FQDN 名に基づいて手動で判断し、-n オプションで他の Exchange サーバーのホスト名を指定する必要があります。 使用方法
この脆弱性を悪用するには、Ruby や Python などのスクリプト言語を使用する方が便利です。このツールは golang を学習するために golang で書かれているため、この小さなツールは半完成品と見なすことができ、時間があるときに更新されます。
このツールは現在、以下の機能をサポートしています:
脆弱性の検出 (単にヒットするかどうかを確認するだけで、検出には使用できません)
ユーザー列挙
メール ID と件名の簡易読み取り
メールのダウンロード (アップグレードされ、標準の eml ファイルになりました)
ユーザーが保存した連絡先の読み取り (グローバルではなく、対象ユーザーが保存した連絡先のみであることに注意)
フォルダを指定できますが、任意ではありません。詳細は https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/distinguishedfolderid を参照してください。
その他の用途については、XML コンテンツを自分で変更してください。
使い方:
go run CVE-2021-26855-PoC.go -h
-h string required, target address or domain name
-U string Optional, need to enumerate user list
-d optional, download mail
-l Optional, list the mailing list
-n string is optional, you need to specify FQND to fill in
-t string Optional, request delay time (default "1")
-u string Optional, specify the target (default "administrator")
-c is optional, read the contacts saved by the current user, not all
-f string Optional, specify the folder to view (default "inbox")