Home !!!automationtool自动化工具 Zap的安装和使用
Post
Cancel

!!!automationtool自动化工具 Zap的安装和使用

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 实例中同时扫描多个站点。使用并发脚本可以高效地完成多站点扫描任务,但需要注意资源管理和目标站点的限制。

This post is licensed under CC BY 4.0 by the author.
Contents