对某blog系统的审计
字数 1835 2025-08-24 20:49:22

Blog系统安全审计教学文档

1. 系统概述

本次审计对象是一个基于SSM框架(Spring+SpringMVC+MyBatis)的博客系统,主要发现了XSS漏洞、文件上传漏洞等安全问题。

2. XSS漏洞分析

2.1 公告处XSS

漏洞位置:

  • /ssm/blog/controller/admin/BackNoticeController.java中的updateNotice方法
  • /ssm/blog/controller/home/NoticeController.java中的getNoticeById方法

漏洞原因:

  1. 后台更新公告时未对用户输入进行XSS过滤
  2. 前台显示公告时直接从数据库取出数据并渲染,未进行任何转义处理

漏洞验证:

  • 在公告处插入<script>alert(1)</script>等XSS payload
  • 前台访问公告页面时会直接执行脚本

修复建议:

  1. 在数据存储前使用HTML实体编码
  2. 在数据输出时进行转义处理

2.2 评论处XSS

漏洞位置:

  • /ssm/blog/controller/home/CommentController.java中的insertComment方法

漏洞原因:

  1. 虽然使用了HtmlUtil.escape进行过滤,但存在绕过可能
  2. 过滤不彻底或过滤逻辑存在缺陷

漏洞验证:

  • 构造特殊payload绕过HtmlUtil.escape过滤
  • 后台查看评论时会触发XSS

修复建议:

  1. 使用更严格的XSS过滤库
  2. 实现双重过滤(输入过滤+输出转义)
  3. 设置Content Security Policy(CSP)

2.3 友链申请处XSS

漏洞位置:

  • /ssm/blog/controller/admin/BackLinkController.java
  • 影响字段: 名称和联系方式字段

漏洞原因:

  1. 完全未对用户输入进行XSS防护
  2. 后台查看和编辑友链申请时会触发XSS

漏洞验证:

  • 在友链申请的名称或联系方式字段插入XSS payload
  • 后台管理界面查看时会触发弹窗

修复建议:

  1. 对所有用户输入字段进行XSS过滤
  2. 对输出到页面的内容进行HTML编码

3. SQL注入审计

审计结果:

  • 未发现SQL注入漏洞
  • 所有SQL查询均使用#{}预编译方式,无拼接SQL情况

4. 文件上传漏洞

漏洞位置:

  • /ssm/blog/controller/admin/UploadFileController.java

限制条件:

  • 允许后缀: .bmp .jpg .jpeg .png .gif .pdf .doc .zip .rar .gz
  • 检查逻辑: 检查文件名中最后一个点之后的后缀

潜在风险:

  1. 双扩展名绕过: test.jpg.php
  2. PDF文件可能包含恶意JavaScript(存储型XSS)
  3. 通过修改请求绕过前端限制

漏洞验证方法:

  1. 修改文件名为shell.jpg.php上传
  2. 上传包含恶意脚本的PDF文件
  3. 修改请求包绕过前端限制

修复建议:

  1. 使用白名单验证文件类型(不仅检查扩展名)
  2. 重命名上传文件
  3. 限制文件大小
  4. 对上传文件进行病毒扫描
  5. 设置文件不可执行权限

5. 审计方法论总结

5.1 审计流程

  1. 定位用户输入点(表单、URL参数等)
  2. 跟踪数据处理流程
  3. 检查是否有过滤/验证机制
  4. 验证过滤是否可绕过

5.2 重点关注

  1. 控制器(Controller)中的请求处理方法
  2. 服务层(Service)的业务逻辑
  3. 数据持久层(Mapper/DAO)的SQL处理
  4. 视图层(View)的数据渲染方式

5.3 常见漏洞模式

  1. 直接拼接用户输入到响应中 → XSS
  2. 未使用预编译的SQL → SQL注入
  3. 仅前端验证的文件上传 → 上传绕过
  4. 敏感操作无权限验证 → 越权

6. 环境搭建与复现建议

  1. 搭建本地测试环境
  2. 使用Burp Suite拦截修改请求
  3. 针对每个漏洞点构造不同payload测试
  4. 记录完整的漏洞复现步骤

7. 进阶审计技巧

  1. 使用静态代码分析工具辅助审计
  2. 关注框架的特定版本已知漏洞
  3. 检查自定义过滤器的实现缺陷
  4. 测试不同权限用户间的交互功能
  5. 验证所有API接口的安全性

8. 参考资源

  1. OWASP Top 10
  2. XSS Filter Evasion Cheat Sheet
  3. 文件上传漏洞利用技巧
  4. MyBatis SQL注入防护指南
  5. Spring Security最佳实践
Blog系统安全审计教学文档 1. 系统概述 本次审计对象是一个基于SSM框架(Spring+SpringMVC+MyBatis)的博客系统,主要发现了XSS漏洞、文件上传漏洞等安全问题。 2. XSS漏洞分析 2.1 公告处XSS 漏洞位置 : /ssm/blog/controller/admin/BackNoticeController.java 中的 updateNotice 方法 /ssm/blog/controller/home/NoticeController.java 中的 getNoticeById 方法 漏洞原因 : 后台更新公告时未对用户输入进行XSS过滤 前台显示公告时直接从数据库取出数据并渲染,未进行任何转义处理 漏洞验证 : 在公告处插入 <script>alert(1)</script> 等XSS payload 前台访问公告页面时会直接执行脚本 修复建议 : 在数据存储前使用HTML实体编码 在数据输出时进行转义处理 2.2 评论处XSS 漏洞位置 : /ssm/blog/controller/home/CommentController.java 中的 insertComment 方法 漏洞原因 : 虽然使用了 HtmlUtil.escape 进行过滤,但存在绕过可能 过滤不彻底或过滤逻辑存在缺陷 漏洞验证 : 构造特殊payload绕过 HtmlUtil.escape 过滤 后台查看评论时会触发XSS 修复建议 : 使用更严格的XSS过滤库 实现双重过滤(输入过滤+输出转义) 设置Content Security Policy(CSP) 2.3 友链申请处XSS 漏洞位置 : /ssm/blog/controller/admin/BackLinkController.java 影响字段: 名称和联系方式字段 漏洞原因 : 完全未对用户输入进行XSS防护 后台查看和编辑友链申请时会触发XSS 漏洞验证 : 在友链申请的名称或联系方式字段插入XSS payload 后台管理界面查看时会触发弹窗 修复建议 : 对所有用户输入字段进行XSS过滤 对输出到页面的内容进行HTML编码 3. SQL注入审计 审计结果 : 未发现SQL注入漏洞 所有SQL查询均使用 #{} 预编译方式,无拼接SQL情况 4. 文件上传漏洞 漏洞位置 : /ssm/blog/controller/admin/UploadFileController.java 限制条件 : 允许后缀: .bmp .jpg .jpeg .png .gif .pdf .doc .zip .rar .gz 检查逻辑: 检查文件名中最后一个点之后的后缀 潜在风险 : 双扩展名绕过: test.jpg.php PDF文件可能包含恶意JavaScript(存储型XSS) 通过修改请求绕过前端限制 漏洞验证方法 : 修改文件名为 shell.jpg.php 上传 上传包含恶意脚本的PDF文件 修改请求包绕过前端限制 修复建议 : 使用白名单验证文件类型(不仅检查扩展名) 重命名上传文件 限制文件大小 对上传文件进行病毒扫描 设置文件不可执行权限 5. 审计方法论总结 5.1 审计流程 定位用户输入点(表单、URL参数等) 跟踪数据处理流程 检查是否有过滤/验证机制 验证过滤是否可绕过 5.2 重点关注 控制器(Controller)中的请求处理方法 服务层(Service)的业务逻辑 数据持久层(Mapper/DAO)的SQL处理 视图层(View)的数据渲染方式 5.3 常见漏洞模式 直接拼接用户输入到响应中 → XSS 未使用预编译的SQL → SQL注入 仅前端验证的文件上传 → 上传绕过 敏感操作无权限验证 → 越权 6. 环境搭建与复现建议 搭建本地测试环境 使用Burp Suite拦截修改请求 针对每个漏洞点构造不同payload测试 记录完整的漏洞复现步骤 7. 进阶审计技巧 使用静态代码分析工具辅助审计 关注框架的特定版本已知漏洞 检查自定义过滤器的实现缺陷 测试不同权限用户间的交互功能 验证所有API接口的安全性 8. 参考资源 OWASP Top 10 XSS Filter Evasion Cheat Sheet 文件上传漏洞利用技巧 MyBatis SQL注入防护指南 Spring Security最佳实践