EventLog-in:利用微软Windows事件日志服务进行弱凭证横向移动(CVE-2025-29969)

admin 2026-03-03 05:25:01 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细分析了微软Windows事件日志服务(MS-EVENRPC协议)中的高危远程代码执行漏洞CVE-2025-29969。研究人员发现,攻击者仅凭低权限凭证即可绕过默认共享限制,在Windows11和WindowsServer2025系统上远程写入任意文件,并演示了通过写入启动脚本或DLL劫持实现代码执行。该漏洞在域环境中尤其危险,低权限用户可向域控制器等关键位置写入文件。微软已于2025年5月发布补丁修复该漏洞。 综合评分: 92 文章分类: 漏洞分析,渗透测试,内网渗透,红队,应急响应


cover_image

EventLog-in:利用微软Windows事件日志服务进行弱凭证横向移动(CVE-2025-29969)

幻泉之洲

2026年2月26日 09:16 北京

SafeBreach 实验室的研究人员发现了一个存在于 MS-EVEN RPC 协议中的高危远程代码执行漏洞。攻击者利用此漏洞,仅凭低权限凭证,就能绕过默认的共享限制,在 Windows 11 和 Windows Server 2025 系统上远程写入任意文件。本文将复现漏洞的完整发现和利用过程。

主要发现

这事儿有点意思,我们发现光凭一个低权限账户,就能在目标机器上到处写文件。具体来说:

  • 我们发现了一种方法,可以通过 Windows 的 MS-EVEN RPC 服务,用低权限凭证远程写入任意文件。
  • 漏洞出在 MS-EVEN 服务上,这个服务在 Windows 11 和 Windows Server 2025 上默认是开启的。
  • 利用这个问题,攻击者能用低权限凭证绕过默认的 C$ 共享限制来写文件。
  • 攻击在域环境和工作组网络中都有效。在域环境里,这问题可就大了。
  • 根据我们的负责任披露政策,我们在2025年2月向微软报告了这个漏洞。它最后被分配了 CVE-2025-29969[1],并在2025年5月打了补丁。

前置准备与环境

想理解这个漏洞,你得先知道我们是怎么开始的。我们手头就一个低权限账户,目标就是看看能用 Windows 的 RPC 协议干点什么。

首先得看看有哪些 RPC 服务可以远程访问。我们用 RPCView 这个工具来列出机器上所有的 RPC 服务器。每个服务通过一个或多个端点暴露功能,这些端点可以通过 PIPE、TCP 或 ALPC 访问。我们主要关心那些能通过 TCP 和 PIPE 远程访问的。

一个服务可能有多个 RPC 接口,每个接口又包含了多个可以调用的函数。要调用函数,你得先“绑定”到导出的接口上。绑定成功,你就能拿到一个句柄来调用接口导出的函数。

有个细节:一个服务暴露了 TCP 端点,不代表它所有的接口都能远程绑定。接口可以配置成禁止远程连接,不管服务端点什么样。

寻找理想的 RPC 服务

要找到合适的远程 RPC 调用目标,我们设了几个标准:

  • 我们想访问的接口,不能设置“RPC_IF_ALLOW_LOCAL_ONLY”这个标记,否则会阻止远程访问。这个用 RPCView 就能查。
  • 我们需要通过每个接口的“安全回调”函数检查。这个函数负责授权使用接口的用户。
  • 最后,每个函数内部可能还会有一些可选的权限检查,我们也得通过。

简单来说,理想目标是:端点能远程访问,接口没那个禁远程的标记,安全回调得放行我们,函数本身的额外检查也得搞定。

漏洞发现与利用步骤

翻了一堆服务后,我们盯上了事件日志服务,它在一个命名管道上监听:\PIPE\eventlog。

一开始是想搞点信息收集,日志文件听起来很有料。在 RPCView 里点开这个服务,能看到它下面的接口列表。

我们选了第一个接口,UUID 是 82273fdc-e32a-18c3-3f78-827929dc23ea。这是 MS-EVEN 接口,还有另一个叫 MS-EVEN6。

剩下两个条件,安全回调和函数检查,可以边试边看。我们用 Impacket 试着去绑定接口。有个关键点:绑定接口时,得知道服务期望的认证等级,不然就算有凭据也可能被拒绝。

第一步:发现隐藏的文件操作

我们先去微软的官方文档[2]看了看 MS-EVEN 协议。有两个函数很有趣:ElfrOpenBELW 和 ElfrBackupELFW,因为它们需要用户提供一个文件路径作为参数。我们决定先搞 ElfrOpenBELW。

这个函数的签名如图:

参数看着多,但其实很多都是可选的。我们用 Impacket 写了个小脚本和这个服务交互。这个协议 Impacket 已经实现了,省了我们自己构造 NDR 结构的事。

我们传了一个远程机器上存在的 EVTX 日志文件路径过去,结果返回了一个 STATUS_ACCESS_DENIED 错误。

接着,我们试了试非 EVTX 文件,这次得到一个 STATUS_EVENTLOG_FILE_CORRUPT(0xc000018e)的错误。

这里有个重大发现:如果文件损坏,那也意味着文件是存在的!这意味着这个服务竟然允许我们检查 C$ 共享下文件和目录是否存在。这可不是一个低权限用户该有的能力。

我们赶紧验证:试着“打开”一个不存在的文件和一个目录,分别拿到了 STATUS_OBJECT_NAME_NOT_FOUND(0xc0000034)和 STATUS_FILE_IS_A_DIRECTORY(0xc00000ba)的错误码。

好了,第一个问题出现了:一个隐蔽的文件创建检查(CreateFile)原语。我们可以用低权限账户探测远程机器的文件系统了,比如看看装了哪些程序,有哪些用户曾经登录。

文件操作是由事件日志服务进程(svchost.exe,以 LOCAL_SERVICE 账户运行)代劳的。但是,因为服务会模拟调用者的身份,所以就算能触发认证,也是匿名认证,派不上用场。

第二步:绕开权限限制

我们拿到了文件存在性探测能力,但没拿到有效句柄,因为访问不了远程的 EVTX 文件。而要用 ElfrBackupELFW 这类函数,我们得有个有效句柄。

换个思路:如果能让远程机器去打开一个网络共享上的文件,而不是本地文件,那我们就可以控制这个共享文件的权限,让它符合我们的低权限,这样就不会报“拒绝访问”了。

我们搭建了一个环境:目标机器有 MS-EVEN 接口,攻击机用低权限用户,再加上第三台跑着 Impacket SMB 服务器的 Linux 机器。

这个 SMB 共享权限很宽松,匿名用户都能访问。我们在共享里放了一个无害的 EVTX 文件,然后用 ElfrOpenBELW 去打开它……成功了!我们拿到了有效句柄。

第三步:利用备份函数写入文件

ElfrBackupELFW 这个函数接受一个文件句柄和一个路径。它的签名是这样:

第一个参数是之前打开的文件句柄,第二个参数是备份文件的保存路径,由调用者指定。

我们接着试,备份那个有效的 EVTX 文件。我们把第二个参数设成一个我们有写权限的远程路径……又成功了!

我们实际上把 Kali 机器上共享里的一个文件,“备份”到了远程机器的一个位置。这意思就是,我们可以把我们 SMB 共享里的文件,通过“备份”的方式写入远程机器上低权限用户能写的地方!

我们开始折腾共享里的那个 EVTX 文件,发现只要文件头是正确的,我们基本上可以在文件里写任何数据然后复制过去。这是个重大突破,我们有了一个不完整的远程写入原语,绕过了默认的 C$ 限制。

但这还不够,我们真想干的是执行代码。我们只能写文件,而且文件必须有个有效的 EVTX 头,不能随心所欲。

第四步:达成任文件意写入和代码执行

我们想,能任意写文件了,怎么能自动执行代码呢?几个常规思路:

  • 劫持一个定时自动运行程序的 DLL。
  • 写启动脚本。
  • 写到用户的启动文件夹(%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup)。
  • 如果是 Web 服务器,可以写个 webshell。

我们选了第三个,用户的启动文件夹,因为它用我们当前的权限肯定能写,最适合做概念验证。

但问题来了,文件必须有 EVTX 头,而这个头里全是乱码和空字节(null-byte)。我们试了用批处理文件(.bat),因为批处理是逐行解释的,无效行会被忽略。但空字节会截断文件读取,导致批处理执行失败。

我们开始研究备份过程本身。我们猜测流程是:用 ElfrOpenBELW 打开文件句柄,做个有效性检查,然后调用 ElfrBackupELFW 备份,把文件内容写到我们指定的路径。

等等,我们犯傻了!我们用的不是本地文件,是 Kali 机器上的远程共享文件啊!所以我们可以随便修改这个文件!如果有效性检查只做一次……那我们是不是能搞个“检查时”到“使用时”的竞争条件漏洞?

我们推测逻辑是这样的:

  • 用 ElfrOpenBELW 函数时,CreateFile 打开句柄。
  • 第一次 ReadFile 读文件头并检查。
  • 调用 ElfrBackupELFW 后,第二次 ReadFile 读取整个文件内容。

如果第二次 ReadFile 不检查文件头,我们就有可能实现任意写入。

我们打开 Process Monitor 来验证。

看!果然有一个 CreateFile,然后是第一次 ReadFile,正好从偏移0读取128字节(这就是文件头)。备份操作之后,又有第二次 ReadFile,同样从偏移0开始,但这次读取的是整个文件的长度!这说明检查很可能只在第一次读的时候进行,备份时不检查!

理论上,如果我们能在打开文件后,备份操作前,把文件内容给换了,我们就能通过有效性检查并把任意文件写过去。

我们用 Impacket 写了个脚本执行以下操作:

  1. 用低权限凭证连接远程机器。
  2. 用 ElfrOpenBELW 打开一个我们控制的共享上的有效文件。
  3. 立刻把共享上这个文件的内容改成我们想要的任意内容。
  4. 调用备份函数。

运行脚本……搞定!我们用低权限用户,成功把任意文件复制到了远程机器的一个位置!

最终攻击演示

根据之前的思路,我们验证了两种代码执行的方法:

  1. 写一个批处理文件到用户的启动目录。远程机器在下一次用户登录时会执行它!
  2. 写一个 DLL 到用户可写的、存在 DLL 缺失的路径。

第一种方法的演示是写一个打开计算器(calc.exe)的批处理脚本到启动文件夹。Demo 1[3]

已关注

关注

重播 分享 赞

关闭

观看更多

更多

退出全屏

切换到竖屏全屏退出全屏

幻泉之洲已关注

分享视频

,时长01:04

0/0

00:00/01:04

切换到横屏模式

继续播放

[ ]

进度条,百分之0

播放

00:00

/

01:04

01:04

倍速

全屏

倍速播放中

0.5倍 0.75倍 1.0倍 1.5倍 2.0倍

超清 流畅

 您的浏览器不支持 video 标签

继续观看

EventLog-in:利用微软Windows事件日志服务进行弱凭证横向移动(CVE-2025-29969)

观看更多

转载

,

EventLog-in:利用微软Windows事件日志服务进行弱凭证横向移动(CVE-2025-29969)

幻泉之洲已关注

分享点赞在看

已同步到看一看写下你的评论

视频详情

第二种方法涉及 DLL 劫持。我们用 HijackLibs[4] 找了个好目标,发现 OneDrive 在用户配置里有个低权限用户能写的路径。把恶意 DLL 写进去,下次 OneDrive 启动时就会加载我们的代码。

容易被忽略的域环境大问题

在普通的 Windows 机器上,低权限用户能写的地方就那么几个。但在域环境里,有个被忽略的严重问题。

“Users” 这个组包含了域里所有用户。如果你有一个低权限用户(不管是自己的还是偷来的),你就有权限写到域里任何一台机器上许多对攻击有好处的路径。这事儿就大了!

有了利用自身权限的远程文件写入能力,你可以写文件到域里任何一台存在包含“Users”组的目录的机器上。这意味着,作为一个低权限用户,如果域控制器上存在这样一个目录,你单凭自己的凭证就能往域控制器里写文件!这打开了大量新的攻击途径,远不止代码执行。

下面的演示展示了用低权限用户写入域控制器 ProgramData 文件夹的能力。Demo 2[5]

已关注

关注

重播 分享 赞

关闭

观看更多

更多

退出全屏

切换到竖屏全屏退出全屏

幻泉之洲已关注

分享视频

,时长00:54

0/0

00:00/00:54

切换到横屏模式

继续播放

[ ]

进度条,百分之0

播放

00:00

/

00:54

00:54

倍速

全屏

倍速播放中

0.5倍 0.75倍 1.0倍 1.5倍 2.0倍

超清 流畅

 您的浏览器不支持 video 标签

继续观看

EventLog-in:利用微软Windows事件日志服务进行弱凭证横向移动(CVE-2025-29969)

观看更多

转载

,

EventLog-in:利用微软Windows事件日志服务进行弱凭证横向移动(CVE-2025-29969)

幻泉之洲已关注

分享点赞在看

已同步到看一看写下你的评论

视频详情

还记得我们最开始发现的信息收集能力吗?Program Files 目录也是对 Users 组开放的。所以,我们本质上可以用低权限凭证,去列出域里任何一台机器上安装的程序。

下面的演示展示了用低权限用户和漏洞的一部分功能,在不清楚远程计算机(这里是域控制器)密码的情况下,检查其是否安装了 Wireshark。Demo 3[6]

已关注

关注

重播 分享 赞

关闭

观看更多

更多

退出全屏

切换到竖屏全屏退出全屏

幻泉之洲已关注

分享视频

,时长00:34

0/0

00:00/00:34

切换到横屏模式

继续播放

[ ]

进度条,百分之0

播放

00:00

/

00:34

00:34

倍速

全屏

倍速播放中

0.5倍 0.75倍 1.0倍 1.5倍 2.0倍

超清 流畅

 您的浏览器不支持 video 标签

继续观看

EventLog-in:利用微软Windows事件日志服务进行弱凭证横向移动(CVE-2025-29969)

观看更多

转载

,

EventLog-in:利用微软Windows事件日志服务进行弱凭证横向移动(CVE-2025-29969)

幻泉之洲已关注

分享点赞在看

已同步到看一看写下你的评论

视频详情

这套打法开启了一种在域网络里横向移动和信息收集的新方式。那个 TOCTOU 漏洞在2025年5月已经打了补丁,但文件存在性探测这种信息收集能力依然存在,微软也没打算修复。

总结

总结一下这次折腾的过程:

我们一开始只是想看看低权限用户能用 RPC 协议干啥。结果一路挖下去,找到了 Windows MS-EVEN 协议里的远程代码执行漏洞(CVE-2025-29969)。利用这个漏洞,光凭低权限账户就能远程写入任意文件,绕过了 C$ 共享的限制。因为这个服务在 Win11 和 Server 2025 上默认就开着,影响面很广。

我们做的几件事:

  • 2025年2月,按规矩把研究结果报给了微软。
  • 把研究公开在社区,让大家了解风险。
  • 在 GitHub 上开源了研究仓库和 PoC 利用脚本:GitHub 仓库[7],演示了漏洞的信息收集和任意文件写入能力。

参考资料

[1] https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-29969

[2] https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-even/0d0bee9c-dac5-46d9-b19b-2087826c02db

[3] https://youtu.be/D4tLyCS3qOo

[4] https://hijacklibs.net/

[5] https://youtu.be/PBmBCwg7Gm8

[6] https://youtu.be/Rz5Jo2EA3GI

[7] https://github.com/SafeBreach-Labs/EventLogin-CVE-2025-29969

[8] https://www.safebreach.com/blog/safebreach_labs_discovers_cve-2025-29969/


免责声明:

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

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

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

本文转载自:幻泉之洲 《EventLog-in:利用微软Windows事件日志服务进行弱凭证横向移动(CVE-2025-29969)》

评论:0   参与:  0