对某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方法
漏洞原因:
- 后台更新公告时未对用户输入进行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最佳实践