使用 ZAP 扫描 API

admin 2024年4月28日10:50:24评论2 views字数 3863阅读12分52秒阅读模式

####################

免责声明:工具本身并无好坏,希望大家以遵守《网络安全法》相关法律为前提来使用该工具,支持研究学习,切勿用于非法犯罪活动,对于恶意使用该工具造成的损失,和本人及开发者无关。

####################

脚本 zap-api-scan.py 包含在Weekly和 Live ZAP Docker 镜像中,它也将包含在下一个 稳定镜像中。

要使用 API 扫描脚本,您只需使用以下命令:

docker pull owasp/zap2docker-weekly  
docker run -t owasp/zap2docker-weekly zap-api-scan.py -t  
   https://www.example.com/openapi.json -f openapi  

复制

默认情况下,脚本:

  1. 导入提供的 API 定义

  2. 使用针对 API 调整的自定义扫描配置文件主动扫描 API

  3. 向命令行报告发现的任何问题

如果没有报告任何问题,那么这并不意味着您的 API 是安全的。 如果您的 API 特别重要或敏感,那么在扫描之后进行手动渗透测试是明智的。您还应该测试使用 API 的应用程序,因为通过 API 返回的数据如果不能适当地转义最初通过用户输入的数据,仍然可以用来攻击应用程序。

命令行选项

该脚本有许多命令行选项,可以根据您的要求对其进行调整:

Usage: zap-api-scan.py -t <target> -f <format> [options]  
   -t target         target API definition, OpenAPI or SOAP, local file or URL, e.g. https://www.example.com/openapi.json  
   -f format         either openapi or soap  
Options:  
   -c config_file    config file to use to INFO, IGNORE or FAIL warnings  
   -u config_url     URL of config file to use to INFO, IGNORE or FAIL warnings  
   -g gen_file       generate default config file(all rules set to WARN)  
   -r report_html    file to write the full ZAP HTML report  
   -w report_md      file to write the full ZAP Wiki(Markdown) report  
   -x report_xml     file to write the full ZAP XML report  
   -a                include the alpha passive scan rules as well  
   -d                show debug messages  
   -P                specify listen port  
   -D                delay in seconds to wait for passive scanning  
   -i                default rules not in the config file to INFO  
   -l level          minimum level to show: PASS, IGNORE, INFO, WARN or FAIL, use with -s to hide example URLs  
   -n context_file   context file which will be loaded prior to scanning the target  
   -p progress_file  progress file which specifies issues that are being addressed  
   -s                short output format - don't show PASSes or example URLs  
   -z zap_options ZAP command line options e.g. -z "-config aaa=bbb -config ccc=ddd"  

复制

扫描规则

默认情况下,该脚本将使用针对 API 调整的扫描策略。 这将禁用专注于客户端(例如浏览器)问题的规则,例如用于检测跨站脚本的规则,并且还添加了 2 个作为脚本实现的附加规则:

  • Alert_on_HTTP_Response_Code_Errors.js

  • Alert_on_Unexpected_Content_Types.js

您可以使用配置文件更改运行哪些规则以及如何报告故障。这允许您调整扫描脚本以满足您对每个 API 的要求。 要生成配置文件,请使用“-g”选项。这将创建一个文件,其中包含所有可用的主动和被动扫描规则。有关详细信息,请参阅配置文件。您可以使用文本编辑器编辑此文件。 更改被动规则只会影响报告失败的方式,但将主动规则更改为 IGNORE 会阻止规则运行。这是为了减少整体扫描时间 - 被动规则非常快,而主动规则可能需要大量时间。

指定值

ZAP 将在导入 API 时使用一组默认值。在某些情况下,这些值对于特定应用程序来说不是合适的值,因此不会对代码进行足够的练习。例如,用户名“test”可能不会导致创建新用户,因为它不是有效的电子邮件地址。 对于使用 OpenAPI/Swagger 定义的 API,您可以通过 ZAP 命令行选项指定希望 ZAP 使用的值。 例如选项:

  -config formhandler.fields.field\(0\).fieldId=username   
 -config formhandler.fields.field\(0\).value=test@example.com  
 -config formhandler.fields.field\(0\).enabled=true  
 -config formhandler.fields.field\(1\).fieldId=phone  
 -config formhandler.fields.field\(1\).value=012345678  
 -config formhandler.fields.field\(1\).enabled=true  

复制

将为命名字段提供以下值:  username-> [email protected]  phone->012345678还计划支持为使用 SOAP 定义的 API 指定值 - 如果您需要,请与 ZAP 开发团队联系,我们将尽最大努力优先考虑。

请注意,由于这些是 ZAP 命令行选项,您需要使用 -z 脚本选项将它们指定给脚本。 如果您需要指定很多选项,那么您可以将它们全部放在一个属性文件中,例如称为 options.prop 然后您可以使用如下命令运行 API 扫描:

docker run -v $(pwd):/zap/wrk/:rw -t owasp/zap2docker-weekly zap-api-scan.py   
   -t https://www.example.com/openapi.json -f openapi  
   -z "-configfile /zap/wrk/options.prop"  

复制

"-v $(pwd):/zap/wrk/:rw"是一个 Docker 选项,它将当前工作目录映射到 Docker 实例中名为 /zap/wrk 的文件夹。

验证

您的某些 API 可能会使用身份验证机制进行保护。 对于使用标头值的机制,我们建议您使用任何适当的方式为您的应用程序获取合适的令牌,然后通过另一组命令行选项告诉 ZAP 使用它们。 例如选项:

  -config replacer.full_list\(0\).description=auth1   
 -config replacer.full_list\(0\).enabled=true  
 -config replacer.full_list\(0\).matchtype=REQ_HEADER  
 -config replacer.full_list\(0\).matchstr=Authorization  
 -config replacer.full_list\(0\).regex=false  
 -config replacer.full_list\(0\).replacement=123456789  
 -config replacer.full_list\(1\).description=auth2  
 -config replacer.full_list\(1\).enabled=true  
 -config replacer.full_list\(1\).matchtype=REQ_HEADER  
 -config replacer.full_list\(1\).matchstr=AnotherHeader  
 -config replacer.full_list\(1\).regex=false  
 -config replacer.full_list\(1\).replacement=abcdefghi  

复制

将导致以下标头添加到 ZAP 发出的每个请求中:  Authorization: 123456789  AnotherHeader: abcdefghi您可以使用递增索引指定任意数量的标头。

此功能由 ZAP 默认包含的Replacer插件提供。它非常强大,可以做的不仅仅是注入新的标头值,因此如果您需要以其他方式操作 ZAP 发出的请求,那么这对您来说可能是一个非常好的选择。

原文始发于微信公众号(菜鸟小新):使用 ZAP 扫描 API

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月28日10:50:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   使用 ZAP 扫描 APIhttp://cn-sec.com/archives/2080851.html

发表评论

匿名网友 填写信息