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配置

  1. 解压源码后使用IDEA打开
  2. 添加模块:文件 → 项目结构 → 模块 → 导入模块
  3. 选择源码文件,导入格式选择"Eclipse"
  4. 忽略报红问题(不影响代码阅读)

2.3 Tomcat部署

  1. 将war包放入tomcat/webapps/目录
  2. 启动Tomcat
  3. 访问:http://127.0.0.1:8080/DocSystem

2.4 初始化配置

  1. 首次访问创建管理员用户
  2. 进入后台管理 → 系统管理 → 数据库设置
  3. 创建数据库并配置账号密码
  4. 重要:测试连接成功后选择"重置数据库"创建表结构
  5. 必须保存设置,否则SQL查询会走本地缓存而非数据库

2.5 数据导入

  • 手动导入备份SQL文件(路径:webapps/docSys.ini/backup/
  • 选择最新的备份文件导入
  • 重启Tomcat

3. 漏洞分析

3.1 SQL注入漏洞

发现过程

  1. 项目使用MyBatis(依赖位于DocSystem/WEB-INF/lib
  2. 全局搜索${发现多处潜在注入点

示例漏洞

  • 文件路径: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
  • 关键参数:pathname
  • 代码位置:addDocupdateDoc方法

漏洞分析

  1. 上传处理代码未校验pathname参数
  2. 最终调用FileUtil.saveFile保存文件时未处理路径
  3. 导致目录穿越,可上传文件到任意位置

利用方法
构造恶意path参数实现跨目录上传:

path=../../../&name=evil.jsp

3.2.2 文件写入漏洞

漏洞点

  • 相关方法:updateRealDocContentsaveRealDocContentEx
  • 问题:未校验path参数

漏洞分析

  1. 虽然校验了用户权限和文件存在性
  2. 但可利用文件覆盖功能
  3. 最终FileUtil.saveDataToFile未检查路径,导致目录穿越

3.2.3 文件读取漏洞

漏洞点

  • 文件预览和打开功能处
  • 相关方法:readRealDocContentEx

漏洞分析

  1. 检查文件类型(文本类型)
  2. 但未进行路径检测
  3. 导致目录穿越读取任意文件

3.2.4 任意文件删除

漏洞点

  • 与文件读取/上传类似
  • 未校验pathname参数

漏洞分析

  1. 同样存在路径处理问题
  2. 可构造恶意路径删除任意文件

4. 漏洞修复建议

4.1 SQL注入修复

  1. ${}替换为#{}预编译方式
  2. 对用户输入进行严格过滤和转义
  3. 使用参数化查询

4.2 文件操作漏洞修复

  1. 对所有文件路径参数进行规范化处理
  2. 实现路径白名单机制
  3. 禁止路径中包含../等目录穿越字符
  4. 对用户提供的文件名进行严格校验

5. 总结

DocSys文件管理系统存在多处高危漏洞,包括:

  1. 多处SQL注入漏洞
  2. 任意文件上传、读取、写入和删除漏洞

这些漏洞主要源于:

  • 未对用户输入进行充分验证
  • 文件路径处理不当
  • 缺乏必要的安全防护措施

开发人员应重视输入验证和路径处理,遵循最小权限原则,以提升系统安全性。

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 参数实现跨目录上传: 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注入漏洞 任意文件上传、读取、写入和删除漏洞 这些漏洞主要源于: 未对用户输入进行充分验证 文件路径处理不当 缺乏必要的安全防护措施 开发人员应重视输入验证和路径处理,遵循最小权限原则,以提升系统安全性。