SpringBootCms代码审计过程记录
字数 1519 2025-08-24 16:48:15
SpringBootCMS代码审计教学文档
1. 环境搭建
-
使用git克隆项目:
git clone [项目地址] -
使用IntelliJ IDEA打开项目
-
修改数据库配置:
- 修改
resources/application.properties中的数据库配置为自己的配置
- 修改
-
初始化数据库:
- 运行
springbootcms.sql文件初始化数据库
- 运行
-
启动应用:
- 运行
App类启动应用
- 运行
2. 项目依赖分析
查看pom.xml文件发现关键组件:
- Fastjson > 1.2.78(存在已知漏洞)
- MyBatis > 3.5.1
- Ehcache > 2.0.4
3. 过滤器分析
系统存在三个过滤器:
-
PageCacheFilter- 作用域:/*- 主要用于页面缓存
-
PermissionFilter- 作用域:/admin/*- 权限相关过滤器
- 使用
startsWith判断请求URL是否以adminExcludes中的内容开头 - 可绕过:使用
admin/login/../../admin/xxx路径可绕过过滤
-
UrlFilter- 作用域:/*
4. 漏洞分析
4.1 前台任意文件下载
路由:/common/file/download
参数:fileKey
漏洞原因:
- 未对
fileKey参数做任何过滤 - 直接拼接路径导致任意文件读取
验证:
/common/file/download?fileKey=../../pom.xml
4.2 前台存储型XSS
路由:/guestbook/save
漏洞原因:
- 获取用户输入后未做任何过滤
- 直接写入数据库
- 管理员查看留言时触发XSS
POC:
<script>
var xhr = new XMLHttpRequest();
xhr.open('POST', '/admin/admin/save');
var f = new FormData();
f.append('username', 'test');
f.append('password', '123');
f.append('rePassword', '123');
f.append('name', '');
f.append('roleIds', '1');
xhr.send(f);
</script>
利用场景:
- 通过XSS添加管理员账户
- 留言有长度限制,需精简POC
4.3 多处越权漏洞
漏洞原因:
- 系统未做权限校验
PermissionFilter仅判断是否为演示账户权限
示例:
- 重置密码功能未校验权限
- 可直接修改任意用户密码
验证:
重置id=1的admin账户密码
4.4 目录遍历
路由:/admin/template
参数:directory
漏洞原因:
- 调用
TemplateUtils.getTemplateFiles方法 - 未对
directory参数做过滤 - 直接拼接路径并判断文件夹是否存在
验证:
/admin/template?directory=default/java/com/cms/config
4.5 任意文件查看与代码写入
漏洞原因:
- 未对文件路径做过滤
- 可结合目录遍历获取文件名后拼接路径
- 可修改程序代码获取服务器权限
利用步骤:
- 通过目录遍历获取文件名
- 拼接路径访问文件
- 修改文件写入自定义代码
- 等待服务器重启生效
4.6 任意文件删除(两种方式)
方式一
路由:/admin/template/delete
参数:
fileNamedirectory
漏洞原因:
- 未对参数做限制过滤
- 直接拼接路径删除文件
验证:
/admin/template/delete?fileName=2.txt&directory=../../Desktop/
方式二
路由:/admin/database/delete
漏洞原因:
- 直接拼接路径进入删除逻辑
验证:
/admin/database/delete?fileName=../../Desktop/2.txt
5. 总结与防御建议
发现漏洞总结
- 任意文件下载
- 存储型XSS
- 权限校验缺失
- 目录遍历
- 任意文件读写
- 任意文件删除
防御建议
-
文件操作:
- 对用户输入的文件路径进行严格校验
- 限制文件操作目录范围
- 使用白名单校验文件类型
-
XSS防御:
- 对所有用户输入进行HTML实体编码
- 设置CSP策略
- 对输出到页面的内容进行转义
-
权限控制:
- 实现完善的权限校验机制
- 对敏感操作进行二次验证
- 遵循最小权限原则
-
路径处理:
- 规范化路径处理
- 防止路径穿越攻击
- 使用安全的文件操作API
-
CSRF防御:
- 添加CSRF Token
- 检查Referer头
- 对敏感操作使用POST请求
该CMS系统适合用于代码审计练习,包含多种常见漏洞类型,是学习Web安全的良好案例。