文章总结: 本文详细分析了微软Windows事件日志服务(MS-EVENRPC协议)中的高危远程代码执行漏洞CVE-2025-29969。研究人员发现,攻击者仅凭低权限凭证即可绕过默认共享限制,在Windows11和WindowsServer2025系统上远程写入任意文件,并演示了通过写入启动脚本或DLL劫持实现代码执行。该漏洞在域环境中尤其危险,低权限用户可向域控制器等关键位置写入文件。微软已于2025年5月发布补丁修复该漏洞。 综合评分: 92 文章分类: 漏洞分析,渗透测试,内网渗透,红队,应急响应
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 写了个脚本执行以下操作:
- 用低权限凭证连接远程机器。
- 用 ElfrOpenBELW 打开一个我们控制的共享上的有效文件。
- 立刻把共享上这个文件的内容改成我们想要的任意内容。
- 调用备份函数。
运行脚本……搞定!我们用低权限用户,成功把任意文件复制到了远程机器的一个位置!
最终攻击演示
根据之前的思路,我们验证了两种代码执行的方法:
- 写一个批处理文件到用户的启动目录。远程机器在下一次用户登录时会执行它!
- 写一个 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倍
超清 流畅
继续观看
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倍
超清 流畅
继续观看
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倍
超清 流畅
继续观看
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)》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。












评论