Java代码审计项目--某在线教育开源系统
字数 1937 2025-08-11 17:40:10
Java代码审计教学:某在线教育开源系统安全分析
1. 环境部署与准备
1.1 系统搭建要点
- 数据库配置:建议使用MySQL 5.5.*版本,高版本需要额外配置
- 项目路径:使用
http://IP:port形式,避免额外路径配置导致资源加载问题 - 依赖管理:通过pom.xml进行Maven依赖包添加
- 运行环境:使用Tomcat7插件运行项目
1.2 审计前准备
- 反编译JAR包:必须反编译
\src\main\webapp\WEB-INF\lib\目录下的jar包 - IDE配置:使用IDEA进行代码审计时,注意其默认不会搜索jar包中的代码
2. 项目架构分析
2.1 技术栈
- SSM框架:Spring Framework + Spring MVC + MyBatis
- 关键配置文件:
pom.xml:组件及版本信息web.xml:Filter、Listener、Servlet配置applicationContext.xml:Spring默认配置spring-mvc.xml:注解启动、静态资源映射、视图解析等
2.2 组件安全分析
- Log4j 1.2.17:
- 存在CVE-2019-17571反序列化漏洞
- 本项目未使用漏洞相关类(SocketNode),实际不受影响
- Druid 1.0.1:
- 检查未授权接口(测试未发现)
- MyBatis 3.2.7:
- 存在CVE-2020-26945反序列化漏洞
- 本项目未开启二级缓存功能,实际不受影响
2.3 拦截器配置
- 3个拦截器分别处理:
- 前台用户登录与权限
- 后台用户登录与权限
- 网站配置管理处的用户权限
3. 漏洞分析与复现
3.1 验证码重复利用漏洞
- 位置:前台找回密码功能
- 漏洞原理:
- 校验成功后进入邮箱校验阶段
- 若邮箱未注册直接返回结果,但未删除服务端旧验证码
- 可重复使用验证码爆破已注册邮箱
- 影响:可配合登录处进行密码爆破
3.2 存储型XSS漏洞
- 位置:问答功能下的"我要提问"功能
- 漏洞原理:
- 标题字段未做过滤直接保存到数据库
- 输出时标题直接拼接而未使用
<c:out>标签防护 - 内容字段虽然同样存储,但输出时使用了
<c:out>标签
- 影响:攻击者可注入恶意脚本
- 修复建议:
- 对所有用户输入进行HTML实体编码
- 输出时统一使用
<c:out>标签
3.3 SQL注入漏洞
- 审计方法:在*Mapper.xml文件中搜索
${(MyBatis中表示直接拼接SQL) - 典型位置:后台管理员用户删除文章功能
- 漏洞原理:使用
${}直接拼接用户输入到SQL语句 - 影响:攻击者可构造恶意SQL语句
- 修复建议:
- 使用
#{}预编译方式替代${} - 对必要使用
${}的情况进行严格过滤
- 使用
3.4 横向越权漏洞
- 位置:用户修改个人资料功能
- 漏洞原理:
- 未验证当前用户身份
- 直接根据传入的user.userId参数更新数据库
- 更新后自动重新登录
- 影响:攻击者可修改其他用户信息并登录其账户
- 修复建议:
- 校验当前会话用户ID与修改目标ID是否一致
- 服务端从会话获取用户ID而非依赖客户端传入
3.5 CSRF漏洞
- 位置:后台管理员创建用户功能
- 漏洞原理:
- 未校验Referer字段
- 无token机制
- 影响:结合XSS漏洞可构造恶意代码创建管理员账户
- 修复建议:
- 添加CSRF Token机制
- 校验Referer头
3.6 文件上传漏洞
- 位置:前台用户上传头像功能
- 漏洞原理:
- 仅过滤.jsp文件
- 可上传.jspx文件(Tomcat默认解析)
- 可上传.html文件造成XSS
- 利用方法:
- 使用哥斯拉工具生成jspx木马
- 上传后可直接连接获取shell
- 修复建议:
- 白名单方式限制上传文件类型
- 文件内容校验
- 上传目录设置为不可执行
4. 审计方法论总结
-
组件审计:
- 检查pom.xml中组件版本
- 对照已知漏洞数据库验证
-
输入输出审计:
- 追踪用户输入从接收到存储的全过程
- 检查输出时的编码处理
-
权限审计:
- 验证所有涉及用户身份的操作是否有权限校验
- 检查会话管理机制
-
配置审计:
- 检查web.xml等配置文件的安全设置
- 验证拦截器、过滤器的有效性
-
框架特性审计:
- MyBatis中检查
${}使用情况 - Spring中检查CSRF防护配置
- MyBatis中检查
5. 工具推荐
-
静态分析工具:
- FindBugs/SpotBugs
- SonarQube
- Fortify
-
动态测试工具:
- Burp Suite
- OWASP ZAP
- sqlmap
-
辅助工具:
- JD-GUI(反编译)
- 哥斯拉(webshell管理)
- ysoserial(反序列化利用)