快速审计记录(五)--某blog系统
字数 1282 2025-08-23 18:31:09

Blog系统安全审计教学文档

1. SQL注入漏洞分析

1.1 审计方法

  1. 首先在mapper.xml中查找${}进行SQL拼接的情况
  2. 找出对应的DAO层调用方法
  3. 分析参数类型和调用链

1.2 发现过程

  1. 在保存文章界面发现可能的注入点,但parameterType="java.lang.Integer"限制了参数类型
  2. 发现Example_Where_Clause但未找到对应DAO层,可能仅为示例
  3. 最终找到的xxxByExample方法都是不可控的

1.3 结论

  • 系统使用了MyBatis框架
  • 参数类型限制严格,未发现可利用的SQL注入漏洞

2. 用户注册逻辑错误

2.1 漏洞描述

  • 系统在第一次使用时会出现用户注册情况
  • 重复注册时出现错误

2.2 代码分析

  1. 未做多次写入判断,直接进行保存操作
  2. 连续调用userService.saveoptionsService.save
  3. 插入操作时出现错误

2.3 实际影响

  1. 数据库成功插入数据
  2. 登录时出现错误:应返回一个结果或null但返回了多个结果
  3. 直接影响管理员用户登录

3. 任意文件上传漏洞

3.1 上传接口分析

  • 所有上传接口使用同一入口
  • 上传文件详情中可见路径

3.2 代码实现

  1. 调用uploadAttachment方法
  2. 主要功能:
    • 对上传文件进行重命名
    • 获取文件后缀
  3. 限制:
    • 无法通过../进行目录穿越
    • 只能上传Webshell
    • 系统不解析JSP

3.3 利用限制

  • 由于系统不解析JSP,上传Webshell无法执行

4. 任意文件删除尝试

4.1 删除机制

  • 通过上传时赋予的ID进行删除操作

4.2 代码分析

  • ID类型为int
  • 无法进行目录穿越
  • 无法实现任意文件删除

5. Fastjson版本分析

5.1 版本信息

  • 使用Fastjson 1.2.83

5.2 安全评估

  1. 代码中未使用parseObject方法
  2. 参考链接:FastJson与原生反序列化(二)
  3. 未发现可利用的反序列化漏洞

6. 未授权访问分析

6.1 鉴权系统

  • 使用Spring Web MVC拦截器

6.2 关键拦截器

  1. excludePathPatterns
  2. loginAuthenticator
    • 必须有user的session才能返回true
  3. installInterceptor
    • 必须已经注册

6.3 绕过尝试

  1. 尝试通过/install/../admin/进行未授权调用admin接口
  2. 结果:直接解析到loginAuthenticator,绕过失败

7. 总结与教学要点

7.1 审计方法论

  1. 从Mapper文件入手查找SQL注入
  2. 关注用户注册/登录逻辑
  3. 文件上传/删除功能审计
  4. 组件版本安全分析
  5. 权限系统绕过尝试

7.2 关键安全实践

  1. 使用#{}而非${}防止SQL注入
  2. 用户注册逻辑应包含重复注册检查
  3. 文件上传应限制文件类型和路径
  4. 权限系统应防止路径遍历绕过

7.3 修复建议

  1. 修复用户注册逻辑错误
  2. 加强文件上传限制
  3. 更新Fastjson到最新安全版本
  4. 完善权限校验机制
Blog系统安全审计教学文档 1. SQL注入漏洞分析 1.1 审计方法 首先在mapper.xml中查找 ${} 进行SQL拼接的情况 找出对应的DAO层调用方法 分析参数类型和调用链 1.2 发现过程 在保存文章界面发现可能的注入点,但 parameterType="java.lang.Integer" 限制了参数类型 发现 Example_Where_Clause 但未找到对应DAO层,可能仅为示例 最终找到的 xxxByExample 方法都是不可控的 1.3 结论 系统使用了MyBatis框架 参数类型限制严格,未发现可利用的SQL注入漏洞 2. 用户注册逻辑错误 2.1 漏洞描述 系统在第一次使用时会出现用户注册情况 重复注册时出现错误 2.2 代码分析 未做多次写入判断,直接进行保存操作 连续调用 userService.save 和 optionsService.save 插入操作时出现错误 2.3 实际影响 数据库成功插入数据 登录时出现错误:应返回一个结果或null但返回了多个结果 直接影响管理员用户登录 3. 任意文件上传漏洞 3.1 上传接口分析 所有上传接口使用同一入口 上传文件详情中可见路径 3.2 代码实现 调用 uploadAttachment 方法 主要功能: 对上传文件进行重命名 获取文件后缀 限制: 无法通过 ../ 进行目录穿越 只能上传Webshell 系统不解析JSP 3.3 利用限制 由于系统不解析JSP,上传Webshell无法执行 4. 任意文件删除尝试 4.1 删除机制 通过上传时赋予的ID进行删除操作 4.2 代码分析 ID类型为 int 无法进行目录穿越 无法实现任意文件删除 5. Fastjson版本分析 5.1 版本信息 使用Fastjson 1.2.83 5.2 安全评估 代码中未使用 parseObject 方法 参考链接: FastJson与原生反序列化(二) 未发现可利用的反序列化漏洞 6. 未授权访问分析 6.1 鉴权系统 使用Spring Web MVC拦截器 6.2 关键拦截器 excludePathPatterns loginAuthenticator : 必须有user的session才能返回true installInterceptor : 必须已经注册 6.3 绕过尝试 尝试通过 /install/../admin/ 进行未授权调用admin接口 结果:直接解析到 loginAuthenticator ,绕过失败 7. 总结与教学要点 7.1 审计方法论 从Mapper文件入手查找SQL注入 关注用户注册/登录逻辑 文件上传/删除功能审计 组件版本安全分析 权限系统绕过尝试 7.2 关键安全实践 使用 #{} 而非 ${} 防止SQL注入 用户注册逻辑应包含重复注册检查 文件上传应限制文件类型和路径 权限系统应防止路径遍历绕过 7.3 修复建议 修复用户注册逻辑错误 加强文件上传限制 更新Fastjson到最新安全版本 完善权限校验机制