【实战】文都 OA 云协同系统分析+漏洞挖掘
字数 1402 2025-08-22 12:23:06
文都OA云协同系统安全分析与漏洞挖掘实战指南
环境搭建
-
获取源代码:
- 从yongjannes/OA仓库下载系统代码
- 后端代码位于server文件夹
- 前端代码位于client文件夹
-
数据库配置:
- 修改
src/main/resources/application.yaml配置文件 - 默认数据库名:
oadb - 修改数据库账号密码为自己的凭证
- 修改头像存储目录为存在的目录路径
- 修改
-
初始化数据库:
- 使用phpstudy创建
oadb数据库 - 执行提供的SQL文件初始化数据库结构
- 使用phpstudy创建
-
启动系统:
- 启动数据库服务
- 启动后端服务
- 在前端目录执行启动命令(可能需要管理员权限)
-
访问系统:
- 默认访问地址:
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的依赖,限制上传文件类型
- 文件名固定为用户账号,无法修改
- 文件名生成逻辑:
用户账号 + 固定后缀 - 无法通过修改文件名实现任意文件上传
- 文件名生成逻辑:
利用条件:
- 需要能够操作数据库修改用户账号
- 实际利用价值较低
安全建议
-
修复未授权访问:
- 移除
/info/**路径的匿名访问权限 - 为敏感接口添加角色权限验证
- 移除
-
JWT增强:
- 使用独立密钥而非用户密码生成JWT
- 增加JWT过期时间检查
- 实现JWT黑名单机制
-
文件上传加固:
- 实现文件类型白名单验证
- 对上传文件内容进行安全检查
- 存储文件使用随机文件名
-
其他建议:
- 实现多因素认证
- 增加操作日志审计
- 定期进行安全代码审查
总结
本文详细分析了文都OA云协同系统的安全架构,重点揭示了其鉴权机制中的未授权访问漏洞和JWT实现细节。通过环境搭建、代码分析和漏洞验证的完整流程,展示了企业级OA系统的常见安全问题及挖掘方法。系统管理员应参考本文的安全建议及时修复漏洞,安全研究人员可借鉴本文的分析方法进行类似系统的安全评估。