
Ein Skript, das prüfen kann, ob eine E-Mail-Adresse in Office365 gültig ist (Benutzer-/E-Mail-Aufzählung). Es führt keine Login-Versuche durch, ist ungedrosselt und extrem nützlich für Social-Engineering-Assessments, um herauszufinden, welche E-Mails existieren und welche nicht.
Ein Skript, das überprüfen kann, ob eine E-Mail-Adresse in Office365 gültig ist. Es führt keine Anmeldeversuche durch, ist nicht gedrosselt und äußerst nützlich für Social-Engineering-Bewertungen, um herauszufinden, welche E-Mails existieren und welche nicht.
Microsoft betrachtet "E-Mail-Enumeration" nicht als Sicherheitslücke, daher wird hier eine "Funktion" ausgenutzt. Es gibt einige andere öffentliche Office365-E-Mail-Validierungsskripte, aber alle (die ich gesehen habe) erfordern mindestens einen Anmeldeversuch pro Benutzerkonto. Das ist erkennbar und kann als leichter Brute-Force-Versuch (ein "häufiges" Passwort für mehrere Konten) erkannt werden.
Dieses Skript ermöglicht die E-Mail-Validierung mit null Anmeldeversuchen und verwendet nur die integrierte Autodiscover-API von Microsoft, sodass es für die Person/Firma, die die E-Mail-Adresse besitzt, unsichtbar ist. Darüber hinaus scheint dieser API-Aufruf völlig ungedrosselt zu sein; ich konnte in meinen Tests über 2.000 E-Mail-Adressen innerhalb einer Minute validieren.
Das Skript ist eigentlich sehr einfach und benutzerfreundlich. Sie erstellen eine Datei mit den E-Mails, die Sie auf Gültigkeit prüfen möchten, und übergeben sie als Argument an das Skript. Oder Sie können eine Datei nur mit Benutzernamen bereitstellen und das Argument -s verwenden, um automatisch einen Suffix an jeden Eintrag anzuhängen:
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')
Dies ist eigentlich eine sehr einfache Sache. Es stellt sich heraus, dass der API-Endpunkt /autodiscover/autodiscover.json/v1.0/{EMAIL}?Protocol=Autodiscoverv1 unterschiedliche Statuscodes zurückgibt, je nachdem, ob eine E-Mail in O365 existiert oder nicht. Statuscode 200 bedeutet, dass sie existiert, ein 302 bedeutet, dass sie nicht existiert.
Wenn die E-Mail existiert:

Wenn die E-Mail nicht existiert:

Beachten Sie, dass diese Anfrage keinerlei Authentifizierung oder identifizierende Parameter erfordert und keinen Anmeldeversuch auf dem Zielkonto auslöst.
Chris King
@raikiasec