【实战】文都 OA 云协同系统分析+漏洞挖掘
字数 1402 2025-08-22 12:23:06

文都OA云协同系统安全分析与漏洞挖掘实战指南

环境搭建

  1. 获取源代码

    • 从yongjannes/OA仓库下载系统代码
    • 后端代码位于server文件夹
    • 前端代码位于client文件夹
  2. 数据库配置

    • 修改src/main/resources/application.yaml配置文件
    • 默认数据库名:oadb
    • 修改数据库账号密码为自己的凭证
    • 修改头像存储目录为存在的目录路径
  3. 初始化数据库

    • 使用phpstudy创建oadb数据库
    • 执行提供的SQL文件初始化数据库结构
  4. 启动系统

    • 启动数据库服务
    • 启动后端服务
    • 在前端目录执行启动命令(可能需要管理员权限)
  5. 访问系统

    • 默认访问地址:http://192.168.254.1:808/security/login
    • 默认管理员凭证:admin/123456

系统架构分析

鉴权机制分析

1. 未授权访问漏洞

核心文件src/main/java/com/sf/demo/common/filter/SecurityFilter.java

  • 系统使用单一Filter进行鉴权
  • 关键方法:doFilter
  • 匿名访问机制:
    • 检查请求路径是否在anonUrls列表中
    • 如果在匿名列表中,直接放行到controller
    • 匿名路径通过@ConfigurationProperties(prefix = "oa")注解配置

配置位置

oa:
  anon-urls: /info/**, /security/login, /security/logout, /security/register

漏洞验证

  • /info/**路径下的接口未做额外鉴权
  • 示例:直接访问员工信息接口可获取敏感数据
  • 增删改查操作同样存在未授权访问风险

2. JWT鉴权机制

  • 使用tokenUtils.verify方法验证JWT
  • 密钥生成方式:使用用户密码作为密钥
    • 生成过程:Algorithm.HMAC256(secret)
    • 验证过程:获取密码→哈希处理→验证JWT
  • 安全限制:虽然可伪造JWT,但需要先获取用户密码

DAO层分析

  • 所有SQL查询均使用预编译参数(#{}语法)
  • 未发现SQL注入漏洞

漏洞挖掘与分析

任意文件上传漏洞

发现位置src/main/java/com/sf/demo/api/security/HomeController.java

漏洞特征

  • 使用getInputStream方法处理文件上传
  • 系统缺少解析JSP的依赖,限制上传文件类型
  • 文件名固定为用户账号,无法修改
    • 文件名生成逻辑:用户账号 + 固定后缀
    • 无法通过修改文件名实现任意文件上传

利用条件

  • 需要能够操作数据库修改用户账号
  • 实际利用价值较低

安全建议

  1. 修复未授权访问

    • 移除/info/**路径的匿名访问权限
    • 为敏感接口添加角色权限验证
  2. JWT增强

    • 使用独立密钥而非用户密码生成JWT
    • 增加JWT过期时间检查
    • 实现JWT黑名单机制
  3. 文件上传加固

    • 实现文件类型白名单验证
    • 对上传文件内容进行安全检查
    • 存储文件使用随机文件名
  4. 其他建议

    • 实现多因素认证
    • 增加操作日志审计
    • 定期进行安全代码审查

总结

本文详细分析了文都OA云协同系统的安全架构,重点揭示了其鉴权机制中的未授权访问漏洞和JWT实现细节。通过环境搭建、代码分析和漏洞验证的完整流程,展示了企业级OA系统的常见安全问题及挖掘方法。系统管理员应参考本文的安全建议及时修复漏洞,安全研究人员可借鉴本文的分析方法进行类似系统的安全评估。

文都OA云协同系统安全分析与漏洞挖掘实战指南 环境搭建 获取源代码 : 从yongjannes/OA仓库下载系统代码 后端代码位于server文件夹 前端代码位于client文件夹 数据库配置 : 修改 src/main/resources/application.yaml 配置文件 默认数据库名: oadb 修改数据库账号密码为自己的凭证 修改头像存储目录为存在的目录路径 初始化数据库 : 使用phpstudy创建 oadb 数据库 执行提供的SQL文件初始化数据库结构 启动系统 : 启动数据库服务 启动后端服务 在前端目录执行启动命令(可能需要管理员权限) 访问系统 : 默认访问地址: http://192.168.254.1:808/security/login 默认管理员凭证: admin/123456 系统架构分析 鉴权机制分析 1. 未授权访问漏洞 核心文件 : src/main/java/com/sf/demo/common/filter/SecurityFilter.java 系统使用单一Filter进行鉴权 关键方法: doFilter 匿名访问机制: 检查请求路径是否在 anonUrls 列表中 如果在匿名列表中,直接放行到controller 匿名路径通过 @ConfigurationProperties(prefix = "oa") 注解配置 配置位置 : 漏洞验证 : /info/** 路径下的接口未做额外鉴权 示例:直接访问员工信息接口可获取敏感数据 增删改查操作同样存在未授权访问风险 2. JWT鉴权机制 使用 tokenUtils.verify 方法验证JWT 密钥生成方式:使用用户密码作为密钥 生成过程: Algorithm.HMAC256(secret) 验证过程:获取密码→哈希处理→验证JWT 安全限制:虽然可伪造JWT,但需要先获取用户密码 DAO层分析 所有SQL查询均使用预编译参数(#{}语法) 未发现SQL注入漏洞 漏洞挖掘与分析 任意文件上传漏洞 发现位置 : src/main/java/com/sf/demo/api/security/HomeController.java 漏洞特征 : 使用 getInputStream 方法处理文件上传 系统缺少解析JSP的依赖,限制上传文件类型 文件名固定为用户账号,无法修改 文件名生成逻辑: 用户账号 + 固定后缀 无法通过修改文件名实现任意文件上传 利用条件 : 需要能够操作数据库修改用户账号 实际利用价值较低 安全建议 修复未授权访问 : 移除 /info/** 路径的匿名访问权限 为敏感接口添加角色权限验证 JWT增强 : 使用独立密钥而非用户密码生成JWT 增加JWT过期时间检查 实现JWT黑名单机制 文件上传加固 : 实现文件类型白名单验证 对上传文件内容进行安全检查 存储文件使用随机文件名 其他建议 : 实现多因素认证 增加操作日志审计 定期进行安全代码审查 总结 本文详细分析了文都OA云协同系统的安全架构,重点揭示了其鉴权机制中的未授权访问漏洞和JWT实现细节。通过环境搭建、代码分析和漏洞验证的完整流程,展示了企业级OA系统的常见安全问题及挖掘方法。系统管理员应参考本文的安全建议及时修复漏洞,安全研究人员可借鉴本文的分析方法进行类似系统的安全评估。