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

部署步骤

  1. 从Gitee克隆项目:https://gitee.com/xujiangfei/admintwo
  2. 使用IDEA打开项目
  3. 修改数据库配置文件src/jdbc.properties,更新连接账号密码
  4. 创建对应数据库并导入SQL文件:
    • src/admintwo.sql
    • src/练习.sql
    • 注意使用UTF-8编码(utf8 utf8-bin)
  5. 配置项目结构:
    • 模块配置
    • 添加Tomcat依赖包到库中
    • 配置工件
  6. 配置本地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风险

测试方法

  1. 保存信息时抓包
  2. 修改用户名等参数
  3. 生成CSRF PoC并诱导管理员点击

安全建议

  1. 认证与授权

    • 对所有敏感操作添加Session校验
    • 实现严格的权限检查,确保用户只能操作自己的数据
    • 对email等关键字段进行所有权验证
  2. 输入验证

    • 对所有用户输入进行严格过滤和编码
    • 特别是标题等显示在页面上的内容,应进行HTML实体编码
  3. CSRF防护

    • 添加CSRF Token机制
    • 对关键操作使用POST请求
    • 实现同源策略检查
  4. 会话管理

    • 确保登录后生成新的Session ID
    • 实现会话超时机制
    • 对敏感操作要求重新认证
  5. 安全开发

    • 采用安全的框架功能而非自行实现安全控制
    • 进行代码审查时重点关注权限检查逻辑
    • 实施最小权限原则

通过修复这些漏洞,可以显著提高admintwo项目的安全性,防止未授权访问、数据泄露和恶意操作等安全风险。

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.sql src/练习.sql 注意使用UTF-8编码(utf8 utf8-bin) 配置项目结构: 模块配置 添加Tomcat依赖包到库中 配置工件 配置本地Tomcat并启动项目 代码审计发现的安全漏洞 1. 登录逻辑问题 漏洞描述 : 登录逻辑通过用户传入的email查询数据库获取用户信息,然后检查用户密码的MD5值是否匹配,最后将用户信息更新到Session中。 风险点 : 缺乏对Session的充分检查 直接使用用户输入的email进行查询,可能存在SQL注入风险 2. 未授权用户信息遍历 漏洞位置 : /user/home 接口 漏洞详情 : 该接口未校验查询的用户id与session中的用户email是否匹配 完全未检查session,导致可以未授权遍历网站用户信息 通过修改id参数可以获取其他用户信息 测试方法 : 3. 水平越权 漏洞位置 : /user/updateSet 接口 漏洞详情 : 以email为条件更新数据 未校验session中的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项目的安全性,防止未授权访问、数据泄露和恶意操作等安全风险。