【发布时间】:2021-06-07 12:31:16
【问题描述】:
我正在尝试对我的 API 进行身份验证,以使用 OWASP ZAP 执行一些被动/主动扫描。
我没有任何 Swagger 或 OpenAPI 规范,但我有一些 HTTP 测试 (Javascript) 可能会有所帮助。但是,我无法确定使用 ZAP 对我的 API 进行身份验证。
理想情况下,我希望在给定一些规范(ZAP 可以理解的任何格式,但不是 OpenAPI Swagger 等自动工具)、URL 入口点和用户名/密码的情况下自动执行扫描,但我坚持使用更基本的步骤,例如身份验证。
我一直在关注本指南:https://www.zaproxy.org/docs/desktop/ui/dialogs/session/context-auth/
我在 Session > Contexts > Default Context > Users 中添加了一个用户名/密码对:
然后我在 Sessio > Context > Default Context > Authentication 中提供了有关身份验证 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\/.*(与我的主机,而不是“示例”)添加到:
- “包含在上下文中”菜单项
- “登录”和“注销”正则表达式模式中的“身份验证”菜单项。
然后再次尝试“主动扫描”:没有任何反应 - 窗口下部的选项卡中没有输出,没有日志,没有闪烁的信号量。
【问题讨论】:
标签: authentication jwt owasp zap