Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
o365enum — Office 365 से ActiveSync, Autodiscover v1, या office.com लॉगिन पृष्ठ का उपयोग करके मान्य उपयोगकर्तानामों की गणना करें। | Kitploit
उपकरण/GitHubGitHub/gremwell/o365enum
OSINT (खुला स्रोत खुफिया)टोहीजानकारी एकत्र करनावेब सुरक्षा
GitHubgremwell/o365enum

o365enum

Office 365 से ActiveSync, Autodiscover v1, या office.com लॉगिन पृष्ठ का उपयोग करके मान्य उपयोगकर्तानामों की गणना करें।

रिपॉजिटरी देखें
301432 साल पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें
वेबसाइट

Office 365 उपयोगकर्ता गणना

ActiveSync, Autodiscover, या office.com लॉगिन पृष्ठ का उपयोग करके Office 365 से मान्य उपयोगकर्ता नामों की गणना करें।

उपयोग

o365enum पहले पैरामीटर के रूप में प्रदान की गई फ़ाइल से उपयोगकर्ता नाम पढ़ेगा। फ़ाइल में प्रति पंक्ति एक उपयोगकर्ता नाम होना चाहिए। आसान पार्सिंग के लिए आउटपुट CSV-आधारित है। मान्य स्थिति 0 (अमान्य उपयोगकर्ता), 1 (मान्य उपयोगकर्ता), 2 (मान्य उपयोगकर्ता और मान्य पासवर्ड) हो सकती है।

root@kitploit:~
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)

उदाहरण रन:

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

गणना विधियाँ

ActiveSync गणना

यह विधि grimhacker की विधि पर आधारित है जो ActiveSync एंडपॉइंट पर बेसिक HTTP प्रमाणीकरण अनुरोध भेजती है। हालाँकि, स्टेटस कोड की जाँच करना अब काम नहीं करता क्योंकि Office365 उपयोगकर्ता के अस्तित्व में होने या न होने पर भी 401 लौटाता है।

इसके बजाय, हम वही अनुरोध भेजते हैं लेकिन यह पहचानने के लिए कि उपयोगकर्ता नाम मान्य है या नहीं, एक कस्टम HTTP प्रतिक्रिया हेडर (X-MailboxGuid) की उपस्थिति की जाँच करते हैं।

मौजूदा खाता

नीचे दिए गए अनुरोध में Authorization हेडर में निम्नलिखित Base64 एन्कोडेड क्रेडेंशियल्स शामिल हैं: [email protected]:Password1

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

यह निम्नलिखित प्रतिक्रिया ("401 अनधिकृत") को X-MailboxGuid हेडर के साथ उत्पन्न करता है, जो दर्शाता है कि उपयोगकर्ता नाम मान्य है लेकिन पासवर्ड नहीं है:

root@kitploit:~
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 <--- यह हेडर खाते की स्थिति (मौजूदा) को लीक करता है
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--

अमान्य खाता

नीचे दिए गए अनुरोध में Authorization हेडर में निम्नलिखित Base64 एन्कोडेड क्रेडेंशियल्स शामिल हैं: [email protected]:Password1

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

यह निम्नलिखित प्रतिक्रिया ("401 अनधिकृत" लेकिन इस बार X-MailboxGuid हेडर के बिना) उत्पन्न करता है, जो दर्शाता है कि उपयोगकर्ता नाम अमान्य है।

root@kitploit:~
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 गणना

Autodiscover एंडपॉइंट बिना प्रमाणीकरण प्रयास के उपयोगकर्ता गणना की अनुमति देता है। एंडपॉइंट 200 स्टेटस कोड लौटाता है यदि उपयोगकर्ता मौजूद है और 302 लौटाता है यदि उपयोगकर्ता मौजूद नहीं है (जब तक कि पुनर्निर्देशन ऑन-प्रिमाइसेस Exchange सर्वर पर न किया गया हो)।

मौजूदा उपयोगकर्ता

root@kitploit:~
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
root@kitploit:~
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"}

अमान्य उपयोगकर्ता

root@kitploit:~
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
root@kitploit:~
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 गणना

चेतावनी: यह विधि केवल उन संगठनों के लिए काम करती है जो Exchange Online के सब्सक्राइबर हैं और जिनके पास Exchange सर्वर का ऑन-प्रिमाइसेस या हाइब्रिड डिप्लॉयमेंट नहीं है।

उन कंपनियों के लिए जो ऑन प्रिमाइसेस Exchange सर्वर या कुछ हाइब्रिड डिप्लॉयमेंट का उपयोग करती हैं और कुछ कॉन्फ़िगरेशन के आधार पर जिसे मैंने अभी तक पहचाना नहीं है, सर्वर किसी भी उपयोगकर्ता नाम मान के लिए उपयोगकर्ता नाम मौजूद है यह दर्शाने वाला मान लौटा सकता है।

यह विधि तब उपयोगी होती है जब आप 'Password1' के साथ प्रमाणीकरण प्रयास नहीं करना चाहते :)

यह निर्धारित करना कि उपयोगकर्ता मौजूद है या नहीं

IfExistsResult प्रॉपर्टी का उपयोग यह बताने के लिए किया जाता है कि कोई खाता कैसे और क्या मौजूद है। जैसा कि इस RSM ब्लॉग लेख में चर्चा की गई है, मान इस प्रकार हैं:

मौजूदा उपयोगकर्ता

जब खाता मौजूद होता है, IfExistsResult ऊपर उल्लिखित पूर्णांकों में से एक पर सेट होता है, आमतौर पर 1।

root@kitploit:~
POST /common/GetCredentialType?mkt=en-US HTTP/1.1
Host: login.microsoftonline.com
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
Accept: application/json
Connection: close
client-request-id: 4345a7b9-9a63-4910-a426-35363201d503
hpgrequestid: 23975ac9-f51c-443a-8318-db006fd83100
Referer: https://login.microsoftonline.com/common/oauth2/authorize
canary: --snip--
hpgact: 1800
hpgid: 1104
Origin: https://login.microsoftonline.com
Cookie: --snip--
Content-Length: 1255
Content-Type: application/json

{
    "checkPhones": false,
    "isOtherIdpSupported": true,
    "isRemoteNGCSupported": true,
    "federationFlags": 0,
    "isCookieBannerShown": false,
    "isRemoteConnectSupported": false,
    "isSignup": false,
    "originalRequest": "rQIIA--snip--YWSO2",
    "isAccessPassSupported": true,
    "isFidoSupported": false,
    "isExternalFederationDisallowed": false,
    "username": "[email protected]",
    "forceotclogin": false
}
root@kitploit:~
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
client-request-id: 177110da-7ce4-4880-b856-be6326078046
x-ms-request-id: c708b83f-4167-4b4c-a1db-d2011ecb3200
x-ms-ests-server: 2.1.9966.8 - AMS2 ProdSlices
Referrer-Policy: strict-origin-when-cross-origin
P3P: CP="DSP CUR OTPi IND OTRi ONL FIN"
Set-Cookie: fpc=ArU-Dva0f59Eg4t_V3VsX_TsYIXWAQAAAFRGxtUOAAAA; expires=Sun, 01-Mar-2020 16:01:26 GMT; path=/; secure; HttpOnly; SameSite=None
Set-Cookie: x-ms-gateway-slice=prod; path=/; SameSite=None; secure; HttpOnly
Set-Cookie: stsservicecookie=ests; path=/; secure; HttpOnly; SameSite=None
Date: Fri, 31 Jan 2020 16:01:26 GMT
Connection: close
Content-Length: 587

{
    "Username":"[email protected]",
    "Display":"[email protected]",
    "IfExistsResult":0,
    "ThrottleStatus":0,
    "Credentials":{
        "PrefCredential":1,
        "HasPassword":true,
        "RemoteNgcParams":null,
        "FidoParams":null,
        "SasParams":null
    },
    "EstsProperties":{
        "UserTenantBranding":null,
        "DomainType":3
    },
    "IsSignupDisallowed":true,
    "apiCanary":"--snip--"
}
अमान्य उपयोगकर्ता

जब खाता मौजूद नहीं होता है, IfExistsResult को 1 पर सेट किया जाता है।

root@kitploit:~
POST /common/GetCredentialType?mkt=en-US HTTP/1.1
Host: login.microsoftonline.com
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
Accept: application/json
Connection: close
client-request-id: 4345a7b9-9a63-4910-a426-35363201d503
hpgrequestid: 23975ac9-f51c-443a-8318-db006fd83100
Referer: https://login.microsoftonline.com/common/oauth2/authorize
canary: --snip--
hpgact: 1800
hpgid: 1104
Origin: https://login.microsoftonline.com
Cookie: --snip--
Content-Length: 1255
Content-Type: application/json

{
    "checkPhones": false,
    "isOtherIdpSupported": true,
    "isRemoteNGCSupported": true,
    "federationFlags": 0,
    "isCookieBannerShown": false,
    "isRemoteConnectSupported": false,
    "isSignup": false,
    "originalRequest": "rQIIA--snip--YWSO2",
    "isAccessPassSupported": true,
    "isFidoSupported": false,
    "isExternalFederationDisallowed": false,
    "username": "[email protected]",
    "forceotclogin": false
}
root@kitploit:~
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
client-request-id: 95bba645-c3b0-4566-b0f4-237bd3df2ca7
x-ms-request-id: fea01b74-7a60-4142-a54d-7aa8f6471c00
x-ms-ests-server: 2.1.9987.14 - WEULR2 ProdSlices
Referrer-Policy: strict-origin-when-cross-origin
P3P: CP="DSP CUR OTPi IND OTRi ONL FIN"
Set-Cookie: fpc=Ai0TKYuyz3BCp7OL29pUnG7sYIXWAQAAABsDztUOAAAA; expires=Sat, 07-Mar-2020 12:57:44 GMT; path=/; secure; HttpOnly; SameSite=None
Set-Cookie: x-ms-gateway-slice=estsfd; path=/; SameSite=None; secure; HttpOnly
Set-Cookie: stsservicecookie=ests; path=/; secure; HttpOnly; SameSite=None
Date: Thu, 06 Feb 2020 12:57:43 GMT
Connection: close
Content-Length: 579


{
    "ThrottleStatus": 0,
    "apiCanary": "--snip--",
    "Username": "[email protected]",
    "IfExistsResult": 1,
    "EstsProperties": {
        "UserTenantBranding": null,
        "DomainType": 3
    },
    "Credentials": {
        "PrefCredential": 1,
        "FidoParams": null,
        "RemoteNgcParams": null,
        "SasParams": null,
        "HasPassword": true
    },
    "IsSignupDisallowed": true,
    "Display": "[email protected]"
}

योगदानकर्ता

  • @jenic - तर्क पार्सिंग और गलत नकारात्मक में कमी।
  • @Mike-Crowley - IfExistsResult विवरण सुधार।
टूल डाउनलोड करें
आइटममूल्य
-1कोई अज्ञात त्रुटि
0खाता मौजूद है, और प्रमाणीकरण के लिए उस डोमेन का उपयोग करता है
1खाता मौजूद नहीं है
2प्रतिक्रिया थ्रॉटल की जा रही है
4कोई सर्वर त्रुटि
5खाता मौजूद है, लेकिन किसी भिन्न पहचान प्रदाता के साथ प्रमाणीकरण करने के लिए सेट है। यह संकेत दे सकता है कि खाते का उपयोग केवल व्यक्तिगत खाते के रूप में किया जाता है
6खाता मौजूद है, और डोमेन और किसी भिन्न पहचान प्रदाता दोनों का उपयोग करने के लिए सेट है