万户OA代码审计与0day挖掘
字数 2058 2025-09-01 11:25:53
万户OA系统代码审计与漏洞挖掘技术文档
1. 系统概述
万户OA(又名万户ezOFFICE)是由北京万户网络技术有限公司开发的一套协同办公平台,广泛应用于政府、企事业单位。该系统特点包括:
- 采用Struts框架+jsp混合架构
- 支持多种操作系统(Windows/Linux/Unix)
- 支持多种数据库(Oracle/SQL Server/MySQL等)
- 指纹特征:"defaultroot/scripts/main/whir.util.js"
2. 鉴权机制分析与绕过
2.1 鉴权机制分析
系统核心安全过滤器为SetCharacterEncodingFilter,主要处理请求编码和鉴权验证。分析发现三种绕过方式:
2.1.1 第一种绕过方式
- 原理:系统会检查请求路径是否包含
/iWebOfficeSign/OfficeServer.jsp - 绕过方法:构造包含该路径的请求即可绕过鉴权
2.1.2 第二种绕过方式
- 原理:路径包含
/xfservices/GeneralWeb或/services/ExchangeService时,会检查IP白名单 - 绕过方法:
- 伪造X-Forwarded-For头
- 构造路径如
/xfservices/GeneralWeb../../admin/info
2.1.3 第三种绕过方式
- 原理:系统对特定后缀和路由有特殊处理
- 绕过方法:
- 构造
/admin.jsp;.js使后缀检测失效 - 构造
/evo/weixin/../../admin.jsp利用白名单路由 - 添加参数
whir_new_verifyCode=1
- 构造
3. SQL注入漏洞
3.1 审计方法
- 优先寻找非参数绑定的SQL语句拼接点
- 搜索关键词:
+、||、append - 注意自写JDBC连接查询
3.2 漏洞实例
3.2.1 第一处注入
- 文件:
hospital/checkwork/checkwork_httprequest.jsp - 参数:
statDate和userId - 触发条件:
type == checkStatDate - 利用方式:结合鉴权绕过构造POC
3.2.2 第二处注入
- 文件:
govoffice/gov_documentmanager/govdocumentmanager_judge.jsp - 参数:
numId - 特点:直接拼接SQL语句并执行
3.2.3 第三处注入
- 文件:
DocumentSave.jsp - 参数:
RecordID - 执行方式:通过
DbaObj.ExecuteQuery执行
4. 文件操作漏洞
4.1 文件读取/下载
4.1.1 第一处任意文件下载
- 文件:
logset/down.jsp - 参数:
name - 原理:未对路径穿越进行检查
- 影响:可读取
WEB-INF/logs/目录下任意文件
4.1.2 第二处任意文件下载
- 文件:
public/download_ftp/download.jsp - 参数:
path和filename - 特点:两种下载模式,参数均部分可控
4.2 任意文件删除
- 文件:
public/upload/uploadify/deleteFile.jsp - 参数:
filename和path - 限制:需要附件上传权限
- 绕过:检查了path但未检查filename的路径穿越
4.3 文件上传
- 入口:
FileUploadAction.java中的saveFileFromInputStream方法 - 路由:
/defaultroot/upload/fileUpload - 特点:
- 未校验文件后缀
- 使用随机文件名但保留原后缀
- 风险:可上传任意文件类型
5. 其他漏洞
5.1 SSRF漏洞
- 文件:
platform/portal/portlet/rssproxy.jsp - 参数:
rssUrl - 限制:仅支持HTTP/HTTPS协议
5.2 XXE漏洞
- 文件:
XMLParse.java中的extract方法 - 调用链:
WXBizMsgCrypt.java中的DecryptMsg方法CallBackAction.java中的callback方法
- 路由:
/WeiXin!callback.action - 特点:未禁用外部实体解析
6. 防御建议
-
鉴权机制:
- 实现统一的权限验证框架
- 严格校验路径规范化
- 加强会话管理
-
SQL注入:
- 统一使用预编译语句
- 禁用动态SQL拼接
- 实施ORM框架规范
-
文件操作:
- 实施严格的路径校验
- 限制文件操作权限
- 实现文件操作白名单
-
其他:
- 禁用XML外部实体
- 限制SSRF的目标地址
- 实施文件上传类型检查
7. 总结
万户OA系统存在多处高危漏洞,主要由于:
- 鉴权机制设计缺陷
- 未严格实施安全编码规范
- 输入验证不足
- 危险函数使用不当
建议用户及时更新系统,或实施严格的安全防护措施。