Webgoat2023通关与java代码分析-A1. Broken Access Control
字数 2450 2025-08-11 08:36:35

WebGoat 2023通关与Java代码分析:A1. Broken Access Control 教学文档

0x00 前言

本教学文档基于WebGoat 2023版本的Broken Access Control(访问控制缺陷)章节,结合Java代码分析,详细讲解四种典型的访问控制漏洞及其利用方法。

一、Java Web基础知识与WebGoat项目介绍

1. Java Web开发技术演进

  1. Servlet+JSP:早期技术,前后端耦合度高
  2. SSH:Struts2 + Spring + Hibernate组合
  3. SSM/SSJ:Spring + SpringMVC + Mybatis/JPA组合
  4. Spring Boot:简化配置的快速开发框架

2. 各层功能与代码包结构

组件/包 功能描述
Tomcat Servlet容器,接收HTTP请求
Spring 类生命周期管理和依赖注入
Controller 接收请求并调用Service
Service 业务逻辑处理,调用DAO
DAO 数据库操作,SQL语句编写
Druid 数据库连接池
JDBC驱动 数据库厂商提供的连接驱动
AOP包 面向切面编程增强功能
Exception包 异常处理
Config包 框架配置

3. WebGoat项目结构

WebGoat是OWASP提供的Java Web安全靶场,每个漏洞类型对应一个独立的包,包含多个Java类实现漏洞场景。

二、Broken Access Control漏洞分析

1. Hijack a Session(会话劫持)

漏洞原理

通过预测或枚举其他用户的会话令牌(hijack_cookie)来劫持其会话。

利用步骤

  1. 使用Burp Suite观察hijack_cookie值的变化规律
  2. 发现cookie格式:5167209730199248178-1681981224573(数字序列-时间戳)
  3. 使用Burp Intruder枚举中间缺失的cookie值(如180)
  4. 使用枚举到的cookie值劫持其他用户会话

代码分析

  • HijackSessionAssignment:处理Web请求的Controller类
  • HijackSessionAuthenticationProvider:认证逻辑类
  • 关键逻辑:
    • 首次登录生成随机ID
    • 只有75%概率会成功认证(随机值>0.75)
    • 如果请求中直接带有有效hijack_cookie,则直接认证通过

2. Insecure Direct Object References(不安全的直接对象引用)

漏洞原理

通过修改请求参数(如用户ID)来访问未授权的资源。

利用步骤

  1. 使用tom/cat登录,查看自己的profile(ID为2342384)
  2. 发现RESTful风格的URL:/WebGoat/IDOR/profile
  3. 枚举用户ID(2342388对应Buffalo Bill)
  4. 使用PUT方法修改Bill的信息(颜色改为red,role改为更高权限)

RESTful风格说明

方法 用途 示例
GET 查询 /books/1
POST 修改 /books/1(部分更新)
PUT 新增/全更新 /books/1(全部字段)
DELETE 删除 /books/1

代码分析

  • 登录模块简单验证用户名密码
  • Profile查看模块直接根据ID查询,无权限验证
  • 修改操作接受PUT请求,无权限验证

3. Missing Function Level Access Control(功能级访问控制缺失)

漏洞原理

依赖前端隐藏功能模块,后端未进行权限验证。

利用步骤

  1. 检查页面HTML源码,发现隐藏的Admin模块
  2. 找到隐藏URL:/access-control/users
  3. 通过GET请求获取所有用户信息(包括Jerry)
  4. 添加当前会话用户到数据库,获取带admin盐的Jerry哈希

代码分析

  • MissingFunctionACUsers:处理用户查询请求
  • MissingFunctionACHiddenMenus:隐藏菜单项判断逻辑
  • 关键点:需要先添加当前用户到数据库才能获取带admin盐的哈希

4. Spoofing an Authentication Cookie(伪造认证Cookie)

漏洞原理

通过分析Cookie生成算法伪造有效Cookie。

利用步骤

  1. 登录webgoat账户,获取Cookie并Base64解码:7a75547854786373564574616f67626577
  2. 登录admin账户,获取Cookie并Base64解码:7a7554785478637356456e696d6461
  3. 分析发现Cookie是"zuTxTxcsVE" + 用户名倒写(如admin→nimda)
  4. 预测tom的Cookie应为:zuTxTxcsVEmot → 十六进制 → Base64

代码分析

  • SpoofCookieAssignment:处理Cookie生成和验证
  • Cookie生成算法:固定前缀 + 用户名倒写的十六进制编码

三、总结

  1. 会话管理:会话令牌应使用不可预测的随机值
  2. 对象引用:所有对象访问必须验证权限
  3. 功能控制:权限验证应在后端实现,不能依赖前端隐藏
  4. 认证Cookie:应使用加密签名防止伪造

通过WebGoat的实践和代码分析,可以深入理解访问控制漏洞的原理和防御方法。Java Web开发中应特别注意Spring Security等安全框架的正确配置。

WebGoat 2023通关与Java代码分析:A1. Broken Access Control 教学文档 0x00 前言 本教学文档基于WebGoat 2023版本的Broken Access Control(访问控制缺陷)章节,结合Java代码分析,详细讲解四种典型的访问控制漏洞及其利用方法。 一、Java Web基础知识与WebGoat项目介绍 1. Java Web开发技术演进 Servlet+JSP :早期技术,前后端耦合度高 SSH :Struts2 + Spring + Hibernate组合 SSM/SSJ :Spring + SpringMVC + Mybatis/JPA组合 Spring Boot :简化配置的快速开发框架 2. 各层功能与代码包结构 | 组件/包 | 功能描述 | |---------|---------| | Tomcat | Servlet容器,接收HTTP请求 | | Spring | 类生命周期管理和依赖注入 | | Controller | 接收请求并调用Service | | Service | 业务逻辑处理,调用DAO | | DAO | 数据库操作,SQL语句编写 | | Druid | 数据库连接池 | | JDBC驱动 | 数据库厂商提供的连接驱动 | | AOP包 | 面向切面编程增强功能 | | Exception包 | 异常处理 | | Config包 | 框架配置 | 3. WebGoat项目结构 WebGoat是OWASP提供的Java Web安全靶场,每个漏洞类型对应一个独立的包,包含多个Java类实现漏洞场景。 二、Broken Access Control漏洞分析 1. Hijack a Session(会话劫持) 漏洞原理 通过预测或枚举其他用户的会话令牌(hijack_ cookie)来劫持其会话。 利用步骤 使用Burp Suite观察hijack_ cookie值的变化规律 发现cookie格式: 5167209730199248178-1681981224573 (数字序列-时间戳) 使用Burp Intruder枚举中间缺失的cookie值(如180) 使用枚举到的cookie值劫持其他用户会话 代码分析 HijackSessionAssignment :处理Web请求的Controller类 HijackSessionAuthenticationProvider :认证逻辑类 关键逻辑: 首次登录生成随机ID 只有75%概率会成功认证(随机值>0.75) 如果请求中直接带有有效hijack_ cookie,则直接认证通过 2. Insecure Direct Object References(不安全的直接对象引用) 漏洞原理 通过修改请求参数(如用户ID)来访问未授权的资源。 利用步骤 使用tom/cat登录,查看自己的profile(ID为2342384) 发现RESTful风格的URL: /WebGoat/IDOR/profile 枚举用户ID(2342388对应Buffalo Bill) 使用PUT方法修改Bill的信息(颜色改为red,role改为更高权限) RESTful风格说明 | 方法 | 用途 | 示例 | |------|------|------| | GET | 查询 | /books/1 | | POST | 修改 | /books/1 (部分更新) | | PUT | 新增/全更新 | /books/1 (全部字段) | | DELETE | 删除 | /books/1 | 代码分析 登录模块简单验证用户名密码 Profile查看模块直接根据ID查询,无权限验证 修改操作接受PUT请求,无权限验证 3. Missing Function Level Access Control(功能级访问控制缺失) 漏洞原理 依赖前端隐藏功能模块,后端未进行权限验证。 利用步骤 检查页面HTML源码,发现隐藏的Admin模块 找到隐藏URL: /access-control/users 通过GET请求获取所有用户信息(包括Jerry) 添加当前会话用户到数据库,获取带admin盐的Jerry哈希 代码分析 MissingFunctionACUsers :处理用户查询请求 MissingFunctionACHiddenMenus :隐藏菜单项判断逻辑 关键点:需要先添加当前用户到数据库才能获取带admin盐的哈希 4. Spoofing an Authentication Cookie(伪造认证Cookie) 漏洞原理 通过分析Cookie生成算法伪造有效Cookie。 利用步骤 登录webgoat账户,获取Cookie并Base64解码: 7a75547854786373564574616f67626577 登录admin账户,获取Cookie并Base64解码: 7a7554785478637356456e696d6461 分析发现Cookie是"zuTxTxcsVE" + 用户名倒写(如admin→nimda) 预测tom的Cookie应为: zuTxTxcsVEmot → 十六进制 → Base64 代码分析 SpoofCookieAssignment :处理Cookie生成和验证 Cookie生成算法:固定前缀 + 用户名倒写的十六进制编码 三、总结 会话管理 :会话令牌应使用不可预测的随机值 对象引用 :所有对象访问必须验证权限 功能控制 :权限验证应在后端实现,不能依赖前端隐藏 认证Cookie :应使用加密签名防止伪造 通过WebGoat的实践和代码分析,可以深入理解访问控制漏洞的原理和防御方法。Java Web开发中应特别注意Spring Security等安全框架的正确配置。