refer to:
https://www.zaproxy.org/getting-started/
zap是个非常强大的工具,从star = 13k上就可以看的出来,一定要安装啊亲
https://github.com/zaproxy/zaproxy/blob/main/BUILDING.md
直接用docker安装吧:
https://hub.docker.com/r/zaproxy/zap-stable
设置代理:
set HTTP_PROXY=http://127.0.0.1:8078/
set HTTPS_PROXY=http://127.0.0.1:8078/
执行docker:
docker pull ghcr.io/zaproxy/zaproxy:stable
使用:
https://www.zaproxy.org/docs/docker/about/#usage-instructions
https://www.zaproxy.org/docs/docker/full-scan/
运行web ui: (webswing, 挺有意思,就是个wehb GUI客户端 ,用了webswing的技术)
https://www.zaproxy.org/docs/docker/webswing/
docker run -v /opt/app/zap:/zap/wrk/:rw -u zap -p 8080:8080 -p 8090:8090 -i ghcr.io/zaproxy/zaproxy:stable zap-webswing.sh (注意: /opt/app/zap是你的本地工作目录,windows的话 /c/workspace/zap_workspace 这样的形式)
运行后

1. 初始化:http://localhost:8080/zap/

2. 可以看到页面在滚动

3. 再等几秒:

4. 选择automated scan:

5. 然后按照下图,开始执行:
5.1 history

5.2 search
5.3 alerts

5.4 output
5.5 spider:

5.6 ajax spider:

5.7 active scan:

5.8 还可以使用ZAP作为代理 (替代 burpsuite)
https://www.zaproxy.org/docs/docker/webswing/#proxying-through-zap
zap_root_ca.crt - the public ZAP Root CA certificate
zap_root_ca.key - the private ZAP Root CA certificate
替换这2个整数之后,就可以看了. 具体参考:
https://www.youtube.com/watch?v=r9_fYHDJldg


命令行检查
https://www.zaproxy.org/docs/docker/about/#packaged-scans
baseline scan: 1分钟的快速检查
full scan:不限时间
api scan: 只检查api
full scan:
https://www.zaproxy.org/docs/docker/full-scan/
1. 需要确保,当前docker下,没有运行其他的zap进程(webswing也不行),最好重新启动一个新的docker
否则会提示错误:
docker exec -it 8114 /bin/bash
zap@811416f86b69:/zap$ /zap/zap-x.sh -daemon -port 34482 -host 0.0.0.0
Found Java version 17.0.14
Available memory: 31994 MB
Using JVM args: -Xmx7998m
The home directory is already in use. Ensure no other ZAP instances are running with the same home directory: /home/zap/.ZAP/
这样启动:
docker run -v /c/workspace/zap_workspace:/zap/wrk/:rw -u zap -i ghcr.io/zaproxy/zaproxy:stable tail -f /dev/null

2. 运行命令
(在docker 内)zap-full-scan.py -t https://siweibug.cn
在docker 外:
# 运行 ZAP Docker 容器,执行 Full Scan,并将输出重定向到文件
docker run --rm \
-u zap \
-i ghcr.io/zaproxy/zaproxy:stable \
zap-full-scan.py -t https://yourtarget.com -r /dev/stdout > result.html
在后台日志就可以看到被频繁扫描了。

其他:
来自DEEP SEEK:
是的,你可以在本地运行一个 ZAP Docker 实例,并通过 ZAP 的 API 同时扫描多个站点。ZAP 支持多任务并发扫描,但需要注意以下几点:
---
### 1. **运行 ZAP Docker 实例**
首先,启动一个 ZAP Docker 实例,并确保 API 端口(默认 `8090`)已映射到宿主机。
```bash
docker run -u zap -p 8080:8080 -p 8090:8090 -i ghcr.io/zaproxy/zaproxy:stable
```
- `-p 8090:8090`: 将 ZAP 的 API 端口映射到宿主机的 `8090` 端口。
- `-p 8080:8080`: 将 ZAP 的 Web UI 端口映射到宿主机的 `8080` 端口(可选)。
---
### 2. **使用 ZAP API 扫描多个站点**
ZAP 提供了 REST API,可以通过 API 触发扫描任务。你可以通过多个进程或脚本同时调用 API 来扫描多个站点。
#### 示例:扫描多个站点
以下是一个示例脚本,用于同时扫描多个站点:
```bash
#!/bin/bash
# 定义要扫描的站点列表
SITES=(
"https://site1.com"
"https://site2.com"
"https://site3.com"
)
# 启动扫描任务
for SITE in "${SITES[@]}"; do
echo "Starting scan for $SITE..."
curl "http://localhost:8090/JSON/ascan/action/scan/?url=$SITE&recurse=true&inScopeOnly=false" &
done
# 等待所有后台任务完成
wait
echo "All scans completed."
```
---
### 3. **脚本说明**
- **`curl` 命令**: 通过 ZAP API 触发主动扫描。
- `url`: 目标站点的 URL。
- `recurse=true`: 递归扫描所有子页面。
- `inScopeOnly=false`: 扫描所有页面,而不仅限于范围内页面。
- **`&`**: 将每个 `curl` 命令放到后台运行,实现并发扫描。
- **`wait`**: 等待所有后台任务完成。
---
### 4. **检查扫描状态**
你可以通过以下 API 检查每个扫描任务的状态:
```bash
curl "http://localhost:8090/JSON/ascan/view/status/?scanId=0"
```
- `scanId`: 扫描任务的 ID(从 0 开始)。
---
### 5. **获取扫描结果**
扫描完成后,可以通过以下 API 获取扫描结果:
```bash
curl "http://localhost:8090/JSON/core/view/alerts/?baseurl=https://site1.com"
```
---
### 6. **注意事项**
- **资源限制**: 同时扫描多个站点可能会消耗大量内存和 CPU 资源。确保宿主机和容器有足够的资源。
- **API 速率限制**: ZAP API 没有严格的速率限制,但并发请求过多可能导致性能下降。
- **目标站点限制**: 如果目标站点有防护机制(如 WAF),可能会阻止扫描。
- **扫描范围**: 确保扫描范围合理,避免对非目标站点造成影响。
---
### 7. **优化建议**
- **限制并发数**: 如果站点较多,可以限制并发扫描的数量,避免资源耗尽。
- **分布式扫描**: 如果需要扫描大量站点,可以考虑使用 ZAP 的分布式扫描功能(如 ZAP in Docker Swarm 或 Kubernetes)。
---
### 8. **总结**
通过 ZAP 的 API,你可以在一个 ZAP Docker 实例中同时扫描多个站点。使用并发脚本可以高效地完成多站点扫描任务,但需要注意资源管理和目标站点的限制。