快速审计记录(五)--某blog系统
字数 1282 2025-08-23 18:31:09
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 关键拦截器
excludePathPatternsloginAuthenticator:- 必须有user的session才能返回true
installInterceptor:- 必须已经注册
6.3 绕过尝试
- 尝试通过
/install/../admin/进行未授权调用admin接口 - 结果:直接解析到
loginAuthenticator,绕过失败
7. 总结与教学要点
7.1 审计方法论
- 从Mapper文件入手查找SQL注入
- 关注用户注册/登录逻辑
- 文件上传/删除功能审计
- 组件版本安全分析
- 权限系统绕过尝试
7.2 关键安全实践
- 使用
#{}而非${}防止SQL注入 - 用户注册逻辑应包含重复注册检查
- 文件上传应限制文件类型和路径
- 权限系统应防止路径遍历绕过
7.3 修复建议
- 修复用户注册逻辑错误
- 加强文件上传限制
- 更新Fastjson到最新安全版本
- 完善权限校验机制