
このスクリプトは、Office365においてメールアドレスが有効かどうかを確認する(ユーザー/メールの列挙)ものです。ログイン試行は一切行わず、スロットル制限もなく、ソーシャルエンジニアリング評価においてどのメールが存在し、どのメールが存在しないかを調べるのに非常に役立ちます。
Office365でメールアドレスが有効かどうかを確認できるスクリプトです。ログイン試行は一切行わず、レート制限もなく、ソーシャルエンジニアリング評価において、どのメールが存在し、どのメールが存在しないかを調べるのに非常に役立ちます。
Microsoftは「メール列挙」を脆弱性とは見なしていないため、これは「機能」を利用したものです。他にもいくつか公開されているOffice365メール検証スクリプトがありますが、(私が見た限りでは)すべて少なくとも1回のログイン試行をユーザーアカウントごとに必要とします。それは検出可能であり、軽いブルートフォース試行(複数のアカウントに対して1つの「よくある」パスワード)として見つかってしまいます。
このスクリプトはログイン試行をゼロでメールの検証が可能で、Microsoftの組み込みAutodiscover APIのみを使用するため、メールアドレスの所有者である個人や企業からは見えません。さらに、このAPI呼び出しは完全にレート制限がないようで、テストでは1分以内に2,000以上のメールアドレスを検証できました。
スクリプトは非常に基本的で簡単に使えます。有効かどうかを確認したいメールアドレスのファイルを作成し、それをスクリプトの引数として渡します。または、ユーザー名のみのファイルを用意し、-s 引数を指定すると、各エントリに自動的にサフィックスを追加できます。
Usage: UhOh365.py [-h] [-v] [-t THREADS] [-o OUTPUT] file
positional arguments:
file Input file containing one email per line
optional arguments:
-h, --help show this help message and exit
-v, --verbose Display each result as valid/invalid. By default only displays valid
-s, --suffix Add a domain suffix to every input line from file (e.g: contoso.com)
-t THREADS, --threads THREADS
Number of threads to run with. Default is 20
-o OUTPUT, --output OUTPUT
Output file for valid emails only
-n, --nossl Turn off SSL verification. This can increase speed if
needed
-p PROXY, --proxy PROXY
Specify a proxy to run this through (eg: 'http://127.0.0.1:8080')
これは実際には非常に簡単なことです。/autodiscover/autodiscover.json/v1.0/{EMAIL}?Protocol=Autodiscoverv1 APIエンドポイントは、メールがo365に存在するかどうかで異なるステータスコードを返すことがわかっています。200ステータスコードは存在することを意味し、302は存在しないことを意味します。
メールが存在する場合:

メールが存在しない場合:

このリクエストは認証や識別パラメータを一切必要とせず、ターゲットアカウントへのログイン試行を引き起こさないことに注意してください。
Chris King
@raikiasec