ZAPR:OWASP ZAP API 与 R 接口的完美结合
Toolsmith #125: ZAPR - OWASP ZAP API R 接口
我真诚地希望当我说 OWASP Zed Attack Proxy(ZAP)时,你的反应是“太棒了!”而不是“那是什么?”。本出版物长期支持 ZAP,除了 @psiinon 卓越的项目领导外,众多杰出的贡献者和实践者也促进了 OWASP ZAP 的发展。在过去的四年中,OWASP ZAP 在 @ToolsWatch 最佳工具调查中一直名列第一或第二,这是有充分理由的。多年来,OWASP ZAP 的使用已被充分记录和展示,wiki 为您提供了大量内容供您探索 OWASP ZAP 用户场景。
我最近试图探索的一个较新场景是使用 OWASP ZAP API。OWASP ZAP API 也有详细的文档,足以让您入门,但请考虑几个用例场景。
首先,有一个功能齐全、简洁的 OWASP ZAP API UI,在您考虑编程机会时为您提供查看者的视角。OWASP ZAP API 交互基于 URL,您可以调用访问视图和操作。探索任何组件,您会立即找到相关的视图或操作。通过 http://localhost:8067/UI/core/(我在 8067 端口运行 OWASP ZAP,您的安装可能不同)深入核心,我有很多选择。
您需要 API 密钥来构建查询。您可以通过 Tools | Options | API | API Key 找到您的密钥。例如,深入 numberOfAlerts (baseurl),它获取警报数量,可选地按 URL 过滤。然后您将看到查询构建器,您可以在其中输入密钥、定义特定参数并决定首选的输出格式,包括 JSON、HTML 和 XML。
当然,您会在浏览器中收到结果,此查询将以 HTML 表格形式提供答案,但这些不一定最适合程序化数据消费和操作。也就是说,您学到了本课最重要的部分,一个完全填充的 OWASP ZAP API GET URL:http://localhost:8067/HTML/core/view/numberOfAlerts/?zapapiformat=HTML&apikey=2v3tebdgojtcq3503kuoq2lq5g&formMethod=GET&baseurl=。
此请求将以 HTML 返回结果。非常直接且易于根据您的偏好修改,但 HTML 结果不太适合机器处理。想要 JSON 结果吗?只需在 URL 中将 HTML 替换为 JSON,或在构建器中选择 JSON。我会告诉您,当我通过 R 等工具使用 OWASP ZAP API 时,我更喜欢使用 JSON。这无疑是最干净、机器可消费的选项,尽管其他人可能会与我争论支持 XML。
请允许我为您提供一个可以实验的示例,我可能会继续开发它,因为它对于动态报告 OWASP ZAP 扫描中的活动或会话完成时的结果非常酷。请注意,我所有的代码,可能很粗糙,都可以在 GitHub 上找到。我的意思是,这真的是 v0.1 的东西,所以请根据您的意愿贡献和调试。同样重要的是要注意,OWASP ZAP 需要运行,无论是使用活动扫描会话还是您之前保存的存储会话。我扫描了我的网站 holisticinfosec.org,并在编写本文时保存了会话以供常规使用。您甚至可以通过下面的位置看到保存会话的引用。
R 用户可能知道 Shiny,一个用于 R 的 Web 应用程序框架及其仪表板功能。我还发现 rCharts 设计用于在 Shiny 中交互式和美观地工作。
R 包含使从 JSON 解析变得相当直接的包,正如我从 Zev Ross 那里学到的。RJSONIO 使得从 OWASP ZAP API 提取数据变得容易,如 fromJSON("http://localhost:8067/JSON/core/view/alerts/?zapapiformat=JSON&apikey=2v3tebdgojtcq3503kuoq2lq5g&formMethod=GET&baseurl=&start=&count=")。我们使用 fromJSON“函数及其方法读取 JSON 格式的内容并将其反序列化为 R 对象”,其中 ZAP API URL 是该内容。
我使用 Zev 的 grabInfo 函数进一步解析了警报数据,并将结果组织成一个数据框(ZapDataDF)。然后,我将来自 ZapDataDF 的警报内容进一步排序为用于报告和可视化的有用对象。在每个警报对象中,有风险级别、警报消息、CWE ID、WASC ID 和插件 ID 等值。使用以下代码将这些值中的每一个定义为对 R 有用的参数:
然后我将所有这些结果组合到另一个我称为 reportDF 的数据框中,其结果如下图所示。

现在我们有一些可以 pivot 的内容。
首先,让我们总结发现并通过 ZAPR:OWASP ZAP API R 接口展示它们的光彩。
代码优先,真正简单的东西:
摘要概述 API 调用
您可以看到,我们只是使用 RJSONIO 的 fromJSON 进行特定的 ZAP API 调用。结果非常整洁,如下所示。

Shiny 中我最喜欢的功能之一是 renderDataTable 函数。当在 Shiny 仪表板中使用时,它使过滤结果变得轻而易举,因此被用作 ZAPR 中的第一个真正功能。代码很繁琐,请从 GitHub 查看或使用,但结果应该不言自明。我按 CWE ID 89 过滤了视图,在这种情况下有点误报,我有一个非常平坦的网站,没有数据库,非常感谢。尽管如此,有一个肯定是高风险发现的例子是好的。

警报过滤很好,随着我进一步开发,我会添加更多结果功能,但可视化也很重要。这就是 rCharts 在 Shiny 中真正发挥作用的地方,因为它们是交互式的。我使用了最简单的例子,但您会明白的。首先,几行 R 代码,如下所示。
图表代码
结果看起来更令人满意,并允许交互性。Ramnath Vaidyanathan 在这里做了非常好的工作。首先,通过 API 提取的 OWASP ZAP 警报按风险在条形图中计数。

当我将鼠标悬停在 Medium 上时,我们可以看到我的 OWASP ZAP 扫描 holisticinfosec.org specifically 有 17 个结果。
我们的第二个可视化是按计数显示的 CWE ID 结果,在一个经常被鄙视但交互式的饼图中(是的,我在布局方面还有一些工作要做)。

正如我们之前了解到的,我在会话期间只有一个 CWE ID 89 命中,可视化支持了我们在数据表中看到的内容。
从 OWASP ZAP API 提取数据并将结果纳入任何数量的应用程序或报告场景的可能性是无限的。我感觉到这里有一个与 PowerBI 相关的丰富机会,我打算探索。所有代码都在这里,以及我提到的 OWASP ZAP 会话,所以您可以自己使用。您需要 OWASP ZAP、R 和 RStudio 来使一切协同工作,如果您有问题或建议,请告诉我。
干杯,下次见。更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)公众号二维码

评论