4. 拦截与转发核心操作

Burp Proxy 的 Intercept 是整条代理链路上唯一一个“人工闸门”。它默认关闭,一旦打开,所有经过 8080 端口的 HTTP/HTTPS 流量都会在 Burp 内部被挂起,等待你做出放行、丢弃或修改的决定。理解这个闸门的开关时机、断点位置和放行条件,是后续所有手工测试的基础。

一、Intercept 开关的三种状态与策略

Intercept 按钮在界面上只有“亮/灭”两种视觉状态,但实际存在三种语义:关闭(流量直接透传,不进入队列)、开启且队列为空(新请求到达即挂起)、开启且队列有积压(新请求继续排队,界面显示队列计数)。很多初学者误以为“关掉 Intercept 就等于停止代理”,其实代理仍在工作,只是不再暂停流量。

开关策略上,推荐按测试阶段切换:浏览阶段关闭,让站点地图快速填充;定位到目标接口后开启,只对关心的请求做精细控制。如果全程开启,浏览器加载一个含几十个静态资源的页面就会产生大量挂起请求,反而拖慢定位。一个实用技巧是配合 Target Scope:在 Proxy → Options → Intercept Client Requests 中勾选“仅拦截范围内请求”,这样即使 Intercept 常开,范围外的 CDN、统计脚本也会自动放行。

二、请求断点与响应断点

Burp 的断点分为两个方向:请求断点(浏览器 → 服务器方向,在请求发出前挂起)和响应断点(服务器 → 浏览器方向,在响应返回浏览器前挂起)。默认只开请求断点,响应断点需要单独勾选 Intercept is on 旁的响应拦截开关,或在 Proxy → Options → Intercept Server Responses 中配置。

两者的用途不同。请求断点用于改包:改参数、改 Cookie、改请求头、改请求体,然后 Forward 发出。响应断点用于看服务端返回的原始内容,尤其是当浏览器会执行 JS 跳转、自动重定向、或前端框架会二次渲染时,直接看响应体往往能看到被前端“藏起来”的字段。例如测试越权时,响应里可能返回了完整用户列表,但前端只渲染了当前用户,此时响应断点就是关键。

响应断点开启后,浏览器会一直转圈等待,直到你在 Burp 中 Forward。如果忘记放行,页面会表现为“卡死”,这是常见误判点。

三、Forward、Drop 与 Action 菜单

挂起的请求在 Intercept 面板中提供几个核心操作:

  • Forward:放行当前请求,继续后续流程。若同时开了响应断点,请求发出后会在响应阶段再次挂起。
  • Drop:丢弃当前请求,浏览器收不到任何响应,通常表现为连接被重置或请求失败。用于阻止某个危险操作真正到达服务器。
  • Action:对当前请求/响应做进一步处理,常见子项包括 Send to Repeater、Send to Intruder、Send to Comparer、Do intercept → Response to this request、Change request method、Change body encoding 等。

其中 Do intercept → Response to this request 非常实用:它只对“当前这一条请求”的响应开启断点,而不影响全局响应拦截设置。这样可以在不打开全局响应断点的前提下,单独查看某条请求的返回内容。

四、拦截规则匹配

Intercept 的规则匹配集中在 Proxy → Options → Intercept Client Requests 和 Intercept Server Responses。规则以布尔表达式组合,常用字段包括:

匹配维度示例条件典型用途
Host / IPHost 包含 example.com只拦目标域,放过第三方
URL 路径URL 匹配 /api/.*只拦接口,不拦静态资源
方法Method 等于 POST只拦写操作
参数名Parameter name 包含 token定位鉴权相关请求
响应状态码Status code 等于 302只拦重定向响应
MIME 类型MIME type 包含 json只拦 JSON 响应

规则之间是“与”关系,多个条件同时满足才拦截。配置时建议先用较宽的条件观察命中情况,再逐步收窄,避免规则过严导致目标请求被漏掉。

五、批量放行与自动化放行条件

当队列中积压大量请求时,逐条 Forward 效率很低。Burp 提供两种批量处理方式:

  1. Intercept 面板的 Forward 下拉:可选择 Forward all 一次性放行队列中所有请求,或 Drop all 全部丢弃。
  2. 自动放行规则:在 Proxy → Options → Intercept Client Requests 中,把“Intercept enabled”与规则结合,让不满足条件的请求自动透传。更彻底的方式是使用 Proxy → Options → Match and Replace 或 Burp 的 Intercept 自动放行选项,让匹配特定条件的请求无需人工干预。

自动化放行条件的典型配置思路是:只对目标接口开启拦截,其余全部自动放行。例如规则设为“Host 包含 target.com 且 URL 包含 /api/”,则所有非目标请求自动通过,队列中只会出现你真正关心的接口。这样既保留了人工控制点,又避免了静态资源干扰。

Burp Proxy Intercept 拦截与转发决策路径 浏览器 请求发出 Burp Proxy Intercept 闸门 规则匹配引擎 规则命中? Intercept 开启 否 自动放行 不进入队列,直接透传 是 挂起等待人工决策 请求断点 / 响应断点 队列计数 +1 Action 菜单 Forward 放行 Drop 丢弃 Send to Repeater Do intercept 目标服务器 接收请求 响应返回(若开启响应断点则再次挂起) 自动放行 人工拦截 Forward 放行

最后需要强调一个工程习惯:拦截规则和自动放行条件应当随测试目标变化而调整,而不是一次配置后长期不变。在测试初期用宽规则快速摸清接口分布,进入漏洞验证阶段后收窄到具体接口,测试结束后关闭 Intercept 并清理规则,避免影响后续正常浏览。把“开关状态、断点方向、规则条件、放行方式”四者当成一组联动参数来管理,才能让 Proxy 既可控又不拖慢节奏。