JAVA代审-admintwo
字数 1510 2025-08-30 06:50:36
Java代码审计实战:admintwo项目安全漏洞分析
项目介绍
admintwo是一个基于Java开发的Web项目,采用Struts2+Spring+Spring JDBC框架组合。其中Struts2仅作为转发功能使用,可以方便地修改为Spring MVC版本。
环境搭建
环境要求
- JDK 1.8.0_202
- Apache Maven 3.8.8
- Tomcat 8.5.0
- MySQL 5.7.26
部署步骤
- 从Gitee克隆项目:
https://gitee.com/xujiangfei/admintwo - 使用IDEA打开项目
- 修改数据库配置文件
src/jdbc.properties,更新连接账号密码 - 创建对应数据库并导入SQL文件:
src/admintwo.sqlsrc/练习.sql- 注意使用UTF-8编码(utf8 utf8-bin)
- 配置项目结构:
- 模块配置
- 添加Tomcat依赖包到库中
- 配置工件
- 配置本地Tomcat并启动项目
代码审计发现的安全漏洞
1. 登录逻辑问题
漏洞描述:
登录逻辑通过用户传入的email查询数据库获取用户信息,然后检查用户密码的MD5值是否匹配,最后将用户信息更新到Session中。
风险点:
- 缺乏对Session的充分检查
- 直接使用用户输入的email进行查询,可能存在SQL注入风险
2. 未授权用户信息遍历
漏洞位置:/user/home接口
漏洞详情:
- 该接口未校验查询的用户id与session中的用户email是否匹配
- 完全未检查session,导致可以未授权遍历网站用户信息
- 通过修改id参数可以获取其他用户信息
测试方法:
GET /user/home?id=目标用户ID
3. 水平越权
漏洞位置:/user/updateSet接口
漏洞详情:
- 以email为条件更新数据
- 未校验session中的email与传入的email是否一致
- 结合未授权用户信息遍历漏洞,可形成攻击链
测试方法:
POST /user/updateSet
参数: email=目标用户email&其他可修改字段=新值
4. 任意用户登录
漏洞位置:/user/updateSet接口
漏洞详情:
- 修改用户信息后,会再次执行登录逻辑
- 通过修改用户的Email获取用户信息并更新Session
- 导致攻击者可以获取任意用户身份
5. XSS漏洞
漏洞位置:源码库→分享源码→标题字段
漏洞详情:
- 未对用户输入的标题进行过滤或实体编码
- 发布恶意内容后,访问首页源码库即可触发XSS
6. CSRF漏洞
漏洞详情:
- 项目代码中未发现预防CSRF的组件或代码
- 在
src/com/qq/connect/demo/AfterLoginRedirectServlet.java中有疑似预防代码,但仅记录日志,未正确处理 - 全站基本存在CSRF风险
测试方法:
- 保存信息时抓包
- 修改用户名等参数
- 生成CSRF PoC并诱导管理员点击
安全建议
-
认证与授权:
- 对所有敏感操作添加Session校验
- 实现严格的权限检查,确保用户只能操作自己的数据
- 对email等关键字段进行所有权验证
-
输入验证:
- 对所有用户输入进行严格过滤和编码
- 特别是标题等显示在页面上的内容,应进行HTML实体编码
-
CSRF防护:
- 添加CSRF Token机制
- 对关键操作使用POST请求
- 实现同源策略检查
-
会话管理:
- 确保登录后生成新的Session ID
- 实现会话超时机制
- 对敏感操作要求重新认证
-
安全开发:
- 采用安全的框架功能而非自行实现安全控制
- 进行代码审查时重点关注权限检查逻辑
- 实施最小权限原则
通过修复这些漏洞,可以显著提高admintwo项目的安全性,防止未授权访问、数据泄露和恶意操作等安全风险。