如何解决使用 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/
我在会话>上下文>默认上下文>用户中添加了一个用户名/密码对:
然后我在 Sessio > 上下文 > 默认上下文 > 身份验证中提供了有关身份验证 API 端点的详细信息:
我确保按下按钮以启用“强制用户模式”(请参阅上一个屏幕截图中“用户详细信息”中的红色圆圈。
然后我右键单击我的“默认上下文”(我用这个名称创建了它,与 ZAP 术语无关,它只是一个 ZAP 上下文)并单击“主动扫描”。
然后我在右键单击后从弹出窗口中单击了“开始扫描”按钮。
然后什么都没有发生。我没有看到任何移动、记录或闪烁的东西。
- 如何使用 Owasp ZAP 对我的 API 进行身份验证?
- 如何将 JWT 令牌重用于其他 HTTP 请求中作为标头?
- 有没有办法模仿我在 HTTP 集成测试中所做的事情,让 ZAP 发现 HTTP 路径、HTTP 查询参数等方面的问题?
- 如何将上述内容导出到可以从命令行调用的脚本中?
编辑 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\/.*
(与我的主机,而不是“示例”)添加到:
然后再次尝试“主动扫描”:什么也没发生 - 窗口下部的选项卡中没有输出,没有日志,没有闪烁的信号量。
解决方法
所以你似乎错过了两个关键细节。
- 您没有提到上下文中包含的内容,或者您没有配置“包含在上下文中”模式。
- 同时查看您的屏幕截图,您还没有确定登录或注销的标识符,因此 zap 永远无法知道它处于什么状态。
如何从“登录”API 端点(不是网页)获取 JWT 令牌,并在扫描期间将其作为 HTTP 标头重用?
在 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 举报,一经查实,本站将立刻删除。