Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
o365enum — Gültige Benutzernamen aus Office 365 über ActiveSync, Autodiscover v1 oder die office.com-Anmeldeseite enumerieren. | Kitploit
Tools/GitHubGitHub/gremwell/o365enum
OSINT (Open-Source-Intelligence)AufklärungInformationsbeschaffungWebsicherheit
GitHubgremwell/o365enum

o365enum

Gültige Benutzernamen aus Office 365 über ActiveSync, Autodiscover v1 oder die office.com-Anmeldeseite enumerieren.

Repository anzeigen
3014311vor 2 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Webseite

Office 365 Benutzer-Aufzählung

Ermitteln Sie gültige Benutzernamen aus Office 365 mithilfe von ActiveSync, Autodiscover oder der office.com-Anmeldeseite.

Verwendung

o365enum liest Benutzernamen aus der als erster Parameter angegebenen Datei. Die Datei sollte einen Benutzernamen pro Zeile enthalten. Die Ausgabe erfolgt im CSV-Format für eine einfachere Analyse. Gültige Status können 0 (ungültiger Benutzer), 1 (gültiger Benutzer), 2 (gültiger Benutzer und gültiges Passwort) sein.

python3.6 o365enum.py -h
usage: o365enum.py [-h] -u USERLIST [-p PASSWORD] [-n NUM] [-v]
                   [-m {activesync,autodiscover,office.com}]

Office365 User Enumeration Script

optional arguments:
  -h, --help            show this help message and exit
  -u USERLIST, --userlist USERLIST
                        username list one per line (default: None)
  -p PASSWORD, --password PASSWORD
                        password to try (default: Password1)
  -n NUM, --num NUM     # of reattempts to remove false negatives (default: 3)
  -v, --verbose         Enable verbose output at urllib level (default: False)
  -m {activesync,autodiscover,office.com}, --method {activesync,autodiscover,office.com}
                        method to use (default: activesync)

Beispielausführung:

./o365enum.py -u users.txt -p Password2 -n 1 -m activesync
username,valid
[email protected],0
[email protected],1

Aufzählungsmethoden

ActiveSync-Aufzählung

Diese Methode basiert auf grimhackers Methode, die Basic-HTTP-Authentifizierungsanfragen an den ActiveSync-Endpunkt sendet. Allerdings funktioniert die Überprüfung des Statuscodes nicht mehr, da Office365 unabhängig davon, ob der Benutzer existiert oder nicht, einen 401 zurückgibt.

Stattdessen senden wir die gleiche Anfrage, prüfen aber das Vorhandensein eines benutzerdefinierten HTTP-Antwortheaders (X-MailboxGuid), um festzustellen, ob ein Benutzername gültig ist oder nicht.

Vorhandenes Konto

Die folgende Anfrage enthält die folgenden Base64-codierten Anmeldeinformationen im Authorization-Header: [email protected]:Password1

OPTIONS /Microsoft-Server-ActiveSync HTTP/1.1
Host: outlook.office365.com
Connection: close
MS-ASProtocolVersion: 14.0
Content-Length: 0
Authorization: Basic dmFsaWRfdXNlckBjb250b3NvLmNvbTpQYXNzd29yZDE=

Dies führt zu folgender Antwort ("401 Unauthorized") mit gesetztem X-MailboxGuid-Header, was anzeigt, dass der Benutzername gültig ist, das Passwort jedoch nicht:

Date: Fri, 31 Jan 2020 13:02:46 GMT
Connection: close
HTTP/1.1 401 Unauthorized
Content-Length: 1293
Content-Type: text/html
Server: Microsoft-IIS/10.0
request-id: d494a4bc-3867-436a-93ef-737f9e0522eb
X-CalculatedBETarget: AM0PR09MB2882.eurprd09.prod.outlook.com
X-BackEndHttpStatus: 401
X-RUM-Validated: 1
X-MailboxGuid: aadaf467-cd08-4a23-909b-9702eca5b845 <--- Dieser Header gibt den Kontostatus preis (vorhanden)
X-DiagInfo: AM0PR09MB2882
X-BEServer: AM0PR09MB2882
X-Proxy-RoutingCorrectness: 1
X-Proxy-BackendServerStatus: 401
X-Powered-By: ASP.NET
X-FEServer: AM0PR06CA0096
WWW-Authenticate: Basic Realm="",Negotiate
Date: Fri, 31 Jan 2020 13:02:46 GMT
Connection: close

--snip--

Nicht vorhandenes Konto

Die folgende Anfrage enthält die folgenden Base64-codierten Anmeldeinformationen im Authorization-Header: [email protected]:Password1

OPTIONS /Microsoft-Server-ActiveSync HTTP/1.1
Host: outlook.office365.com
Connection: close
MS-ASProtocolVersion: 14.0
Content-Length: 2
Authorization: Basic aW52YWxpZF91c2VyQGNvbnRvc28uY29tOlBhc3N3b3JkMQ==

Dies führt zu folgender Antwort ("401 Unauthorized", diesmal jedoch ohne den X-MailboxGuid-Header, was anzeigt, dass der Benutzername ungültig ist.

HTTP/1.1 401 Unauthorized
Content-Length: 1293
Content-Type: text/html
Server: Microsoft-IIS/10.0
request-id: 2944dbfc-8a1e-4759-a8a2-e4568950601d
X-CalculatedFETarget: DB3PR0102CU001.internal.outlook.com
X-BackEndHttpStatus: 401
WWW-Authenticate: Basic Realm="",Negotiate
X-FEProxyInfo: DB3PR0102CA0017.EURPRD01.PROD.EXCHANGELABS.COM
X-CalculatedBETarget: DB7PR04MB5452.eurprd04.prod.outlook.com
X-BackEndHttpStatus: 401
X-RUM-Validated: 1
X-DiagInfo: DB7PR04MB5452
X-BEServer: DB7PR04MB5452
X-Proxy-RoutingCorrectness: 1
X-Proxy-BackendServerStatus: 401
X-FEServer: DB3PR0102CA0017
X-Powered-By: ASP.NET
X-FEServer: AM0PR04CA0024
Date: Fri, 31 Jan 2020 16:19:11 GMT
Connection: close

--snip--

Autodiscover-Aufzählung

Der Autodiscover-Endpunkt ermöglicht die Benutzeraufzählung ohne Authentifizierungsversuch. Der Endpunkt gibt einen 200-Statuscode zurück, wenn der Benutzer existiert, und einen 302, wenn der Benutzer nicht existiert (sofern die Weiterleitung nicht zu einem lokalen Exchange-Server erfolgt).

Vorhandener Benutzer

GET /autodiscover/autodiscover.json/v1.0/[email protected]?Protocol=Autodiscoverv1 HTTP/1.1
Host: outlook.office365.com
User-Agent: Microsoft Office/16.0 (Windows NT 10.0; Microsoft Outlook 16.0.12026; Pro
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
MS-ASProtocolVersion: 14.0
HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 97
Content-Type: application/json; charset=utf-8
Vary: Accept-Encoding
Server: Microsoft-IIS/10.0
request-id: fee7f899-7115-43da-9d34-d3ee19920a89
X-CalculatedBETarget: AM0PR09MB2882.eurprd09.prod.outlook.com
X-BackEndHttpStatus: 200
X-RUM-Validated: 1
X-AspNet-Version: 4.0.30319
X-DiagInfo: AM0PR09MB2882
X-BEServer: AM0PR09MB2882
X-Proxy-RoutingCorrectness: 1
X-Proxy-BackendServerStatus: 200
X-Powered-By: ASP.NET
X-FEServer: AM0PR0202CA0008
Date: Mon, 02 Mar 2020 12:50:48 GMT
Connection: close

{"Protocol":"Autodiscoverv1","Url":"https://outlook.office365.com/autodiscover/autodiscover.xml"}

Nicht vorhandener Benutzer

GET /autodiscover/autodiscover.json/v1.0/[email protected]?Protocol=Autodiscoverv1 HTTP/1.1
Host: outlook.office365.com
User-Agent: Microsoft Office/16.0 (Windows NT 10.0; Microsoft Outlook 16.0.12026; Pro
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
MS-ASProtocolVersion: 14.0
HTTP/1.1 302 Found
Cache-Control: private
Content-Length: 277
Content-Type: text/html; charset=utf-8
Location: https://outlook.office365.com/autodiscover/autodiscover.json?Email=nonexistent%40contoso.com&Protocol=Autodiscoverv1&RedirectCount=1
Server: Microsoft-IIS/10.0
request-id: 1c50adeb-53ac-41b9-9c34-7045cffbae45
X-CalculatedBETarget: DB6PR0202MB2568.eurprd02.prod.outlook.com
X-BackEndHttpStatus: 302
X-RUM-Validated: 1
X-AspNet-Version: 4.0.30319
X-DiagInfo: DB6PR0202MB2568
X-BEServer: DB6PR0202MB2568
X-Proxy-RoutingCorrectness: 1
X-Proxy-BackendServerStatus: 302
X-Powered-By: ASP.NET
X-FEServer: AM0PR0202CA0013
Date: Mon, 02 Mar 2020 12:50:50 GMT
Connection: close

<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="https://outlook.office365.com/autodiscover/autodiscover.json?Email=nonexistent%40contoso.com&amp;Protocol=Autodiscoverv1&amp;RedirectCount=1">here</a>.</h2>
</body></html>

Office.com-Aufzählung

WARNUNG: Diese Methode funktioniert nur für Organisationen, die Exchange Online-Abonnenten sind und keine lokale oder hybride Bereitstellung von Exchange-Servern haben.

Bei Unternehmen, die lokale Exchange-Server oder eine hybride Bereitstellung verwenden, könnte der Server basierend auf einer noch nicht identifizierten Konfiguration für jeden beliebigen Benutzernamen einen Wert zurückgeben, der angibt, dass der Benutzername existiert.

Die Methode ist nützlich, wenn Sie keinen Authentifizierungsversuch mit 'Password1' verschwenden möchten :)

Feststellen, ob ein Benutzer existiert

Die IfExistsResult-Eigenschaft wird verwendet, um zu beschreiben, ob und wie ein Konto existiert. Wie in diesem RSM-Blogartikel erläutert, sind die Werte wie folgt:

Tool herunterladen