DocSys代码审计
字数 1941 2025-08-22 12:22:54
DocSys代码审计与漏洞分析教学文档
1. 项目概述
MxsDoc是一个基于Web的文件管理系统,具有以下主要功能:
- 权限管理、历史版本管理
- Office/WPS预览与编辑
- 在线解压缩、文件分享与加密
- 远程存储与文件推送
- 秒传、断点续传
- 智能搜索、文件备注、回收站
- 自动备份、一键迁移、集群部署
应用场景:
- 文件管理系统、协同办公系统
- 电子书、知识管理系统
- 软件接口管理系统
- 自动备份软件
- 网页版SVN/GIT仓库
开源协议:GPL 2.0
2. 环境搭建
2.1 下载资源
- war包:https://github.com/RainyGao-GitHub/DocSys/releases/download/DocSys_V2.02.36/DocSystem.war
- 网站源码:https://github.com/RainyGao-GitHub/DocSys/archive/refs/tags/DocSys_V2.02.36.zip
2.2 IDEA配置
- 解压源码后使用IDEA打开
- 添加模块:文件 → 项目结构 → 模块 → 导入模块
- 选择源码文件,导入格式选择"Eclipse"
- 忽略报红问题(不影响代码阅读)
2.3 Tomcat部署
- 将war包放入
tomcat/webapps/目录 - 启动Tomcat
- 访问:http://127.0.0.1:8080/DocSystem
2.4 初始化配置
- 首次访问创建管理员用户
- 进入后台管理 → 系统管理 → 数据库设置
- 创建数据库并配置账号密码
- 重要:测试连接成功后选择"重置数据库"创建表结构
- 必须保存设置,否则SQL查询会走本地缓存而非数据库
2.5 数据导入
- 手动导入备份SQL文件(路径:
webapps/docSys.ini/backup/) - 选择最新的备份文件导入
- 重启Tomcat
3. 漏洞分析
3.1 SQL注入漏洞
发现过程:
- 项目使用MyBatis(依赖位于
DocSystem/WEB-INF/lib) - 全局搜索
${发现多处潜在注入点
示例漏洞:
- 文件路径:
src/com/DocSystem/mapping/UserMapper.xml - 参数:
name(对应方法queryUserWithParamLike) - 数据类型:
HashMap - 相关路由:
/getUserList.do - 参数:
userName,pageIndex,pageSize
验证方法:
- 在
userName参数构造注入payload - 使用sqlmap检测(注意:Python 11可能无法检测,建议使用Python 10)
3.2 文件操作类漏洞
3.2.1 任意文件上传
漏洞点:
- 路由:
uploadDoc.do - 关键参数:
path和name - 代码位置:
addDoc和updateDoc方法
漏洞分析:
- 上传处理代码未校验
path和name参数 - 最终调用
FileUtil.saveFile保存文件时未处理路径 - 导致目录穿越,可上传文件到任意位置
利用方法:
构造恶意path参数实现跨目录上传:
path=../../../&name=evil.jsp
3.2.2 文件写入漏洞
漏洞点:
- 相关方法:
updateRealDocContent和saveRealDocContentEx - 问题:未校验
path参数
漏洞分析:
- 虽然校验了用户权限和文件存在性
- 但可利用文件覆盖功能
- 最终
FileUtil.saveDataToFile未检查路径,导致目录穿越
3.2.3 文件读取漏洞
漏洞点:
- 文件预览和打开功能处
- 相关方法:
readRealDocContentEx
漏洞分析:
- 检查文件类型(文本类型)
- 但未进行路径检测
- 导致目录穿越读取任意文件
3.2.4 任意文件删除
漏洞点:
- 与文件读取/上传类似
- 未校验
path和name参数
漏洞分析:
- 同样存在路径处理问题
- 可构造恶意路径删除任意文件
4. 漏洞修复建议
4.1 SQL注入修复
- 将
${}替换为#{}预编译方式 - 对用户输入进行严格过滤和转义
- 使用参数化查询
4.2 文件操作漏洞修复
- 对所有文件路径参数进行规范化处理
- 实现路径白名单机制
- 禁止路径中包含
../等目录穿越字符 - 对用户提供的文件名进行严格校验
5. 总结
DocSys文件管理系统存在多处高危漏洞,包括:
- 多处SQL注入漏洞
- 任意文件上传、读取、写入和删除漏洞
这些漏洞主要源于:
- 未对用户输入进行充分验证
- 文件路径处理不当
- 缺乏必要的安全防护措施
开发人员应重视输入验证和路径处理,遵循最小权限原则,以提升系统安全性。