借助 AI 逆向工程 EXE 文件实现 RCE

导语:一位拥有 20 年渗透测试经验的安全研究员在 Web 应用渗透测试陷入僵局时,借助 AI 工具对下载到的 EXE 进行逆向分析,最终发现了一个无需用户交互的本地服务远程代码执行漏洞。


事件概述


研究员接受的渗透测试项目涉及一个外观陈旧的 Web 应用。起初以为进展顺利,但越挖越深,才发现 Web 层在 SSL 连接之上增加了一层由 JavaScript 处理的加密层——整个查询字符串在客户端加密,服务端解密解析。这个加密模式本身是值得关注攻击向量,但研究员对其进行了大量 SQL 注入注入和篡改测试,均以失败告终,Web 应用似乎相当健壮。

在常规路径走不通的情况下,研究员转向 JavaScript 文件,很快发现了一个可疑的函数片段:

function downSetup(type) {
    $.download('/lm/downSetup.htm''down=' + type);
}

对 down 参数进行模糊测试后,研究者成功触发了一个 EXE 文件的下载——正是这个可执行文件,打开了通往 RCE 的大门。

AI辅助逆向工程工作流

技术分析


EXE 文件分析

拿到文件后,研究员没有像以前那样动态运行并拦截流量,而是借助 AI 对二进制文件进行静态分析。关键步骤被拆解为多个小型提示词,而非一次性模糊指令。

AI 首先确认该可执行文件是一个 .NET 程序集,引用了 Newtonsoft.Json 和 WebSocketSharp,并内置了 Costura 打包的依赖 DLL。随后研究员要求 AI 对字符串进行完整转储并按类别分组——URL、文件路径、注册表路径、类加密字符串、错误消息等。其中几行字符串格外引人注目:

ehdgoanfrhkq1234
OfficeHDWebHard!
SOFTWAREJiranSecurityOfficeHARD REDService
explorer.exe "{0}"

前两条字符串各占 16 字节、位于相邻堆偏移处,格式不符合自然语言特征,极有可能是加密密钥材料。AI 进一步对加密逻辑进行了深入分析,但解密过程遇到了挑战——标准加密库(Python cryptography、OpenSSL)均无法输出正确结果,因为二进制文件采用了自定义的非标准密钥调度算法。

解决方案令人印象深刻:AI 编写了一个 PowerShell 脚本,直接通过 .NET 反射调用二进制文件内部的解密方法——效果类似于 Android 动态分析中的方法 Hook,用宿主程序自己的能力来解密数据。最终解密出的 INI 配置文件清晰地揭示了完整的更新基础设施和服务器通信逻辑。

CSWSH:跨站 WebSocket 劫持

在确认通信机制后,一个重大发现浮出水面:该服务在 ws://127.0.0.1:3100 上启动了一个 WebSocket 服务端,且未对传入连接的 Origin 头进行任何验证。这意味着任何来自任意域名的网页都可以连接并向该服务发送命令——这是典型的跨站 WebSocket 劫持(CSWSH)。

研究员在 JS 文件中找到了服务端 WebSocket 的调用代码,确认了 Web 应用确实通过本地 WebSocket 与该服务通信,并编写了简单的 PoC 验证了 {GET: 'VERSION'} 请求可以成功获取版本号。

跨站WebSocket劫持攻击示意

RCE Gadget

WebSocket 提供了多个指令接口,其中 RUN: 'AUTH' 看似最有希望——但测试发现该指令使用 CreateProcessAsUser 直接执行,不支持 shell 元字符,&&|; 等均作为字面量处理,无法触发命令注入。

在多次失败后,研究员回头重新审视被标记为 FAIL 的其他指令,并促使 AI 补充完整了所有在二进制字符串中找到的应用名称变体。最终发现了一个关键的降级路径:当目标应用未安装时,程序会落入 explorer.exe "{URL}" 分支,直接将 URL 内容作为命令执行。

发送 {RUN: 'DRIVE', URL: 'calc.exe'},弹窗瞬间出现。

攻击链总结


步骤
动作
说明
1
攻击者构造恶意网页
含 WebSocket 连接脚本
2
受害者访问该页面
目标机器已安装目标软件
3
WebSocket 连接本地服务
ws://127.0.0.1:3100

,无 Origin 校验
4
发送 {RUN: 'DRIVE', URL: 'calc.exe'}
应用未安装,降级执行
5
explorer.exe "calc.exe"

 执行
零交互、零点击完成 RCE

完整的漏洞利用仅需一段 HTML 页面脚本,当受害者的浏览器加载页面时攻击自动触发。

总结与建议


这类漏洞并非新问题。2018 年 Tavis Ormandy 曾披露 Electrum 钱包本地 JSON-RPC 服务存在相同模式——监听 127.0.0.1 却不验证调用者来源,导致任意网站可扫描端口并窃取钱包。八年过去,同样的反模式仍在生产级二进制中持续出现。

对此类本地服务的安全建议:

  • 验证 Origin 头:拒绝来自非同源域的 WebSocket 连接请求。
  • 实例级 Token:在 URL 或请求参数中引入每实例唯一的认证 Token。
  • 两者并用:Token + Origin 双重校验,防御更彻底。

转载声明:本文为原文转载,原文出处:blog.voorivex.team — My First RCE by Reverse Engineering an EXE File With the Help of AI

版权声明:本文由华盟网原创发布,保留所有权利。配图由华盟网授权使用。


👇 点击阅读原文,访问我的网站


© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容