本节摘要:Web 评估的枢纽工具是拦截代理——它站在浏览器与目标之间,把每次请求与响应变成可阅读、可修改、可重放的实验材料。本节讲代理的工作位置、请求重放的验证方法、Web 发现的分级记录,全部演示在 DVWA 靶机上进行。
系统层工具看到的是端口与服务,Web 层工具看到的是请求与逻辑。这一节的功能域承接 4.2 的验证思想,但把验证语言换成了"请求重放"。
Web 评估的第一步配置不是打开扫描器,而是让浏览器的一切流量经过代理工具(Kali 预装的这类工具以截获与重放请求为核心能力)。配好之后,浏览器里点开的每个页面,在代理界面里都变成一条条可检视的记录:请求方法与参数、响应状态与内容、跳转链、Cookie 变化。
这个"观察哨"的位置决定了它三方面的价值:可见性——应用前端的加密流量在代理处是明文(浏览器信任了代理的根证书),页面背后的接口交互一览无余;可控性——任何请求都可以拦截下来修改再放行,前端的输入校验形同虚设(这本身就是重要发现:安全校验只做在前端,等于没做);可重复性——任何请求都可以原样重发或序列化保存,验证与复测时随时回放。
# 以命令行方式快速确认代理与靶机链路(图形代理工具之外的基础功) curl -x http://127.0.0.1:8080 -I http://target-web/ # 经代理访问 DVWA 首页,返回 200 说明观察哨就位 curl -I http://target-web/ # 对照:不经代理的直连,用来区分问题出在代理还是目标

Web 层的发现如何从"疑似"变成"确认"?答案是重放。以 DVWA 的练习为例走一遍闭环(背景 → 操作 → 结果 → 解读 → 变式):
背景:靶机某页面把用户输入直接拼进查询,疑似存在注入类问题。判定依据来自代理里看到的请求结构——参数原样出现在响应内容中。
操作:在代理界面把该请求发送到重放模块,修改参数为一个带有结构含义的试探值(例如改变引号配对),重发并观察响应差异;再做一次对照重放(参数不变),排除网络波动与缓存影响。
结果:试探值引发了明确的响应差异——错误信息结构变化、返回条数改变,而对照重放稳定。问题行为确认。
解读:确认的是"应用未对输入做充分处理,输入能影响查询结构"。报告条目要写清:判定证据(两次重放的差异对比)、影响面(该参数影响的数据范围)、触发条件(输入形态)、修复建议(参数化查询与输入白名单校验)、复测方式(修复后同样重放,差异应消失)。
变式:同样的重放方法适用于整类 Web 发现——跨站类问题看注入内容是否被渲染、文件上传类看扩展名校验发生在前端还是后端、权限类看改动请求中的标识字段后能否越权访问。重放是 Web 评估的万能验证语言。
| Web 发现类别 | 重放验证要点 | 修复建议常见方向 |
|---|---|---|
| 注入类 | 试探值引发响应结构差异 | 参数化查询 输入白名单 |
| 跨站类 | 注入内容被原样渲染 | 输出编码 响应头策略 |
| 上传类 | 后缀与内容校验位置确认 | 类型白名单 存储隔离 |
| 越权类 | 改标识字段观察数据边界 | 服务端鉴权 对象级检查 |
| 会话类 | 令牌生命周期与属性核查 | 安全属性 短有效期重发 |
Web 评估的产出管理要早于扫描结束就开始。建议每条发现当场记录四样东西:原始请求(重放模块里可导出)、响应差异对比(截图或文本)、触发参数的最小形态(去掉一切无关部分)、业务影响描述(用客户能懂的语言)。第五章报告写作时,这四样直接组装成条目。
分级沿用行业惯例(严重 / 高 / 中 / 低),但初学者常犯的错是把"技术酷炫度"当分级依据。正确依据是业务影响:一个能读任意数据的注入,比一个炫技但只能弹窗的跨站严重得多。分级失当会直接损耗报告可信度——客户按你的分级排修复优先级。
⚠️ 两个高频坑:其一,代理根证书装进日常浏览器后忘记移除——测试证书长期留在主力浏览器里是安全隐患,建议用独立的测试浏览器配置文件;其二,重放前不看会话状态——登录态过期的重放得到的"异常响应"会被误判成发现,重放前先确认会话有效。
Web 评估的假阳性有一大半来自会话状态没管理好,值得单独展开。三个典型场景:场景一,登录态过期后重放,响应是跳转到登录页,被误读成"越权访问被重定向";场景二,代理里两个浏览器配置文件混用,A 账号的会话 cookie 出现在 B 的请求里,权限边界完全混乱;场景三,目标有防重放机制,重复提交同一请求得到不同响应,被误读成"注入成功导致行为变化"。
对策是把会话当第一等公民管理:重放前确认会话有效(一次轻量请求验证登录态);不同账户的测试用独立浏览器配置文件,物理隔离 cookie;观察响应差异时先做一次原样重放做基线对照。这三条习惯能消掉八成的"幽灵发现",省下的验证时间远大于养成习惯的成本。
Web 评估结束时交付什么?推荐一个"移交包"结构:发现清单(五要素条目)、证据索引(每条发现指向具体重放记录与响应差异存档)、复测脚本(关键发现的复现步骤,让复测者不需要理解你的思路就能执行)、范围与限制说明(测了什么、没测什么、为什么)。四样齐备,报告评审与复测都能顺畅进行;缺了第三样,复测就要重新理解你的整个工作过程,成本翻倍。
这个结构同样适用于其他功能域的移交——把"复测脚本"换成对应的复现步骤即可。移交包的质量决定你的工作能否被别人接续,这是 5.3"可复现性"在交付形态上的落点。
再补一段经验之谈:Web 评估的节奏管理。这类工作有个特点——发现密度随时间递减:前两个小时能抓住大部分显性问题,之后的边际收益快速下滑。合理的安排是分多轮短会话(每轮两小时左右)而不是一次马拉松,轮间留出整理证据的时间。马拉松式评估的产出特征是:发现越来越多、验证越来越少——恰好违背 4.2 的三态纪律。把"何时收手"也当成方法的一部分,是成熟评估者的标志之一。