如何自动化 OWASP ZAP
admin
2024-01-28 00:30:42
0

介绍 ZAP
OWASP ZAP是世界上最受欢迎的 Web 应用程序扫描仪,现在每月收到超过 400 万次“检查更新”调用(今年早些时候只有 100 万次)。

它是免费的、开源的,可供具有广泛安全经验的人使用,从新手到经验丰富的安全专家,以更好地了解 Web 应用程序安全状况。OWASP ZAP的工作方式是以类似于恶意黑客的方式攻击您的网络应用程序,它会在您的应用程序运行时对其进行攻击,并向您展示攻击者在攻击您的应用程序时能够找到的内容。

ZAP 桌面
ZAP 是为灵活性和采用而构建的,因此可以按照您喜欢的工作方式以多种方式运行它:

从命令行
作为桌面应用程序
作为后台守护进程
在本文中,我将向您展示如何从命令行自动化 ZAP,以及如何使用 ZAP 桌面应用程序对其进行设置。ZAP 桌面应用程序允许您准确查看 ZAP 的功能,并调整 ZAP 以尽可能有效地处理您的应用程序。

ZAP 需要Java 8+才能在本地运行,但您也可以在 Docker 中运行 ZAP并使用Webswing通过浏览器访问它。我们不会在这里深入探讨此设置,但欢迎您参考文档以开始使用。

请注意,如果您使用 docker 选项,那么您需要确保使用映射本地驱动器的选项启动 docker,以便您可以在停止 docker 映像后访问将要生成的文件。在 *nix 系统上,docker 选项是-v $(pwd):/zap/wrk/:rw- 在 Windows 上,您需要替换$(pwd)为合适目录的完整路径。

自动化框架
自动化框架(AF) 允许您使用一个 yaml 文件来控制 ZAP。还有其他方法可以使 ZAP 自动化,但 AF 是大多数用户推荐的方法。
您可以在文本编辑器中创建 yaml 文件,但也可以使用 ZAP 桌面创建它,因为这样您可以随时测试计划,这是我们将在此处使用的选项。

使用蜘蛛探索您的应用
首先要做的是探索您的应用程序。为人类设计的应用程序通常最好由人类探索,但这不是自动化和最终扩展的好选择。但是,我们将首先进行一些手动探索,以确保我们可以连接到该应用程序。

在 ZAP 桌面点击“Manual Explore”按钮。在下一个表格中,填写目标应用程序的 URL,取消选中“启用 HUD”框并单击“启动浏览器”。


应启动一个浏览器并显示您的目标应用程序——为了这个示例,我们将使用 Firefox,但如果您安装的是 Chrome 浏览器,它也应该可以正常工作。

现在查看站点树 — 您应该至少看到一个来自目标应用程序的 URL,可能还有更多。在本例中,我使用OWASP Juice Shop作为我的目标。

现在我们可以看到 2 个蜘蛛中的每一个如何处理我们的应用程序。

右键单击站点树中应用程序的顶部节点,然后选择“攻击 -> 蜘蛛…”


然后单击“开始扫描”。


这个蜘蛛应该运行得非常快,它会告诉你有多少 URL 被找到,有多少被添加到站点树:


如果您的目标应用是更传统的应用,那么这就足够了。但是,如果它是大量使用 JavaScript 的更现代的 Web 应用程序,那么您将需要使用 AJAX 蜘蛛。

右键单击站点树中应用程序的顶部节点,然后选择“攻击 -> AJAX 蜘蛛…”


然后单击“开始扫描”。


此蜘蛛程序将花费更长的时间,因为它会启动浏览器以单击 UI 元素。它还会告诉您它找到了多少个 URL:


通过导入 API 定义探索您的应用
如果您的应用程序只定义了一个 API,那么您将无法手动或使用任何一个 ZAP 蜘蛛探索它。

如果您有 API 定义,则可以通过“导入”菜单项导入它。ZAP 支持导入以下定义:

开放API
图形QL
WSDL
哈尔
定义上下文
如果您只是手动使用 ZAP,则不需要定义上下文,但在使用 Automation Framework 时需要定义上下文。幸运的是,这很容易做到——只需右键单击站点树中应用程序的顶部节点,然后选择“包含在上下文中 -> 新上下文:”


并可选地给它一个有意义的名字:


在桌面上创建计划
我们现在准备好创建计划了。

首先,您需要找到“自动化”选项卡。ZAP 有很多选项卡,因此默认情况下,除了最重要的选项卡外,所有选项卡都是隐藏的。单击底部面板中的绿色加号选项卡并选择“自动化:”


在新的自动化面板中单击“新计划...”按钮:

图片说明

选择您在上面定义的上下文,然后选择以下配置文件之一:

基线——如果你只是想被动地扫描你的应用程序而不是攻击它
GraphQL - 如果您有 GraphQL API 定义
OpenAPI - 如果您有 OpenAPI / Swagger API 定义
SOAP - 如果您有 SOAP 定义
全面扫描 - 如果您想攻击您的应用程序(并且没有 API 定义)

现在将显示您的计划摘要:


计划可以比这些配置文件灵活得多,但它们是您入门时使用的最佳选择。

Baseline 和 Full 扫描将包括spider和spiderAjax——如果您发现不需要,可以删除其中一个。不要同时删除两者,否则该计划将根本不会探索您的应用程序!

如果除了抓取之外还想导入 API 定义,则添加相关作业。

您可以在 ZAP 桌面中编辑计划:

双击任何作业将弹出一个对话框,允许您对其进行配置
“添加工作...”按钮将允许您向现有计划添加工作
“删除作业...”按钮将删除选定的作业
“Move Job Up”按钮会将所选作业向上移动一个位置
“向下移动作业”按钮会将所选作业向下移动一个位置
被动扫描
ZAP 将被动扫描由 ZAP 发起或通过它代理的每个请求。
这些配置文件都会添加两个相关的工作:

passiveScan-config - 这允许您微调被动扫描仪
passiveScan-wait - 等待所有请求被被动扫描,它应该总是在探索你的应用程序的任何作业之后运行
主动扫描
activeScan作业运行主动扫描器——这执行实际的攻击。

除非您只想被动扫描您的应用程序,否则您应该始终包含此作业。

双击作业将允许您微调活动扫描规则。

生成报告
毫无疑问,报告作业的任务是生成报告——有多种模板可供您选择,并提供不同的选项。请参阅https://www.zaproxy.org/docs/desktop/addons/report-generation/templates/以获取包含每个示例的最新列表。

验证
身份验证很难,而且绝对超出了这篇博文的范围(但我们将在未来尽最大努力对此进行深入探讨)。但是,ZAP 几乎可以处理任何身份验证机制——更多详细信息,请访问 ZAP 网站。好消息是,您可以在 ZAP 桌面上测试身份验证处理,您可以在其中准确查看正在发生的事情,并且当您使用该上下文创建计划时,所有身份验证配置都将导入计划中。

在本地测试您的计划
您可以使用“运行计划...”按钮运行您在 ZAP 中创建的身份验证计划。然后,您将在计划运行时看到作业的状态:


如果任何作业失败,您可以在 ZAP 桌面中调查它们。

然而,工作可能看似成功,但仍未达到您的预期。
这就是 AF 支持工作结果测试的原因——这些测试可以添加到任何工作中,并且可以执行以下操作:

检查任何ZAP 统计数据
检查特定警报是否存在
检查是否找到了特定的 URL 并可选择检查其内容
统计测试默认添加到蜘蛛作业中,但您可以使用“添加测试...”按钮(还有一个“删除测试...”按钮)向任何作业添加更多测试,并且不要忘记您可以加倍单击计划中的任何测试以对其进行编辑。

在 CI/CD 中运行
您可以使用如下命令从命令行运行 AF 测试:

zap.sh -cmd -autorun plan.yaml

您也可以在 docker 中运行它们。如果您使用的是稳定映像,那么我们建议使用单独的命令更新 ZAP:

docker run -v $(pwd):/zap/wrk/:rw -t owasp/zap2docker-stable bash -c "zap.sh -cmd -addonupdate; zap.sh -cmd -autorun /zap/wrk/plan.yaml"

该$(pwd):/zap/wrk/:rw命令的一部分将您的本地 CWD 映射到/zap/wrkdocker 容器中的目录。

如果您在计划中使用任何脚本,那么您将需要确保它们位于或低于您的本地 CWD 并更改您的计划,以便通过它们在 docker 容器中出现的位置(即在 下/zap/wrk)引用它们。

相关内容

热门资讯

【MySQL】锁 锁 文章目录锁全局锁表级锁表锁元数据锁(MDL)意向锁AUTO-INC锁...
【内网安全】 隧道搭建穿透上线... 文章目录内网穿透-Ngrok-入门-上线1、服务端配置:2、客户端连接服务端ÿ...
GCN的几种模型复现笔记 引言 本篇笔记紧接上文,主要是上一篇看写了快2w字,再去接入代码感觉有点...
数据分页展示逻辑 import java.util.Arrays;import java.util.List;impo...
Redis为什么选择单线程?R... 目录专栏导读一、Redis版本迭代二、Redis4.0之前为什么一直采用单线程?三、R...
【已解决】ERROR: Cou... 正确指令: pip install pyyaml
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
Lock 接口解读 前置知识点Synchronized synchronized 是 Java 中的关键字,...
Win7 专业版安装中文包、汉... 参考资料:http://www.metsky.com/archives/350.htm...
3 ROS1通讯编程提高(1) 3 ROS1通讯编程提高3.1 使用VS Code编译ROS13.1.1 VS Code的安装和配置...
大模型未来趋势 大模型是人工智能领域的重要发展趋势之一,未来有着广阔的应用前景和发展空间。以下是大模型未来的趋势和展...
python实战应用讲解-【n... 目录 如何在Python中计算残余的平方和 方法1:使用其Base公式 方法2:使用statsmod...
学习u-boot 需要了解的m... 一、常用函数 1. origin 函数 origin 函数的返回值就是变量来源。使用格式如下...
常用python爬虫库介绍与简... 通用 urllib -网络库(stdlib)。 requests -网络库。 grab – 网络库&...
药品批准文号查询|药融云-中国... 药品批文是国家食品药品监督管理局(NMPA)对药品的审评和批准的证明文件...
【2023-03-22】SRS... 【2023-03-22】SRS推流搭配FFmpeg实现目标检测 说明: 外侧测试使用SRS播放器测...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
初级算法-哈希表 主要记录算法和数据结构学习笔记,新的一年更上一层楼! 初级算法-哈希表...
进程间通信【Linux】 1. 进程间通信 1.1 什么是进程间通信 在 Linux 系统中,进程间通信...
【Docker】P3 Dock... Docker数据卷、宿主机与挂载数据卷的概念及作用挂载宿主机配置数据卷挂载操作示例一个容器挂载多个目...