万户ezOFFICE协同管理平台 GeneralWeb XXE to RCE
字数 933 2025-08-20 18:18:10
万户ezOFFICE协同管理平台XXE到RCE漏洞分析与利用
漏洞概述
本文详细分析万户ezOFFICE协同管理平台中存在的XXE(XML External Entity)漏洞及其如何演变为远程代码执行(RCE)的完整过程。该漏洞存在于GeneralWeb组件中,攻击者可通过精心构造的XML请求实现服务器端任意文件读取,并进一步利用平台特性实现远程代码执行。
漏洞分析
XXE漏洞原理
万户ezOFFICE协同管理平台的GeneralWeb组件在处理XML请求时,未对用户提交的XML数据进行严格过滤,导致攻击者可以注入外部实体声明,从而实现:
- 服务器端任意文件读取
- 内部网络探测
- 在特定条件下实现远程代码执行
漏洞触发点
漏洞主要存在于处理XML请求的接口中,攻击者通过构造恶意的XML实体声明,利用服务器解析XML时的外部实体加载功能,读取服务器上的敏感文件。
漏洞利用
基础XXE利用
最基本的利用方式是读取服务器上的文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root>
<content>&xxe;</content>
</root>
进阶利用 - 实现RCE
通过XXE漏洞,攻击者可以结合万户平台的以下特性实现RCE:
- Freemarker模板注入:利用平台对Freemarker模板的不安全处理
- BeanShell脚本执行:通过bsh组件执行任意Java代码
- StringUtil任意文件写:利用平台的文件操作功能写入恶意文件
内存马注入
在绕过RASP(运行时应用自我保护)后,攻击者可以注入内存马,实现持久化控制:
// 示例内存马代码片段
WebappClassLoaderBase webappClassLoader = (WebappClassLoaderBase) Thread.currentThread().getContextClassLoader();
StandardContext standardContext = (StandardContext) webappClassLoader.getResources().getContext();
RASP绕过技术
万户平台可能部署了RASP防护,需要采用以下技术绕过:
- 反射调用关键方法
- 使用不常见的类加载器
- 动态生成恶意类字节码
- 利用平台白名单内的类和方法
漏洞修复建议
-
禁用XML外部实体解析:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); dbf.setFeature("http://xml.org/sax/features/external-general-entities", false); dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false); -
更新万户ezOFFICE到最新版本
-
限制服务器出站连接,防止SSRF攻击
-
部署WAF规则拦截恶意XML请求
总结
万户ezOFFICE协同管理平台的XXE到RCE漏洞链展示了传统OA系统常见的安全问题。通过深入分析此漏洞,我们可以学习到:
- XXE漏洞的多种利用方式
- 如何将文件读取升级为代码执行
- 现代RASP防护的绕过技巧
- 内存马的注入原理
该漏洞在实战中具有较高价值,建议安全研究人员在授权测试中验证其影响,并协助企业及时修复。