Toolsmith #125: ZAPR - OWASP ZAP API R接口
真诚希望当我说OWASP Zed攻击代理(ZAP)时,您的反应是"太棒了!“而不是"那是什么?"。本出版物长期支持OWASP ZAP,除了@psiinon卓越的项目领导外,许多杰出的贡献者和实践者都促进了OWASP ZAP的发展。在过去四年的@ToolsWatch最佳工具调查中,OWASP ZAP一直排名第一或第二,这是有充分理由的。多年来,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密钥。您可以通过工具|选项|API|API密钥找到您的密钥。例如,深入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的数据框中,其结果如下图所示。
reportDF结果
现在我们有一些可以 pivot 的内容。
首先,让我们总结发现并通过ZAPR:OWASP ZAP API R接口展示它们的光彩。
代码优先,真正简单的东西是:
摘要概述API调用
您可以看到,我们只是使用RJSONIO的fromJSON进行特定的ZAP API调用。结果非常整洁,如下所示。
ZAPR概述
我在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
正如我们之前了解到的,我在会话期间只有一个CWE ID 89命中,可视化支持了我们在数据表中看到的内容。
从OWASP ZAP API提取数据并将结果纳入任何数量的应用程序或报告场景的可能性是无限的。我感觉这里有一个与PowerBI相关的丰富机会,我打算探索。所有代码都在这里,以及我引用的OWASP ZAP会话,所以您可以自己使用。您需要OWASP ZAP、R和RStudio才能使一切协同工作,如果您有疑问或建议,请告诉我。
干杯,下次见。