ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Burpsuite越权漏洞实战与防御指南

Burpsuite越权漏洞实战与防御指南

1. 越权漏洞实战解析与Burpsuite靶场通关指南

越权漏洞(Broken Access Control)长期占据OWASP Top 10安全风险前三名,我在渗透测试项目中遇到的90%系统都存在这类问题。Burpsuite官方靶场作为业界公认的实战训练场,其越权漏洞场景设计极具代表性。下面分享我通关全部越权关卡的完整思路和避坑经验。

注意:所有测试仅限授权环境进行,实际操作前请确保获得合法授权

1.1 越权漏洞核心原理

越权漏洞本质是系统对用户权限校验不严格,导致低权限用户能执行高权限操作。主要分三类:

  • 水平越权:同权限用户间数据非法访问(如A用户查看B订单)
  • 垂直越权:低权限用户执行高权限功能(如普通用户删除管理员)
  • 上下文越权:流程步骤绕过(如未支付直接跳转收货)

Burpsuite靶场典型案例:

GET /api/user/profile?id=123 HTTP/1.1 Host: victim.com

仅靠前端隐藏按钮远远不够,后端必须对每次请求进行:

  • 身份认证(Authentication)
  • 权限校验(Authorization)
  • 业务规则检查(Business Logic)

1.2 靶场环境配置要点

我推荐使用Kali Linux原生环境运行Burpsuite Community 2023.6版本(最新版对靶场兼容性最佳)。关键配置步骤:

  1. 浏览器代理设置:
export http_proxy="http://127.0.0.1:8080" export https_proxy="http://127.0.0.1:8080"
  1. Burpsuite证书安装(解决HTTPS拦截问题):
  • 访问http://burp/cert
  • 下载cacert.der
  • 导入浏览器信任库
  1. 靶场访问技巧:
  • 使用隐身模式避免缓存干扰
  • 不同关卡建议新建浏览器会话
  • 遇到加载问题时可尝试清除localStorage

2. 水平越权实战突破

2.1 用户ID枚举漏洞

靶场第一关演示了典型的水平越权。通过修改URL中的用户ID参数,可以查看他人信息。我总结的自动化测试方案:

  1. 使用Intruder模块进行ID爆破:
GET /api/user?id=§1§ HTTP/1.1 Host: target

设置Payload为[1-1000]的数字序列

  1. 关键判断依据:
  • 响应码200但内容长度不同
  • 包含特定关键词(如email、address)
  • 响应时间差异(存在用户的数据查询更慢)

实测技巧:设置"Grep - Extract"捕获返回数据中的邮箱字段,可快速定位有效用户

2.2 参数混淆攻击

靶场第五关展示了更隐蔽的越权方式。请求中同时存在明文ID和加密token:

POST /update_profile HTTP/1.1 { "user_id": 1024, "token": "a1b2c3d4", "role": "user" }

突破方案:

  1. 先用自己的账号获取正常token
  2. 修改user_id保持token不变提交
  3. 观察系统是否仅校验token而忽略ID匹配

我编写的检测规则:

if response.json().get('is_admin') == True: log_vulnerability("IDOR via token reuse")

3. 垂直越权高阶技巧

3.1 Cookie权限提升

靶场第九关需要从user升级到admin。通过分析Cookie结构发现:

session=base64("user:1001:role=user") --> 修改为 session=base64("user:1001:role=admin")

实际操作中的注意事项:

  1. 先URL解码再base64解码
  2. 修改后要重新URL编码
  3. 某些系统会校验HMAC签名

3.2 JWT令牌篡改

现代Web应用常用JWT做认证。靶场第十二关的JWT结构:

{ "alg": "HS256", "typ": "JWT" } { "user": "guest", "exp": 1735689600 }

攻击步骤:

  1. 修改alg为"none"移除签名验证
  2. 直接修改user字段为"admin"
  3. 删除签名部分(保留末尾的.)

关键点:服务器必须配置拒绝none算法才能防御

4. 自动化越权检测方案

4.1 Burpsuite插件开发

我编写的自动检测插件逻辑:

void checkIDOR(IHttpRequestResponse request){ String url = helpers.analyzeRequest(request).getUrl(); if(url.contains("id=") || url.contains("user=")){ sendToIntruder(request); // 自动发起参数爆破 } }

4.2 自定义扫描规则

在Burp Scanner中添加以下检查项:

  1. 所有包含ID参数的请求
  2. 修改后是否返回相同数据结构
  3. 状态码为200但内容长度变化>15%

5. 防御方案深度解析

5.1 后端校验最佳实践

// Spring Security示例 @PreAuthorize("#userId == principal.id") public User getUser(Long userId){ // 方法实现 }

必须实现的防御措施:

  • 基于角色的访问控制(RBAC)
  • 属性基访问控制(ABAC)
  • 用户上下文绑定(如Spring Security的@PreAuthorize)

5.2 日志监控策略

建议记录的敏感操作日志:

CREATE TABLE security_log ( id BIGINT PRIMARY KEY, user_id BIGINT NOT NULL, action VARCHAR(50) NOT NULL, target_id BIGINT, ip_address VARCHAR(45), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) );

我在实际项目中总结的越权漏洞防护体系:

  1. 输入验证:所有ID参数必须符合[0-9]+正则
  2. 权限校验:每个业务操作前检查用户权限
  3. 输出过滤:敏感字段根据权限动态返回
  4. 日志审计:关键操作留痕且不可篡改
  5. 定期渗透:至少每季度进行越权专项测试

6. 靶场通关速查表

关卡漏洞类型关键参数突破技巧
1基础IDORid直接修改数字ID
3JSON越权user_id保持cookie修改body
5多参数依赖id+token仅修改id保留有效token
7文件名越权file路径遍历+文件名猜测
9Cookie提权sessionbase64解码修改后重编码
12JWT滥用Authorization改alg为none移除签名

7. 实战中的疑难问题解决

问题1:修改参数后返回403但页面依然变化
解决方案:系统可能采用前端校验,使用Burp Repeater直接重放请求

问题2:JWT修改后服务端报签名错误
排查步骤:

  1. 检查是否漏掉末尾的.
  2. 确认header和payload部分是否完整
  3. 尝试使用空签名(保留最后一个.)

问题3:靶场环境响应缓慢
优化方案:

  1. 关闭Burpsuite的被动扫描
  2. 在Project options中取消"Send to Scanner"
  3. 设置Proxy→Options里的线程数为1

8. 企业级安全加固建议

在金融行业项目中,我实施的增强方案包括:

  1. 动态权限令牌:每次请求生成临时操作令牌
  2. 行为指纹校验:结合IP、设备、操作习惯等多因素验证
  3. 敏感操作审批:关键功能需二级授权
  4. 实时风控拦截:异常请求自动触发验证码

某次渗透测试中的典型越权案例:

POST /transfer HTTP/1.1 { "from_account": "attacker", "to_account": "victim", "amount": 1000000 }

防御方案:强制校验from_account必须等于当前会话用户

9. 扩展训练资源推荐

  1. PortSwigger Academy的Access Control模块
  2. OWASP Juice Shop靶场的权限挑战
  3. Hack The Box的Access Control类机器
  4. 我整理的越权漏洞检查清单:
    • [ ] 所有包含ID的API接口
    • [ ] 任何接收用户输入的角色字段
    • [ ] 文件下载/查看功能
    • [ ] 业务流程状态参数

最后分享一个快速检测越权的curl命令:

curl -s -H "Cookie: session=attacker" "http://target/api/user/123" | jq .email
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进