一、工具概述
OWASP ZAP(Zed Attack Proxy,Zed攻击代理)是一款由全球非营利性安全组织OWASP(开放Web应用程序安全项目)维护的免费、开源的Web应用安全扫描工具。它易于使用,功能强大,被设计为适用于各种安全经验水平的用户,无论是刚开始接触渗透测试的开发人员,还是经验丰富的安全专家,都能从中受益。
ZAP位于浏览器与目标Web应用程序之间,作为一种“中间人代理”(Man-in-the-Middle Proxy)运作。它可以拦截、检查并修改HTTP/HTTPS请求和响应,是动态应用安全测试(DAST,Dynamic Application Security Testing)的重要工具。
二、安装
2.1 Kali Linux下的安装
在Kali Linux中,ZAP并未预装,需手动安装。使用以下命令即可完成安装:
bash
sudo apt update
sudo apt install zaproxy -y2.2 Windows/macOS下的安装
Windows:从OWASP ZAP官网下载.exe安装程序,双击按向导提示完成安装即可。
macOS:从官网下载.dmg文件,打开后将ZAP图标拖入Applications文件夹。
2.3 启动
安装完成后,可通过命令行输入 owasp-zap 启动,或通过菜单搜索“ZAP”运行。初次启动时,ZAP会询问是否保存当前会话,可根据需要选择。
三、基本配置
3.1 配置浏览器代理
ZAP默认在本地端口8080上开启HTTP代理。要让浏览器流量经过ZAP,必须配置浏览器使用它作为代理。
Chrome/Firefox手动设置:
打开代理设置:
Firefox:首选项 → 网络设置 → 设置。
Chrome:启动时需通过命令行指定代理,或使用扩展更方便。
选择“手动代理配置”。
填写代理地址和端口:HTTP Proxy设为
127.0.0.1,端口为8080。勾选“为所有协议使用相同的代理服务器”。
推荐方式:使用FoxyProxy扩展
安装FoxyProxy浏览器扩展,配置127.0.0.1:8080代理,并为其命名(如“ZAP”)。测试时一键切换至该代理,日常使用时可快速关闭,避免持续占用ZAP。
3.2 导入证书(用于HTTPS流量)(非必要操作)
ZAP作为中间人代理,会为每个HTTPS网站动态生成证书。浏览器默认不信任此证书,需导入ZAP的根证书。
步骤:
在ZAP中,前往 工具(Tools) → 选项(Options) → 证书(Dynamic SSL Certificates)。
点击 保存(Save),将证书文件(如
zap_ca.cer)保存到本地。在浏览器中导入该证书:
Firefox:首选项 → 隐私与安全 → 证书 → 查看证书 → 证书颁发机构 → 导入,并勾选“信任此证书机构以标识网站”。
Chrome:设置 → 隐私和安全 → 安全 → 管理证书 → 受信任的根证书颁发机构 → 导入。
保存后重启浏览器,HTTPS网站的证书警告将消失。
四、使用方法
4.1 被动扫描
被动扫描是在不主动攻击目标的情况下,分析浏览器与服务器之间的HTTP/HTTPS流量,识别潜在的安全问题。它对系统无侵入,适合在生产环境或预发布环境使用。
操作流程:
确保浏览器已配置ZAP代理。
在ZAP中正常浏览目标网站,ZAP会自动记录所有请求和响应。
在 “警报(Alerts)” 标签页,可查看被动扫描发现的所有漏洞,按其风险等级分类。
点击每个警报,可查看漏洞详情、风险等级、证据以及修复建议。
4.2 主动爬取与扫描
主动扫描会向Web应用程序发送精心构造的恶意请求,如SQL注入、XSS、命令注入等payload,以主动探测潜在漏洞。
核心流程:启动代理 → Spider全站爬取 → Active Scan扫描 → 收集告警。
右键目标站点:在 “站点(Sites)” 面板中,右键单击目标站点,选择 “攻击(Attack)” → “Spider…”,启动Spider爬虫。
配置Spider:Spider会抓取站点所有链接和页面,发现隐藏的URL和参数。
启动主动扫描:爬取完成后,右键目标站点,选择 “攻击(Attack)” → “主动扫描(Active Scan…)”。
配置扫描策略:ZAP会提供默认扫描策略,也可点击 “策略...” 自定义调整。
查看结果:在 “警报(Alerts)” 标签页,查看主动扫描发现的所有漏洞。
4.3 快速扫描
此方式适合快速测试单个目标。
操作:
点击界面上的 “快速启动(Quick Start)” 标签页。
在 “URL to attack” 输入框中,填写目标URL(如
https://example.com)。点击 “攻击(Attack)” 按钮。
ZAP将自动完成Spider爬取和Active Scan,扫描完成后在下方查看漏洞信息。
4.4 动态爬取(AJAX Spider)
对于大量使用JavaScript动态加载内容的单页应用(SPA),传统Spider可能无法完全覆盖。此时可使用AJAX Spider,它会启动一个真实浏览器(通过Selenium/WebDriver)来渲染和执行JavaScript,从而发现更多隐藏的URL和参数。
操作:右键目标站点 → “攻击(Attack)” → “AJAX Spider…”。
4.5 API扫描
ZAP支持对API进行安全测试,尤其适用于OpenAPI/Swagger或GraphQL接口。
操作:
导入API定义文件:点击 “文件(File)” → “导入OpenAPI定义(Import OpenAPI Definition)” 或 “导入GraphQL定义(Import GraphQL Schema)”。
ZAP将自动解析并生成API请求结构。
在 “站点(Sites)” 面板,右键点击API节点,选择 “攻击(Attack)” → “主动扫描(Active Scan…)”。
五、高级功能
5.1 自定义扫描策略
ZAP允许用户根据实际需求创建和管理扫描策略(Scan Policy)。
操作:菜单栏 “分析(Analyze)” → “扫描策略管理器(Scan Policy Manager)”,可按需启用/禁用特定漏洞检测规则,调整扫描强度。
5.2 Fuzzing与手动测试
通过Fuzzer可对请求参数进行模糊测试,批量发送畸形输入以挖掘输入验证漏洞。基本操作是,在请求区域选中需要参数化的部分并右键选择 “Fuzz…”,添加字典后启动即可。
5.3 身份认证支持
对于需要登录才能访问的页面,ZAP支持多种身份验证机制。
配置路径:“工具(Tools)” → “选项(Options)” → “认证(Authentication)”,可配置表单登录、基于HTTP的认证、脚本认证等。
5.4 生成报告
ZAP可以生成详尽的HTML、JSON、Markdown等格式的安全测试报告。
操作:点击菜单栏 “报告(Report)” → “生成HTML报告(Generate HTML Report…)”,设置保存路径和文件名,点击 “生成(Generate)”。
5.5 插件与扩展
ZAP具有强大的可扩展性,可通过安装插件(Add-ons)来增加新功能。
操作:菜单栏 “帮助(Help)” → “检查更新(Check for Updates)” 可浏览和安装插件。
5.6 命令行模式(自动化集成)
ZAP提供完整的REST API,支持Python、Java等语言调用,便于集成到CI/CD流程。
启动daemon模式:
bash
zap.sh -daemon -host 127.0.0.1 -port 8090 -config api.key=your_api_keyPython自动化示例:
python
import time
from zapv2 import ZAPv2
target = 'https://example.com'
zap = ZAPv2(apikey='your_api_key', proxies={'http': 'http://127.0.0.1:8090', 'https': 'http://127.0.0.1:8090'})
print('Accessing target:', target)
zap.urlopen(target)
time.sleep(2)
print('Spider started')
scan_id = zap.spider.scan(target)
while int(zap.spider.status(scan_id)) < 100:
time.sleep(5)
print('Spider completed')
print('Active scan started')
scan_id = zap.ascan.scan(target)
while int(zap.ascan.status(scan_id)) < 100:
time.sleep(5)
print('Active scan completed')六、常见问题
如何修改ZAP的代理端口?
默认端口为8080。如需修改,可在ZAP中点击 “工具(Tools)” → “选项(Options)” → “本地代理(Local Proxies)” 处更改端口,并同步更新浏览器的代理配置。HTTPS证书错误如何解决?
安装ZAP根证书。扫描速度慢怎么办?
可调整主动扫描的线程数:“工具(Tools)” → “选项(Options)” → “扫描(Scan)” → “最大扫描器数量(Max Scanners)”,或选择更轻量的扫描策略。如何登录认证后扫描?
配置上下文(Context)和认证(Authentication),指定登录页面、用户名和密码字段,并记录会话。
七、最佳实践
测试环境限定:避免对生产环境进行主动扫描,默认情况下ZAP的主动扫描会对目标发送大量恶意Payload,可能对应用造成影响。
增量扫描:对修改的模块进行定向扫描,而非每次全量扫描。
误报处理:对于确定为误报的警报,可右键单击该警报,选择 “假阳性(False Positive)” 进行标记。
定期更新:ZAP每周都会发布新版本,建议定期更新以获得最新的漏洞检测规则和功能。
八、总结
OWASP ZAP是一款功能全面、开源免费且易于集成的Web应用安全测试工具。它兼顾自动化测试(主动/被动扫描)与手动测试(拦截代理、重放器等),既适合初学者快速入门,也适合经验丰富的安全专家进行深度渗透测试。通过将ZAP集成到CI/CD流水线,可以有效实现DevSecOps中的“安全左移”,帮助开发团队更早发现并修复安全漏洞。