模块:Using Web Proxies(15 小节)
核心工具:Burp Suite、OWASP ZAP
说明:本文按实际工作流重新归纳课程内容,不是网页逐句搬运。所有拦截、修改、模糊测试和扫描操作仅用于获得明确授权的目标。

0. 学习路线
安装并启动代理
→ 配置浏览器与 CA 证书
→ 捕获 HTTP/HTTPS 流量
→ 拦截并修改请求/响应
→ Repeater 手工复测
→ Decoder 处理编码
→ 让 curl / sqlmap 等工具经过代理
→ Intruder / Fuzzer 自动化测试
→ 被动/主动扫描
→ 安装扩展并完成综合评估
本章前置知识
- HTTP 请求与响应结构。
- URL、参数、Cookie、Header 和状态码。
- Web 应用基础。
- 能区分浏览器问题、TLS 问题、代理问题和目标服务器问题。
1. Intro to Web Proxies
Web 代理位于客户端与后端服务器之间,捕获双方的 HTTP/HTTPS 流量,并允许测试人员查看、暂停、修改和重放请求。它与 Wireshark 的区别在于:Web 代理专注应用层 Web 流量,并提供可编辑、可重复发送的请求工作流。
1.1 典型用途
- 查看应用实际发送的请求和服务器响应。
- 修改参数、Header、Cookie 和请求体。
- 重放请求并比较不同输入的结果。
- 爬取和映射站点。
- 进行模糊测试与漏洞扫描。
- 分析移动端、桌面端或其他命令行工具的 Web 流量。
- 测试隐藏、禁用或仅前端限制的功能。
1.2 Burp 与 ZAP 对比
维度 Burp Suite Community OWASP ZAP 定位 成熟的商业 Web 测试平台免费版 免费开源 Web 代理 内置浏览器 有 有 手工测试 很强 很强 Intruder/Fuzzer 免费版 Intruder 有速度限制 Fuzzer 无商业版限速 主动扫描 Pro/Enterprise 功能 免费提供 扩展 BApp Store,部分扩展受版本限制 Marketplace Add-ons
课程主要功能在两者中都有对应实现,学习重点是理解工作流,而不是只记某个按钮位置。
2. Setting Up
2.1 首次使用的运行条件
- Pwnbox/常见渗透测试发行版通常已预装 Burp 和 ZAP。
- 本机安装时需要相应 Java 运行环境或官方安装包。
- 默认代理监听通常使用回环地址,避免无意向局域网开放。
- 测试 HTTPS 时需要安装代理生成的 CA 证书。
2.2 启动 Burp Suite
burpsuite
首次启动常用流程:
- 选择 Temporary project(Community 通常使用临时项目)。
- 选择 Use Burp defaults。
- 点击 Start Burp。
- 检查 Proxy → Proxy settings/listeners 是否监听 127.0.0.1:8080。
2.3 启动 ZAP
zaproxy
首次启动可选择是否持久保存会话。临时练习无需保存;正式测试若需后续复盘,应保存到受控位置。
2.4 优先使用内置浏览器
Burp 与 ZAP 的内置浏览器已经配置代理和证书,适合快速开始:
- Burp:Proxy → Intercept → Open Browser。
- ZAP:Quick Start → Manual Explore → Launch Browser。
使用外部浏览器时再手动设置代理和 CA。
3. Proxy Setup
3.1 浏览器代理
假设代理监听:
HTTP Proxy: 127.0.0.1
Port: 8080
HTTPS: 使用相同代理
Firefox 可在网络设置中手动配置,也可使用 FoxyProxy 保存多个代理配置并快速切换。
3.2 安装 Burp CA 证书
外部浏览器通过 Burp 访问 HTTPS 前:
- 开启浏览器代理。
- 访问 <http://burp。>
- 下载 CA Certificate。
- 在浏览器证书设置中导入,并信任其用于识别网站。
ZAP 可在设置/网络证书位置生成或保存 Root CA,再导入浏览器。
代理 CA 证书等同于允许该代理解密浏览器 HTTPS 流量。只能导入自己控制的 Burp/ZAP 证书,测试完成后可从日常浏览器配置中移除。
3.3 Scope 与流量过滤
真实站点会产生大量第三方请求。应把测试目标加入 Scope,并选择只显示范围内流量:
- Burp:Target → Site map / Scope。
- ZAP:Sites → Include in Context。
范围控制既减少噪声,也避免误扫未授权域名。
3.4 常见排错
- 页面完全打不开:确认代理程序已启动且监听地址、端口一致。
- HTTP 正常而 HTTPS 报错:检查 CA 是否导入并被信任。
- 只有部分请求看不到:检查浏览器是否绕过本地地址、应用是否使用系统代理。
- 请求一直等待:查看 Intercept 是否开启并有请求尚未 Forward。
- HSTS/证书固定应用失败:普通 CA 安装可能不足,属于应用额外保护范围。
4. Intercepting Web Requests
4.1 Burp 工作流
Proxy → Intercept → Intercept is on
浏览器发出请求
检查/修改请求
Forward:发送
Drop:丢弃
4.2 ZAP 工作流
使用顶部断点按钮启用拦截。捕获后可编辑请求,再选择继续、丢弃或逐步执行。
4.3 请求中应重点观察
POST /login HTTP/1.1
Host: target.example
Cookie: session=...
Content-Type: application/x-www-form-urlencoded
username=user&password=pass
- 请求方法和路径。
- Host、Origin、Referer、Content-Type。
- Cookie、Authorization 等认证信息。
- URL 参数、表单字段和 JSON/XML 请求体。
- CSRF Token 和前端生成的隐藏字段。
4.4 修改请求的判断原则
每次只修改一个变量,记录原始响应,再比较状态码、长度、正文和响应时间。多个参数同时修改会使结果难以归因。
5. Intercepting Responses
默认情况下,代理通常只拦截请求。测试隐藏或前端限制功能时,需要设置响应拦截。
5.1 Burp
Proxy settings 中配置 Intercept server responses,并限制到 Scope 或匹配规则,避免所有静态资源都被暂停。
5.2 ZAP
设置响应断点,或针对特定 URL/规则设置 Break。
5.3 典型测试
服务器可能返回:
<button disabled>Admin</button>
<input type="hidden" name="role" value="user">
删除 disabled、修改隐藏值,只能证明前端界面可被操纵。若后端仍正确校验权限,就不是越权漏洞;必须继续发送实际操作请求验证服务器端控制。
6. Automatic Modification
频繁重复相同修改时,应使用 Match and Replace/替换规则自动处理。
6.1 Burp Match and Replace
Proxy settings → Match and Replace,可针对:
- 请求 Header。
- 请求 Body。
- 响应 Header。
- 响应 Body。
示例用途:
- 自动增加测试 Header。
- 修改 User-Agent。
- 移除响应中的 disabled。
- 把某个固定值替换成测试值。
6.2 ZAP Replacer
ZAP 的 Replacer 可设置匹配类型、正则表达式和替换字符串,实现类似效果。
6.3 注意事项
- 规则应限制域名、路径或 Scope。
- 使用正则表达式前先验证匹配范围。
- 结束测试后禁用规则,避免污染后续请求。
- 自动修改得到的结果仍需用原始请求复核。
7. Repeating Requests
Repeater 用于手工重放和微调单个请求,是日常 Web 测试最常用的功能之一。
7.1 Burp Repeater
在 HTTP history 或 Intercept 中右键:
Send to Repeater
然后在 Repeater 修改请求并点击 Send。可同时打开多个标签页,对比不同输入。
7.2 ZAP Request Editor
在 History 中右键请求,选择 Open/Resend with Request Editor,修改后发送并查看响应。
7.3 推荐实验方法
建立基准请求:
R0:未经修改的正常请求
R1:只修改参数 A
R2:只删除 Header B
R3:只替换 Cookie C
比较:状态码、Content-Length、响应正文、重定向位置和耗时。不要只看是否返回 200,因为错误页也可能是 200。
8. Encoding/Decoding
Web 参数常经过 URL、Base64、HTML 或十六进制编码。编码并不等于加密。
8.1 Burp Decoder
选中文本后可 Send to Decoder,执行:
- URL encode/decode。
- HTML encode/decode。
- Base64 encode/decode。
- Hex、ASCII 等转换。
- Hash 计算(不能反向恢复原文)。
8.2 ZAP Encode/Decode/Hash
Tools → Encode/Decode/Hash 提供对应功能,也可对选中文本使用右键转换。
8.3 命令行对照
printf '%s' 'admin:test' | base64
printf '%s' 'YWRtaW46dGVzdA==' | base64 -d
python3 -c "import urllib.parse; print(urllib.parse.quote('a b&c'))"
修改嵌套编码值时,按相反顺序解码,修改后再按原顺序重新编码。
9. Proxying Tools
除浏览器外,还可让 curl、sqlmap 等工具通过 Burp/ZAP,以便调试自动化工具发出的请求。
9.1 curl
curl -x http://127.0.0.1:8080 http://target.example/
curl -k -x http://127.0.0.1:8080 https://target.example/
-k 跳过 TLS 验证,仅适用于受控测试;更稳妥的方式是让工具信任代理 CA。
环境变量方式:
export http_proxy=http://127.0.0.1:8080
export https_proxy=http://127.0.0.1:8080
9.2 sqlmap
sqlmap -u 'http://target.example/page?id=1' \
--proxy=http://127.0.0.1:8080
也可先从 Burp 保存原始请求:
sqlmap -r request.txt --proxy=http://127.0.0.1:8080
9.3 Proxychains
对于支持 TCP 代理链的程序,可在配置中设置代理,再运行:
proxychains <COMMAND>
注意 HTTP 代理不等同 SOCKS,工具协议必须匹配。让高并发扫描经过 Burp 时也可能造成代理卡顿。
10. Burp Intruder
Intruder 用于自动替换请求中的一个或多个位置,并发送 Payload 列表。
10.1 基础流程
- 在请求上选择 Send to Intruder。
- Positions 中清除自动标记,再选定需要替换的值。
- 选择 Attack type。
- 在 Payloads 中添加字典、数字范围或生成规则。
- 设置必要的编码、资源池和匹配规则。
- 启动攻击并按状态码、长度、关键字排序。
位置标记示意:
GET /products?id=§1§ HTTP/1.1
10.2 攻击类型
类型 用途 Sniper 同一 Payload 集依次测试每个位置 Battering ram 同一 Payload 同时填入所有位置 Pitchfork 多组 Payload 按索引并行组合 Cluster bomb 多组 Payload 做笛卡尔组合
10.3 结果判断
不要只寻找 200;应观察:
- 响应长度明显不同。
- 状态码或 Location 改变。
- 出现/消失特定字符串。
- 响应时间异常。
- Set-Cookie 或认证状态改变。
Burp Community 的 Intruder 速度受限,适合小规模精确测试。
11. ZAP Fuzzer
ZAP Fuzzer 与 Intruder 目标相同,但配置界面和术语不同。
11.1 基础流程
- 在请求中选中参数值。
- 右键选择 Fuzz。
- Add Payloads,选择文件、字符串、数字、脚本等来源。
- 添加 Payload Processors,执行编码、前后缀或转换。
- 设置并发、延迟和匹配条件。
- 开始 Fuzz,比较 Code、Size、RTT 和响应内容。
11.2 适用场景
- 参数值枚举。
- 文件和目录名测试。
- Header、Cookie 或 JSON 字段变异。
- 小规模凭据或 Token 测试。
大规模字典应控制线程和请求率,先确认账户锁定、限速和目标容量。
12. Burp Scanner
Burp Scanner 的主动扫描主要属于 Pro/Enterprise 功能。Community 用户仍可使用被动分析和手工测试工作流。
12.1 被动扫描
被动扫描只分析已经经过代理的请求和响应,通常不会额外修改目标状态。适合发现:
- 缺失安全 Header。
- Cookie 属性问题。
- 信息泄露。
- 可疑输入点和响应内容。
12.2 主动扫描
主动扫描会向目标发送修改后的探测请求,可能触发:
- 数据写入或业务操作。
- 大量日志和告警。
- 账户锁定。
- 目标性能下降。
因此必须先限定 Scope,并在明确授权后选择具体 URL/Insertion Point 扫描。
12.3 结果处理
Scanner Issue 只是候选发现。需要查看证据、请求/响应和置信度,再用 Repeater 手工复现,排除误报。
13. ZAP Scanner
ZAP 免费提供爬虫、被动扫描与主动扫描。
13.1 Spider 与 AJAX Spider
- Spider:依据链接和表单快速遍历传统页面。
- AJAX Spider:通过浏览器执行 JavaScript,适合单页应用和动态页面。
爬取前应创建 Context,包含目标域、排除注销、删除等危险路径,并配置认证状态。
13.2 Passive Scan
流量经过 ZAP 后自动进入被动扫描队列。Alerts 按风险和置信度分类,可查看证据及建议。
13.3 Active Scan
在目标节点上选择 Attack → Active Scan,设置 Policy、输入向量与强度。扫描前:
[ ] 目标属于授权范围
[ ] 已排除第三方域名
[ ] 已排除注销、删除、支付等敏感操作
[ ] 测试账户可被锁定时已有处置方案
[ ] 已确认扫描窗口与目标容量
任何 Alert 都应手工复现后再写入报告。
14. Extensions
扩展用于增加新的被动检查、主动扫描、编码、认证和工作流辅助能力。
14.1 Burp Extender / BApp Store
常见流程:
- Extender/Extensions → BApp Store。
- 查看扩展说明、依赖语言和适用 Burp 版本。
- 安装后检查 Output 与 Errors。
- 确认扩展新增的标签页或菜单。
部分扩展需要 Jython/JRuby 或仅支持 Burp Pro。
14.2 ZAP Marketplace
Manage Add-ons/Marketplace 中可安装或更新官方、社区插件。ZAP 的扫描规则本身也按 Add-on 管理。
14.3 安全注意事项
- 扩展代码会在代理进程中运行,可读取经过代理的请求、Cookie 和 Token。
- 仅安装可信来源、必要且维护正常的扩展。
- 先在测试项目中验证兼容性。
- 更新扩展后重新检查扫描结果和性能。
- 不使用的扩展应禁用,减少攻击面和资源消耗。
15. Skills Assessment - Using Web Proxies
综合评估的关键不是盲目扫描,而是选择最合适的功能完成每一步。
15.1 推荐流程
- 启动 Burp/ZAP,并确认代理监听。
- 使用内置浏览器或正确配置外部浏览器与 CA。
- 将目标加入 Scope/Context。
- 正常操作应用,建立 Site map 和 HTTP history。
- 拦截关键请求,识别参数、Cookie、Token 和隐藏字段。
- 发送到 Repeater,建立基准请求并逐项修改。
- 遇到编码值时用 Decoder 解码、修改、重新编码。
- 重复测试使用 Match and Replace;批量输入使用 Intruder/Fuzzer。
- 需要自动化工具时让其通过代理,保留完整流量。
- 最后用被动/主动扫描补充人工测试,并手工验证发现。
15.2 功能选择表
需求 Burp ZAP 捕获并暂停请求 Proxy Intercept Break/Intercept 查看历史 HTTP history History 手工重放 Repeater Request Editor/Resend 自动替换 Match and Replace Replacer 编解码 Decoder Encode/Decode/Hash 批量 Payload Intruder Fuzzer 站点结构 Target Site map Sites Tree 动态爬取 Crawl/浏览器流量 AJAX Spider 被动扫描 Dashboard/Issues Passive Scan/Alerts 主动扫描 Burp Pro Scanner Active Scan 扩展 BApp Store Marketplace
附录 A:HTTP 请求检查模板
请求名称/功能:
方法与路径:
Host:
认证信息:Cookie / Authorization / Token
输入位置:URL / Header / Cookie / Body / JSON / XML
Content-Type:
CSRF/随机值:
原始状态码与长度:
修改的单一变量:
修改后状态码与长度:
关键响应差异:
是否可稳定复现:
权限与业务影响:
附录 B:常见故障速查
现象 优先检查 所有页面都打不开 代理是否启动、IP/端口是否一致 HTTPS 证书错误 是否导入正确 CA、域名与时间是否正常 Burp 中没有流量 浏览器是否真正使用代理、Scope 过滤是否过严 页面一直加载 Intercept 中是否有请求等待 Forward 登录后扫描仍未认证 Cookie/Token 是否更新,Context 是否配置登录状态 Repeater 请求失败 Host、Content-Length、Cookie、CSRF Token 是否有效 Intruder 所有结果相同 Payload 位置、编码、会话和匹配条件是否正确 主动扫描结果太多 先限定 Scope、路径、参数和 Policy curl HTTPS 经代理失败 CA 信任问题;靶场临时可用 -k 验证
附录 C:工作习惯
- 始终保留一份未经修改的基准请求。
- 一次只改变一个变量。
- Scope/Context 要在爬虫、Fuzzer 和扫描前设置。
- 登录、删除、支付、上传等有状态操作要谨慎排除。
- 对 Scanner Alert 必须人工复现。
- 不在截图或报告中暴露真实 Cookie、Token 和密码。
- 测试完成后关闭自动替换规则和代理配置。
总结
Web 代理的价值在于把浏览器背后的 HTTP 交互变成可观察、可编辑、可重复的实验。Burp 与 ZAP 的界面不同,但核心工作流完全一致:捕获请求、建立基准、控制变量、重放验证、再用自动化扩大覆盖面。
