OWASP ZAP 是使用个免费工具,但很多人把它用成了“点一下扫描,教程看报告”的使用哑巴。我见过太多测试员打开 ZAP,教程输个 URL,使用点 Attack,教程然后盯着红色告警发呆。使用这不对。教程ZAP 最值钱的使用地方不是那个自动扫描按钮,而是教程你手动操作时它在你背后偷偷记录的一切。
打开 ZAP,使用默认会弹出一个带本地代理的教程界面。浏览器配好代理指向 127.0.0.1:8080,使用然后你开始像普通用户一样逛目标站点。教程点链接、使用填表单、传文件——ZAP 的“历史”标签页里默默积累了所有请求和响应。这个阶段叫“爬取”,但更准确的说法是“观察”。你看到的每个请求头、每个 Cookie、每个隐藏参数,都是后续测试的线索。别急着跳过,花十分钟看看那些 POST 请求体里的字段名,很多漏洞就藏在开发者懒得清理的参数里。
等逛得差不多了,右键点击某个请求,选择“主动扫描”。这时候 ZAP 会针对这个具体请求发起攻击载荷,而不是漫无目的地扫整个域名。很多人直接对站点根目录开扫,结果扫出一堆噪音——什么 404 页面、静态资源、第三方 CDN,全是浪费时间的垃圾。精准打击一个带参数的请求,比盲扫整个站点有用十倍。
ZAP 的告警列表里,红色高危不一定真高危。比如它报了个“SQL 注入”,你点开看,发现是个搜索框,参数值被原样反射回页面——这可能是反射型 XSS,也可能是误报。你得自己验证。我习惯把告警里的请求复制到 Burp 或者 curl 里手动改参数再发一遍。ZAP 只是给你指了个方向,别把它当裁判。
有个功能很多人不知道:右键请求 → “Fuzz”。这才是 ZAP 的杀手锏。选一个参数,加载内置的 fuzzing 字典,它会自动替换参数值并发送成百上千次请求,然后根据响应差异帮你找出异常。比如一个文件下载接口,参数是文件名,你用 fuzz 塞进“../../etc/passwd”,看响应里有没有报错信息。这个过程比主动扫描更可控,也更贴近真实攻击逻辑。
再说说“会话”和“用户”管理。ZAP 能记录你登录后的 Cookie 和 CSRF token,然后让扫描器带着这些身份信息去跑。没有这步,你扫到的只是未登录状态下的匿名页面,等于白扫。在“会话属性”里配置好登录请求,ZAP 会自动维持你的登录态,甚至能检测到会话过期后重新登录。这个功能对付那种登录后才有漏洞的模块特别管用。
最后提个反直觉的点:ZAP 的“报告”功能我几乎不用。那些 PDF 报告格式漂亮,但内容冗长,全是告警描述和 CWE 编号,开发看了想打人。我更习惯导出 CSV 然后自己筛选,只挑真实可复现的漏洞,附上手动验证的请求和响应片段。报告的价值在于让人信服,不在于堆砌数量。
说实话,ZAP 上手不难,难的是你愿不愿意花时间了解目标应用的业务逻辑。工具再聪明,也不如你手动点几下、多观察几个请求来得实在。下次用 ZAP,别急着按扫描键,先代理访问、手动逛、然后精准 fuzz。这玩意儿用好了,比那些几万块的商业扫描器强多了——毕竟它免费,而且永远在你掌控之中。