使用 OWASP ZAP 对 API 进行身份验证而不使用 OpenAPI 或 Swagger 规范

如何解决使用 OWASP ZAP 对 API 进行身份验证而不使用 OpenAPI 或 Swagger 规范

我正在尝试对我的 API 进行身份验证,以使用 Owasp ZAP 执行一些被动/主动扫描。

我没有任何 Swagger 或 OpenAPI 规范,但我有一些 HTTP 测试 (Javascript) 可能会有所帮助。但是,我无法弄清楚使用 ZAP 对我的 API 进行身份验证。

理想情况下,我想在给定一些规范(ZAP 理解的任何格式,但不是像 OpenAPI Swagger 这样的自动工具)、URL 入口点和用户名/密码的情况下自动进行扫描,但我坚持使用更基本的步骤,例如身份验证。

我一直在关注本指南:https://www.zaproxy.org/docs/desktop/ui/dialogs/session/context-auth/

我在会话>上下文>认上下文>用户添加一个用户名/密码对:

enter image description here

然后我在 Sessio > 上下文 > 认上下文 > 身份验证中提供了有关身份验证 API 端点的详细信息:

enter image description here

我确保按下按钮以启用“强制用户模式”(请参阅​​上一个屏幕截图中“用户详细信息”中的红色圆圈。

然后我右键单击我的“认上下文”(我用这个名称创建了它,与 ZAP 术语无关,它只是一个 ZAP 上下文)并单击“主动扫描”。

然后我在右键单击后从弹出窗口中单击了“开始扫描”按钮。

然后什么都没有发生。我没有看到任何移动、记录或闪烁的东西。

  1. 如何使用 Owasp ZAP 对我的 API 进行身份验证?
  2. 如何将 JWT 令牌重用于其他 HTTP 请求中作为标头?
  3. 有没有办法模仿我在 HTTP 集成测试中所做的事情,让 ZAP 发现 HTTP 路径、HTTP 查询参数等方面的问题?
  4. 如何将上述内容导出到可以从命令行调用的脚本中?

编辑 1

这不是带有 HTML 或 web 应用程序的网站。这只是一个通过 HTTPS 的 REST API,带有请求/响应、路径、查询参数和标头。

“包含上下文”不包含任何 URL。但是,我只是再次尝试添加我在“身份验证”菜单中指定的 URL,然后再次尝试使用“主动扫描”,但没有任何反应。

“身份验证”中的登录/注销正则表达式不包含任何内容,因为没有这样的“注销”——JWT 令牌刚刚过期,对任何 API 端点的请求不再有效。 无论如何,我将“登录”URL 的 HTTP 路径(不是协议或域/主机,只是没有任何 / 的路径)添加到 ZAP 表单中的两个正则表达式字段。然后再次尝试“主动扫描”,没有任何反应。

  • 这个“主动扫描”应该做什么?我是否必须提供所有有效路径?查询参数呢?
  • 如何从“登录”API 端点(不是网页)获取 JWT 令牌,并在扫描期间将其作为 HTTP 标头重用?
  • 如何被动扫描任何端点,例如从“登录”API 端点(同样 - 不是网页,只是 REST 端点)。

编辑 2

我在 Linux 上通过 snap 使用 ZAP 2.9.0,没有其他可用版本:

$ snap find zaproxy
Name     Version  Publisher  Notes    Summary
zaproxy  2.9.0    psiinon    classic  Owasp ZAP,a tool for finding vulnerabilities in web applications
$ snap install zaproxy --classic
zaproxy 2.9.0 from Simon Bennetts (psiinon) installed

编辑 3

我将此正则表达式 https?:\/\/example.org\/.*(与我的主机,而不是“示例”)添加到:

  • “包含在上下文中”菜单
  • 登录”和“注销”正则表达式模式中的“身份验证”菜单项。

然后再次尝试“主动扫描”:什么也没发生 - 窗口下部的选项卡中没有输出,没有日志,没有闪烁的信号量。

解决方法

所以你似乎错过了两个关键细节。

  1. 您没有提到上下文中包含的内容,或者您​​没有配置“包含在上下文中”模式。

enter image description here

  1. 同时查看您的屏幕截图,您还没有确定登录或注销的标识符,因此 zap 永远无法知道它处于什么状态。

如何从“登录”API 端点(不是网页)获取 JWT 令牌,并在扫描期间将其作为 HTTP 标头重用?

enter image description here

在 Zap 2.10 中,您还可以设置身份验证轮询作为验证策略。

如果您有非标准的身份验证机制,则有多种选择,例如使用 Replacer 附加组件或 HttpSender 脚本来设置/更新标头/令牌值。从 2.10.0 开始,这也可以通过 env vars 完成: https://www.zaproxy.org/docs/desktop/start/features/authentication/

这个“主动扫描”应该做什么?我是否必须提供所有有效路径?查询参数呢?

这就是导入 OpenAPI 等很有价值的原因。其他选项是代理功能测试。 Zap 必须了解内容/功能才能有效地对其进行测试。

我如何被动扫描任何端点,例如从“登录”API 端点(同样 - 不是网页,只是 REST 端点)。

被动扫描发生在代理或蜘蛛网络上。

“包含上下文”不包含任何 URL。但是,我只是再次尝试添加我在“身份验证”菜单中指定的 URL,然后再次尝试使用“主动扫描”,但没有任何反应。

Include in Context 应该是一个匹配你的端点的正则表达式模式,除非你实际上只是在测试一个特定的 URL。例如:https?:\/\/example.org/.*.* 是正则表达式通配符并匹配 example.org/ 上的任何内容)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?