如何捕获ZAP Proxy每次攻击的请求与响应详情?
问题描述
我在Docker容器中使用ZAP Proxy,对应的Dockerfile如下:
FROM softwaresecurityproject/zap-bare ENV ZAP_AUTO_UPDATE=false EXPOSE 9090 CMD ["sh", "-c", "nohup zap.sh -daemon -port 9090 -config api.disablekey=true -config api.addrs.addr.name=.* -config api.addrs.addr.regex=true -config view.mode=attack -host 0.0.0.0 -config network.localServers.mainProxy.behindNat=true -config network.connection.timeOutInSecs=120 -config network.httpState.timeoutInSecs=120 -config log.level=DEBUG & sleep 60 && curl 'http://localhost:9090/JSON/context/action/newContext/?contextName=ZAP_CONTEXT' && tail -f /dev/null"]
我想查看ZAP每次攻击的请求(请求头、请求体)与响应(响应头、响应体)详情,比如SQL注入攻击的请求体以及我的API对应的响应。
虽然已经把日志级别设为DEBUG,但主动扫描期间还是抓不到这些HTTP请求和响应的细节,目前只能看到这类日志:
2024-06-27 13:09:25 318242 [ZAP-Scanner-1] INFO org.parosproxy.paros.core.scanner.HostProcess - start host https://my-service.com | RemoteFileIncludeScanRule strength MEDIUM threshold MEDIUM
解决方法
要捕获ZAP主动扫描时的请求和响应细节,得调整ZAP的配置和日志设置,具体操作如下:
- 开启HTTP请求/响应日志
ZAP默认的DEBUG日志不会记录完整的请求响应内容,得单独启用HTTP流量日志。在zap.sh启动命令里添加这两个配置参数:
-config logger.org.parosproxy.paros.network.HttpSender.level=DEBUG -config logger.org.zaproxy.zap.network.HttpSender.level=DEBUG
这两个日志器专门负责记录HTTP请求、响应的详细信息,包括头信息和请求体。
- 更新Dockerfile的启动命令
把上面的配置项加到原CMD命令中,修改后的CMD如下:
CMD ["sh", "-c", "nohup zap.sh -daemon -port 9090 -config api.disablekey=true -config api.addrs.addr.name=.* -config api.addrs.addr.regex=true -config view.mode=attack -host 0.0.0.0 -config network.localServers.mainProxy.behindNat=true -config network.connection.timeOutInSecs=120 -config network.httpState.timeoutInSecs=120 -config log.level=DEBUG -config logger.org.parosproxy.paros.network.HttpSender.level=DEBUG -config logger.org.zaproxy.zap.network.HttpSender.level=DEBUG & sleep 60 && curl 'http://localhost:9090/JSON/context/action/newContext/?contextName=ZAP_CONTEXT' && tail -f /dev/null"]
查看日志内容
重启Docker容器后,主动扫描的请求和响应细节就会输出到日志里。直接执行docker logs <你的容器ID>查看完整日志,里面会包含请求头、请求体、响应头、响应体这类具体内容。可选:用API导出结构化数据
如果想要更规整的请求/响应数据,可以通过ZAP API导出扫描期间的HTTP消息。比如执行这个命令获取指定上下文的所有消息:
curl http://localhost:9090/JSON/core/view/messages/?contextName=ZAP_CONTEXT
返回的JSON数据里会包含所有请求和响应的详细信息,方便后续分析。
内容的提问来源于stack exchange,提问作者Sal-laS
相关产品推荐
相关产品推荐

