代码审计-Echo2.3
字数 2355 2025-08-29 22:41:10
Echo2.3 开源社区系统代码审计报告
1. 项目概述
Echo 是一个基于 SpringBoot 的开源社区系统,主要技术栈包括:
- SpringBoot + MyBatis
- MySQL + Redis
- Kafka + Elasticsearch
- Spring Security
主要功能模块:
- 帖子、评论、私信
- 系统通知、点赞、关注
- 搜索功能
- 用户设置
- 数据统计
2. 环境搭建
2.1 基础组件安装
- Redis:安装简单,使用默认配置即可
- Zookeeper + Kafka:
- Kafka 内置了适配的 Zookeeper,无需单独安装
- 参考安装教程:Kafka安装指南
- Elasticsearch:
- 参考安装教程:Elasticsearch安装指南
- 额外配置:在
elasticsearch.yml中关闭机器学习功能
2.2 项目配置
- 修改
src/main/resources/application-develop.properties文件 - 创建数据库并导入提供的 SQL 文件
- 启动 SpringBoot 应用
3. 安全审计发现
3.1 SQL 注入防护
审计结论:项目不存在 SQL 注入漏洞
- 所有 SQL 查询都使用预编译处理
- 使用
#{}进行参数绑定
3.2 文件上传漏洞
3.2.1 任意文件上传
位置:DiscussPostController.java 中的 uploadMdPic 方法
漏洞详情:
- 未对上传文件的内容和后缀名进行校验
- 允许上传任意类型文件
- 理论上需要登录权限,但可配合鉴权绕过实现未授权上传
利用方法:
<!-- 示例上传表单 -->
<form action="http://target.com/uploadMdPic" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
限制:
- 上传后访问返回 404 错误
- 文件实际已存储到配置的目录中(通过
application-develop.properties配置)
3.2.2 图片加载 XSS 尝试
位置:UserController.java 中的头像加载功能
尝试结果:
- 虽然可以上传 HTML 文件
- 但通过 `` 标签加载时,浏览器会将 HTML 当作破损图片处理
- 无法成功触发 XSS
3.3 鉴权绕过漏洞
位置:LoginTicketInterceptor.java 中的 preHandle 方法
漏洞详情:
- 实现了
HandlerInterceptor接口 preHandle方法在每次请求时执行- 仅对
ticket有值时进行鉴权 - 当
ticket为 null 时直接返回 true,导致鉴权绕过
拦截范围:
- 在
WebMvcConfig.java中配置 - 拦截除静态资源外的所有路径
3.4 未授权信息泄露
3.4.1 用户资料遍历
位置:UserController.java 中的 getProfilePage 方法
漏洞详情:
- 路由:
@GetMapping("/profile/{userId}") - 通过 userId 参数获取用户资料
- 配合鉴权绕过可遍历用户信息
利用示例:
GET /profile/1
GET /profile/2
...
3.4.2 用户帖子遍历
位置:UserController.java 中的 getMyDiscussPosts 方法
漏洞详情:
- 通过 userId 获取用户发布的帖子
- 可遍历所有用户帖子
3.4.3 用户评论遍历
位置:UserController.java 中的 getMyComments 方法
漏洞详情:
- 通过 userId 获取用户评论/回复
- 可遍历所有用户评论
3.5 权限控制问题
位置:DiscussPostController.java 中的 setDelete 方法
问题详情:
- 删除帖子功能要求 admin 权限
- 权限定义在
SecurityConfig.java的configure方法中 - 普通用户无权限访问
权限确定方式:
- 在
UserService.java的getAuthorities方法中定义 - 由于鉴权绕过,攻击者连普通用户权限都没有
4. 审计方法论
4.1 审计重点
-
Controller 目录:
- 包含所有业务逻辑入口
- 重点关注用户输入处理和权限检查
-
Interceptor 目录:
- 处理请求拦截和鉴权
- 常见鉴权绕过漏洞位置
-
Security 配置:
- 检查
SecurityConfig.java - 验证权限分配是否合理
- 检查
4.2 审计技巧
-
全局搜索关键词:
admin、role、permission等权限相关词upload、file等文件操作相关词sql、query等数据库操作相关词
-
关注注解:
@GetMapping、@PostMapping等路由定义@PreAuthorize等权限注解
-
检查输入处理:
- 参数是否经过校验
- 是否使用预编译 SQL
5. 修复建议
-
文件上传漏洞:
- 添加文件类型白名单校验
- 检查文件内容有效性
- 设置文件存储隔离
-
鉴权绕过:
- 修改
preHandle方法,对无 ticket 请求进行拒绝 - 添加默认权限检查
- 修改
-
信息泄露:
- 添加权限检查,确保用户只能访问自己的数据
- 对敏感信息进行脱敏处理
-
权限控制:
- 完善权限体系
- 确保前端与后端权限检查一致
6. 总结
本次审计发现了 Echo2.3 系统中的多个安全问题,主要包括:
- 未授权文件上传
- 鉴权绕过漏洞
- 信息泄露漏洞
- 权限控制不严
建议开发团队按照修复建议进行改进,特别是在文件上传和权限控制方面需要重点加强。对于 Java 项目审计,重点关注 Controller 和 Interceptor 是关键切入点。