ZAP(Zed Attack Proxy)是一款开源的Web应用安全扫描工具,广泛应用于渗透测试和安全审计中,除了图形界面(GUI)操作外,ZAP还提供了强大的命令行接口(CLI),支持自动化扫描、批量任务处理和脚本集成,尤其适合DevSecOps流程中的安全扫描需求,本文将详细介绍如何使用ZAP命令,从环境准备到核心功能实战,帮助读者快速掌握CLI操作。
安装与环境准备
在使用ZAP命令前,需先完成ZAP的安装与环境配置,ZAP支持Windows、macOS和Linux系统,安装步骤略有不同:
安装ZAP
- Windows:访问ZAP官网(https://www.zaproxy.org/download/)下载Windows安装包(zip格式),解压到指定目录,进入
bin
目录,双击zap.bat
启动(首次启动会初始化配置)。 - macOS:通过Homebrew安装,命令为
brew install zap
,安装后可通过zap.sh
启动。 - Linux:通过包管理器安装(如Ubuntu/Debian:
sudo apt-get install zap
),或下载tar.gz包解压后运行./zap.sh
。
验证安装
启动ZAP后,默认以无头模式(Headless)运行CLI,可通过以下命令检查是否成功:
zap.sh -version
若返回ZAP版本号(如14.0
),则表示安装成功。
配置代理(可选)
如果扫描目标需要通过代理访问,需在ZAP中配置代理参数:
zap.sh -host 127.0.0.1 -port 8080 -config proxy.host=127.0.0.1 -config proxy.port=8080
ZAP核心命令详解
ZAP命令通过zap.sh
(Linux/macOS)或zap.bat
(Windows)调用,核心功能包括扫描、策略管理、报告生成等,以下按功能模块分类说明常用命令:
目标管理
扫描前需定义目标URL,ZAP支持通过命令添加、列出目标:
- 添加目标:
zap.sh -cmd -target -u "http://example.com" -recurse
参数说明:
-u
指定目标URL,-recurse
是否递归扫描子域名。 - 列出目标:
zap.sh -cmd -target -list
- 删除目标:
zap.sh -cmd -target -d "http://example.com"
被动扫描(Spider)
Spider用于被动发现目标URL,通过模拟用户访问收集页面链接:
zap.sh -cmd -spider -u "http://example.com" -m 10 -t 5
参数说明:
-m
:最大爬取子节点数(默认50);-t
:线程数(默认2,提高速度可增加,但可能触发反爬);-depth
:爬取深度(默认3)。
主动扫描(Active Scan)
主动扫描通过发送恶意请求检测漏洞,是ZAP的核心功能:
zap.sh -cmd -ascan -u "http://example.com" -sc "Default Policy" -ra -r 1
参数说明:
-sc
:扫描策略(如Default Policy
、OWASP Top 10
);-ra
:递归扫描所有子节点;-r
:扫描重试次数(默认1);-ajaxspider
:启用Ajax Spider(适用于动态页面)。
策略管理
ZAP支持自定义扫描策略,可调整规则开关、阈值等:
- 列出策略:
zap.sh -cmd -policy -list
- 启用/禁用规则:
zap.sh -cmd -policy -setrule -r "XSS Scan Rule" -s "ENABLED"
参数:
-r
规则名称,-s
状态(ENABLED
/DISABLED
)。 - 设置策略阈值:
zap.sh -cmd -policy -setthreshold -r "SQL Injection" -t "HIGH"
报告生成
扫描完成后,可生成多种格式的报告(HTML、XML、JSON等):
zap.sh -cmd -report -o report.html -f html -r "Full Report" -include confidence="High,Medium" -include risk="High"
参数说明:
-o
:输出文件路径;-f
:报告格式(html、xml、json等);-r
:报告模板(Full Report
、Summary
等);-include
:过滤条件(如置信度、风险等级)。
会话管理
ZAP支持保存和加载扫描会话,便于复现或增量扫描:
- 新建会话:
zap.sh -cmd -session -new "MySession"
- 加载会话:
zap.sh -cmd -session -load "MySession"
- 保存会话:
zap.sh -cmd -session -save "MySession"
其他常用命令
- 查看历史记录:
zap.sh -cmd -history -list
- 强制访问URL:
zap.sh -cmd -accessurl -u "http://example.com/api"
- 退出ZAP:
zap.sh -cmd -exit
高级功能与实战案例
结合脚本自动化扫描
ZAP CLI支持通过脚本(如Shell、Python)批量执行命令,以下是一个简单的Shell脚本示例,实现“启动ZAP→添加目标→爬取→主动扫描→生成报告”的完整流程:
#!/bin/bash # 启动ZAP(无头模式,端口8080) ./zap.sh -daemon -port 8080 -host 127.0.0.1 # 等待ZAP启动完成 sleep 10 # 添加目标 ./zap.sh -cmd -target -u "http://testphp.vulnweb.com" -recurse # 执行Spider爬取 ./zap.sh -cmd -spider -u "http://testphp.vulnweb.com" -m 20 # 执行主动扫描(使用OWASP策略) ./zap.sh -cmd -ascan -u "http://testphp.vulnweb.com" -sc "OWASP Top 10 2021" -ra # 等待扫描完成 sleep 30 # 生成HTML报告 ./zap.sh -cmd -report -o zap_report.html -f html -r "Full Report" # 退出ZAP ./zap.sh -cmd -exit echo "扫描完成,报告已生成:zap_report.html"
实战案例:扫描Web应用并生成报告
以扫描http://testphp.vulnweb.com
(一个测试用漏洞网站)为例,步骤如下:
步骤 | 命令 | 操作说明 |
---|---|---|
启动ZAP CLI | ./zap.sh -daemon -port 8080 |
无头模式启动,避免弹出GUI窗口 |
添加目标 | ./zap.sh -cmd -target -u "http://testphp.vulnweb.com" -recurse |
添加目标并允许递归扫描 |
执行Spider | ./zap.sh -cmd -spider -u "http://testphp.vulnweb.com" -m 30 |
爬取页面,最多30个子节点 |
主动扫描 | ./zap.sh -cmd -ascan -u "http://testphp.vulnweb.com" -sc "Default Policy" -ra -r 2 |
使用默认策略主动扫描,重试2次 |
查看扫描进度 | ./zap.sh -cmd -ascan -status |
返回扫描状态(如100% 表示完成) |
生成报告 | ./zap.sh -cmd -report -o testphp_report.html -f html -r "Full Report" -include risk="High,Medium" |
生成包含中高风险漏洞的HTML报告 |
退出ZAP | ./zap.sh -cmd -exit |
关闭ZAP进程 |
执行完成后,当前目录会生成testphp_report.html
,打开即可查看漏洞详情(如XSS、SQL注入等)。
相关问答FAQs
Q1:ZAP CLI和GUI版本的主要区别是什么?如何选择?
A:
ZAP CLI(命令行)和GUI(图形界面)的核心功能一致,但适用场景不同:
- CLI优势:
- 支持自动化脚本集成(如Jenkins、GitLab CI),适合DevSecOps流程;
- 无需图形界面资源,可在服务器或容器中运行;
- 批量处理任务效率高(如扫描多个目标)。
- GUI优势:
- 可视化展示扫描结果,便于手动分析漏洞细节;
- 支持实时交互(如手动触发请求、修改请求参数);
- 适合初学者或需要精细化操作的场景。
选择建议:
- 自动化扫描、CI/CD集成→选CLI;
- 手动渗透测试、漏洞复现→选GUI。
Q2:使用ZAP CLI扫描时出现“连接超时”错误,如何解决?
A:
“连接超时”通常由网络问题或ZAP配置不当导致,可按以下步骤排查:
- 检查目标URL可达性:
使用curl
或ping
命令确认目标是否可访问:curl -I http://example.com
若无法访问,需检查网络或目标服务器状态。
- 调整ZAP代理设置:
确保ZAP代理与目标网络兼容,可通过以下命令修改超时参数(默认30秒):zap.sh -config connection.timeout=60
- 增加重试次数:
在主动扫描命令中添加-retries
参数(如-retries 3
),避免因临时超时中断扫描:zap.sh -cmd -ascan -u "http://example.com" -retries 3
- 关闭防火墙/杀毒软件:
部分安全软件可能拦截ZAP的网络请求,临时关闭后测试。
若问题仍存在,可查看ZAP日志(-log
参数)定位具体错误:./zap.sh -daemon -port 8080 -log level=DEBUG -log file=zap.log
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/20504.html