基于Spring boot的医药管理系统审计
字数 1340 2025-08-30 06:50:36

基于Spring Boot的医药管理系统安全审计报告

环境搭建

环境准备

  1. 使用IDEA打开项目
  2. 修改JDK和Maven配置
  3. 等待Maven依赖加载完成

配置文件修改

  • 修改路径:src/main/resources/application.yml
  • 需要配置数据库连接信息

数据库设置

  1. 创建对应数据库
  2. 导入提供的SQL文件
  3. 启动项目

代码审计发现的安全漏洞

1. 鉴权逻辑缺陷

拦截器分析

  • 项目存在拦截器配置
  • 拦截器处理两部分逻辑:
    • 用户校验逻辑(通过token验证)
    • 允许未授权访问的逻辑

Token生成机制

  • Token生成逻辑中包含随机数,难以伪造

未授权访问接口

  • /dictionary/page
  • /file/upload
  • 带有@IgnoreAuth注解的所有路由

2. 未授权任意密码重置

漏洞发现

  • 全局搜索@IgnoreAuth注解发现多个未授权接口
  • 其中存在通过用户名重置密码的功能

漏洞验证

  1. 构造请求通过用户名重置密码
  2. 查看数据库确认密码已被修改

3. 未授权SQL注入

技术栈分析

  • 系统使用MyBatis作为ORM框架

漏洞定位

  1. 全局搜索${(MyBatis中可能导致SQL注入的写法)
  2. 发现多处潜在注入点
  3. 重点关注column参数

漏洞链分析

  • column参数 → Dao层 → Controller层
  • 接口带有@IgnoreAuth注解,无需认证

漏洞利用

  1. 构造正常请求
  2. 使用SQLMap进行自动化注入测试

4. 水平越权

漏洞发现

  1. 以普通用户身份登录
  2. 测试后台功能点
  3. 发现用户信息修改功能

漏洞分析

  • 通过传入的用户ID进行数据修改
  • 代码中缺少对用户ID与当前用户ID的校验

漏洞验证

  1. 修改请求中的用户ID为其他用户
  2. 确认可以成功修改其他用户信息

5. 任意文件上传

漏洞定位

  • 全局搜索关键词upload
  • 发现文件上传逻辑缺陷

漏洞分析

  • 获取上传文件后缀后未进行安全检测
  • 直接拼接路径并使用file.transferTo(dest)上传文件

漏洞验证

  1. 构造恶意文件上传请求
  2. 确认文件上传成功

6. 未授权任意文件下载

漏洞定位

  • 全局搜索关键词download
  • 发现文件下载接口存在缺陷

漏洞分析

  • 未对传入的文件名进行安全检测
  • 存在目录遍历漏洞
  • 接口未授权即可访问

漏洞验证

  1. 构造包含路径遍历字符的请求
  2. 成功读取系统敏感文件

修复建议

  1. 鉴权逻辑加固

    • 严格限制@IgnoreAuth注解的使用
    • 对敏感操作增加二次验证
  2. SQL注入防护

    • ${}替换为#{}参数化查询
    • 对动态列名进行白名单校验
  3. 越权防护

    • 所有涉及用户数据的操作需验证当前用户权限
    • 服务端校验操作用户与目标用户的关联性
  4. 文件上传防护

    • 限制上传文件类型(白名单机制)
    • 对上传文件进行病毒扫描
    • 存储上传文件到非Web目录
  5. 文件下载防护

    • 对文件名进行规范化处理
    • 限制可访问的目录范围
    • 增加身份验证和权限检查
  6. 日志与监控

    • 记录所有敏感操作日志
    • 设置异常操作告警机制

总结

本医药管理系统存在多处严重安全漏洞,包括未授权访问、SQL注入、水平越权、任意文件上传/下载等高风险问题。建议立即修复上述漏洞,并在开发过程中引入安全编码规范和安全测试流程,以提升系统整体安全性。

基于Spring Boot的医药管理系统安全审计报告 环境搭建 环境准备 使用IDEA打开项目 修改JDK和Maven配置 等待Maven依赖加载完成 配置文件修改 修改路径: src/main/resources/application.yml 需要配置数据库连接信息 数据库设置 创建对应数据库 导入提供的SQL文件 启动项目 代码审计发现的安全漏洞 1. 鉴权逻辑缺陷 拦截器分析 项目存在拦截器配置 拦截器处理两部分逻辑: 用户校验逻辑(通过token验证) 允许未授权访问的逻辑 Token生成机制 Token生成逻辑中包含随机数,难以伪造 未授权访问接口 /dictionary/page /file/upload 带有 @IgnoreAuth 注解的所有路由 2. 未授权任意密码重置 漏洞发现 全局搜索 @IgnoreAuth 注解发现多个未授权接口 其中存在通过用户名重置密码的功能 漏洞验证 构造请求通过用户名重置密码 查看数据库确认密码已被修改 3. 未授权SQL注入 技术栈分析 系统使用MyBatis作为ORM框架 漏洞定位 全局搜索 ${ (MyBatis中可能导致SQL注入的写法) 发现多处潜在注入点 重点关注 column 参数 漏洞链分析 column 参数 → Dao层 → Controller层 接口带有 @IgnoreAuth 注解,无需认证 漏洞利用 构造正常请求 使用SQLMap进行自动化注入测试 4. 水平越权 漏洞发现 以普通用户身份登录 测试后台功能点 发现用户信息修改功能 漏洞分析 通过传入的用户ID进行数据修改 代码中缺少对用户ID与当前用户ID的校验 漏洞验证 修改请求中的用户ID为其他用户 确认可以成功修改其他用户信息 5. 任意文件上传 漏洞定位 全局搜索关键词 upload 发现文件上传逻辑缺陷 漏洞分析 获取上传文件后缀后未进行安全检测 直接拼接路径并使用 file.transferTo(dest) 上传文件 漏洞验证 构造恶意文件上传请求 确认文件上传成功 6. 未授权任意文件下载 漏洞定位 全局搜索关键词 download 发现文件下载接口存在缺陷 漏洞分析 未对传入的文件名进行安全检测 存在目录遍历漏洞 接口未授权即可访问 漏洞验证 构造包含路径遍历字符的请求 成功读取系统敏感文件 修复建议 鉴权逻辑加固 严格限制 @IgnoreAuth 注解的使用 对敏感操作增加二次验证 SQL注入防护 将 ${} 替换为 #{} 参数化查询 对动态列名进行白名单校验 越权防护 所有涉及用户数据的操作需验证当前用户权限 服务端校验操作用户与目标用户的关联性 文件上传防护 限制上传文件类型(白名单机制) 对上传文件进行病毒扫描 存储上传文件到非Web目录 文件下载防护 对文件名进行规范化处理 限制可访问的目录范围 增加身份验证和权限检查 日志与监控 记录所有敏感操作日志 设置异常操作告警机制 总结 本医药管理系统存在多处严重安全漏洞,包括未授权访问、SQL注入、水平越权、任意文件上传/下载等高风险问题。建议立即修复上述漏洞,并在开发过程中引入安全编码规范和安全测试流程,以提升系统整体安全性。