万户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白名单
  • 绕过方法
    1. 伪造X-Forwarded-For头
    2. 构造路径如/xfservices/GeneralWeb../../admin/info

2.1.3 第三种绕过方式

  • 原理:系统对特定后缀和路由有特殊处理
  • 绕过方法
    1. 构造/admin.jsp;.js使后缀检测失效
    2. 构造/evo/weixin/../../admin.jsp利用白名单路由
    3. 添加参数whir_new_verifyCode=1

3. SQL注入漏洞

3.1 审计方法

  • 优先寻找非参数绑定的SQL语句拼接点
  • 搜索关键词:+||append
  • 注意自写JDBC连接查询

3.2 漏洞实例

3.2.1 第一处注入

  • 文件hospital/checkwork/checkwork_httprequest.jsp
  • 参数statDateuserId
  • 触发条件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
  • 参数pathfilename
  • 特点:两种下载模式,参数均部分可控

4.2 任意文件删除

  • 文件public/upload/uploadify/deleteFile.jsp
  • 参数filenamepath
  • 限制:需要附件上传权限
  • 绕过:检查了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方法
  • 调用链
    1. WXBizMsgCrypt.java中的DecryptMsg方法
    2. CallBackAction.java中的callback方法
  • 路由/WeiXin!callback.action
  • 特点:未禁用外部实体解析

6. 防御建议

  1. 鉴权机制

    • 实现统一的权限验证框架
    • 严格校验路径规范化
    • 加强会话管理
  2. SQL注入

    • 统一使用预编译语句
    • 禁用动态SQL拼接
    • 实施ORM框架规范
  3. 文件操作

    • 实施严格的路径校验
    • 限制文件操作权限
    • 实现文件操作白名单
  4. 其他

    • 禁用XML外部实体
    • 限制SSRF的目标地址
    • 实施文件上传类型检查

7. 总结

万户OA系统存在多处高危漏洞,主要由于:

  1. 鉴权机制设计缺陷
  2. 未严格实施安全编码规范
  3. 输入验证不足
  4. 危险函数使用不当

建议用户及时更新系统,或实施严格的安全防护措施。

万户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系统存在多处高危漏洞,主要由于: 鉴权机制设计缺陷 未严格实施安全编码规范 输入验证不足 危险函数使用不当 建议用户及时更新系统,或实施严格的安全防护措施。