Owasp Zap 测试 rest api

Posted

技术标签:

【中文标题】Owasp Zap 测试 rest api【英文标题】:Owasp Zap Testing rest api 【发布时间】:2019-01-13 08:02:08 【问题描述】:

可以通过 OWASP ZAP 测试 rest-api 吗? 攻击 URL 仅适用于 GET 请求。

例如,我的 api 控制器仅使用令牌。我有 TokenController,这个控制器需要通过 JSON 数据的 POST 数据,包括密码和登录名。我可以通过 OWASP 测试这个控制器吗?

【问题讨论】:

您最终是如何发现这一点的?在 docker env 中使用 owasp zap,如下面的答案? 【参考方案1】:

可以使用 OWASP ZAP 自动化 API 测试,但要执行测试,我看到两个选项: 提供一些使用模式,例如 OpenAPI for ZAP 考虑提取信息。第二种选择是运行自动化测试以将 ZAP 捕获为被动扫描信息,然后您可以测试会话信息。

我们建议使用 OpenAPI 文档。 黄瓜测试如下所示:

Feature: Security
  This feature is to test pokemon service security

  Scenario: Validate passive and active scan
    Given I import context from open API specification "/v2/api-docs"
    And I remove alerts
      | url                    |
      | http://.*/v2/api-docs* |
    And I import scan policy "javaclean" from file "javaclean.policy"
    When I run active scan
    And I generate security test html report with name "java-clean-security-report"
    Then the number of risks per category should not be greater than
      | low | medium | high | informational |
      | 0   | 0      | 0    | 0             |

我正在为 ZAP 开发步骤,在 GitHub 中查看:https://github.com/osvaldjr/easy-cucumber/wiki/Security-steps

导入 OpenAPI 文档的示例步骤:

@Given("^I import context from open API specification \"([^\"]*)\"$")
  public void iImportContextFromOpenAPISpecification(String path)
      throws ClientApiException, InterruptedException 
    String url = getTargetUrl() + path;
    log.info("Import Open API from url: " + url);
    zapProxyApi.openapi.importUrl(url, null);

    waitPassiveScanRunning();
    verifyThatTheProxyHasCapturedHostInformation();
  

查看其他步骤:https://github.com/osvaldjr/easy-cucumber/blob/master/src/main/java/io/github/osvaldjr/stepdefinitions/steps/SecuritySteps.java

【讨论】:

【参考方案2】:

简短的回答是肯定的。长答案 - 这很复杂:)

测试 REST API 比测试 Web API 更难一些——你必须提供关于你的 API 的 Zap 信息——它有哪些端点、参数等。你能分享更多关于你的 API 的信息吗?它有 OpenAPI/Swagger 文档吗?你有现有的测试吗?您可以使用其中任何一种来完成此任务。

我讲了如何实现这一点 - 你可以找到录音here。

【讨论】:

是不是说自动测试是不可能的? 您的 API 有定义吗?如果是这样,那么看看github.com/zaproxy/zaproxy/wiki/ZAP-API-Scan 如果没有,你有任何现有的测试吗?如果您也没有这些,那么任何自动化工具都很难探索您的 API。 是的,正如 Simon 所说 :) 如果你想使用现有的测试,你可以遵循这个指南:github.com/Soluto/owasp-zap-glue-ci-images 是否只能通过 docker 上运行的 owasp zap 扫描 api ?我在遵循本教程 kasunkodagoda.com/2017/09/03/… 在运行 owasp zap 程序的虚拟机中部署了它

以上是关于Owasp Zap 测试 rest api的主要内容,如果未能解决你的问题,请参考以下文章

Owasp zap 工具 - 如何获取通过和失败测试的列表?

利用 ZAP 进行 REST API 测试

OWASP-ZAP

在不使用 OpenAPI 或 Swagger 规范的情况下,使用 OWASP ZAP 对 API 进行身份验证

Owasp Zap 和亚马逊

如何在 OWASP ZAP 中捕获 HTTP 请求