论坛首页 漏洞分析研究区 阅读主题

[原创] ***RCE分析记录

222 浏览 11 回复
#1 楼主 2026-06-01 21:09:06
某日,在看雪论坛看到一篇关于**的RCE漏洞,很感兴趣,然后收集了相关资料,虽然各个平台写的都非常详细,也都包含了Poc运行版本之类的,但是总归想要自己研究透彻一点,于是开搞。我找到参考的资料如下这两篇文章当中非常详细且专业的讲解了漏洞的原理。站在巨人肩膀上,自己再做一个总结,班门弄斧,简单来说,这是一个本地服务未授权访问导致的命令注入漏洞,最终通过“白利用”(利用系统自带合法的 regsvr32 和 scrobj.dll)实现了远程代码执行。首先,下载对应的版本7.59.5.104,然后正常启动。安装后,会启动一个名为 YunDetectService.exe 的服务,默认监听本地 TCP 10000 端口 。该服务通过 HTTP/HTTPS 协议接收请求,且无需身份认证 。在处理 OpenSafeBox 接口时,程序会接收 uk 参数 。YunDetectService.exe 接收到 uk 参数后,会将其作为 -userkey 的值,通过字符串拼接的方式直接传递给主程序 BaiduNetdisk.exe 。没有对 uk 参数进行任何安全检测或过滤,导致攻击者可以注入额外的命令行参数 。攻击者通过精心构造 uk 参数,实际上构建了一条复杂的攻击链,流程如下:1.注入 BaiduNetdisk.exe 的功能参数攻击者不仅仅传入 userkey,还注入了 -install regdll 参数 。这个参数原本是用来注册百度网盘自己的 DLL 文件(YunShellExt.dll)的 。路径穿越与 DLL 劫持正常的注册流程会拼接 DLL 路径。攻击者利用路径穿越符 ..\ 将目标 DLL 路径指向了系统自带的 C:\windows\system32\scrobj.dll 。注意这里有一个限制条件:构造路径穿越时,必须包含 \Users\[用户名]\AppData\Roaming\baidu\BaiduNetdisk\,因此攻击者必须知道目标计算机的用户名 。注入 regsvr32.exe 实现远程加载BaiduNetdisk.exe 最终会调用系统工具 regsvr32.exe 来注册上述 DLL。攻击者使用双引号 " 截断了原本的文件路径参数,并注入了 regsvr32 的特有参数 /u /i。最终会让命令变成让 regsvr32 去加载一个远程的 XML 文件(SCT脚本):执行远程脚本 (JScript)系统加载远程的 poc.xml 文件,该文件实际上是一个 Scriptlet 组件。其中包含的 JScript 代码(例如 WScript.Shell 运行 calc.exe)会被系统执行,从而完成 RCE 。理解原理以后,把安装目录当中的YunDetectService.exe拖出来放进ida当中看看。一开始想的是,搜索OpenSafeBox或是uk这两个字符串。但是我直接搜opensafebox没结果

然后找uk这个字符串,好像找到一个相关的,进去查看这个部分。

查看引用,发现都不是我想要的,代码部分的分析,我就不献丑了。


这三个都不是,有点灰心,然后我想到两个文章当中都有说过一个函数GetVersion,利用已知函数反推分发逻辑,首先确定的就是有这么个函数,返回版本号。在web当中是这样的

搜索这个部分当中的关键字version

然后找到引用

查看这个部分的代码:伪代码:首先确定这个就是刚刚看到的功能点,所有的 HTTP 请求处理逻辑一定汇聚在同一个类似于“功能分发函数”(Dispatcher)里。就像FastBackServer一样。“分发函数”应该会有大量的if/else或者switch结构的代码。找到调用 sub_4F7690 的上级函数。这个函数就应该是“分发函数”。

跳转到这个函数看下

伪代码:果然不出所料,大量的if/else的结构,我们可以通过伪代码清晰地看到它是如何解析 method 参数并分发给不同函数的。虽然字符串可能被加密(或使用全局变量引用 dword_6BC5xx),但结构出卖了它。我们来逐一分析这个分发逻辑:sub_4F7690 = GetVersion代码行 107-111:else { sub_4F7690(a2, v44); ... }与之对应的比较逻辑:wcsicmp(v26, dword_6BC578)。这意味着 dword_6BC578 实际上指向的就是字符串 "GetVersion"。sub_4F7960 = DownloadShareItems(我在上面手动命名的函数)sub_4F7C10 = DownloadSelfownItems(同上)到这里,接下来需要找到我给出的两个链接当中的大佬说的漏洞,也就是说还是需要找到OpenSafeBox方法的参数uk相关的操作。(这个截图是我给出的链接当中的分析)

来分析这里别的功能的部分,比较有嫌疑的是下面三个分支。-----------------------无关紧要的部分----------------------------------sub_4F7740: 这个函数紧跟着 GetVersion (dword_6BC578),使用的是 wcsicmp 而不是 sub_411BE0(这可能是一个自定义的比较函数)。这看起来像是一个简单的 Getter,很可能对应GetPcCode。跳转查看
-----------------------无关紧要的部分----------------------------------这里根据文档 OpenSafeBox 的参数:它需要 uk 参数。 应该和上面部分我找到的 DownloadShareItems 结构差不多。所以我觉得第一段是比较像的。跳转查看
看到这个部分关键字其实就大概确定自己找对方向了这里,继续跟进sub_4B7040部分伪代码v3 = sub_4B1BA0(v2);,还需要继续跟进。最后来到真正拼接的部分这个就是最终有漏洞的部分这里就是漏洞成因了漏洞原理验证: 文档中提到“代码中没有对该参数进行安全检测和过滤,因此此处存在命令行参数注入” 。 在这行代码中,程序没有对第二个 %s 做任何转义(没有引号包裹,没有过滤空格)。只要你在 uk 参数里输入空格,就能“逃逸”出 -userkey 的范围,伪造出新的参数(例如 -install regdll)。代码的第 45 行回顾整个过程,通过逆向分析完整复现了数据流向:知其然,知其所以然,接下来到了利用的部分。poc.xml
接着尝试一下反弹shell在kali当中准备一个xml然后在kali当中开启一个web服务,然后访问,就会得到一个反弹shell
https://bbs.kanxue.com/thread-288381.htm

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-289586.htm
#2 2026-06-01 21:09:06
一份比较详细的漏洞分析过程的记录文档,辛苦师傅!
#3 2026-06-01 21:09:06
tql
#4 2026-06-01 21:09:06
tql
#5 2026-06-01 21:09:06
很棒的分析。
#6 2026-06-01 21:09:06
牛批,这都能有漏洞
#7 2026-06-01 21:09:06
牛逼,大佬
#8 2026-06-01 21:09:06
感谢分享
#9 2026-06-01 21:09:06
学习了
#10 2026-06-01 21:09:06
学习一下
#11 2026-06-01 21:09:06
学习
#12 2026-06-01 21:09:06
厉害

请登录后参与讨论

立即登录 注册账号