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开发技术演进
- 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等安全框架的正确配置。