使用ZAP对WebSockets进行模糊测试的实用指南

本文详细介绍了如何使用OWASP ZAP工具对基于WebSockets的应用程序进行自定义模糊测试,包括设置注入点、生成和导入自定义模糊测试列表,以及分析测试结果的实际操作步骤。

使用ZAP对WebSockets进行模糊测试

以下文章是我介绍ZAP和测试WebSockets的第二部分,本集将涵盖模糊测试。如果您以前没有使用过ZAP,我建议您先查看一些官方教程 - ZAP主页视频。您可以在这里找到我的第一部分。

测试是针对我编写的一个名为SocketToMe的小型基于WebSockets的应用程序进行的,该应用程序有一些已发布的服务以及一些未发布的服务。在本文中,我们将查看其中一个已发布的服务,并尝试识别一些未发布的服务。

数字猜测游戏

我将调查的第一个功能是数字猜测游戏。系统选择一个1到100之间的随机数,您必须猜测它。我将作弊,看看是否可以让ZAP为我玩所有100个数字以快速获胜。

首先要做的是找到猜测如何发送到服务器。使用ZAP拦截,进行一些猜测并观察流量。在WebSockets选项卡中,您应该看到猜测,除非您非常幸运,否则还会看到服务器的拒绝消息。

开始模糊测试

要开始模糊测试,您需要告诉ZAP要模糊测试的注入点。为此,从底部窗口选择一个消息,它将出现在右上角的窗口中。在这种情况下,消息是"G:42",因此我假设G是命令,:是分隔符,42是我所做的猜测。要告诉ZAP您想要注入的位置,只需突出显示它,右键单击并选择fuzz。这里是42,因为这是我要更改的特定数据位。

如果您是第一次从Burp转到ZAP的用户,那么Burp的intruder处理模糊测试的方式与ZAP处理它的方式有很大的不同。我认为Burp做得更好,提供了更多的选择和灵活性,但这可能只是因为我错过了ZAP中的某些东西。我找不到任何关于模糊测试的教程,除了那些简单地选择现有数据的教程,所以如果我错过了什么,请随时告诉我我错了并解释原因。

Burp和ZAP之间的主要区别之一是,Burp有所有不同的选项来生成要模糊测试的值列表,而ZAP只允许您从预生成的列表中选择。内置了很多列表,我最初查看了"jbrofuzz / Number Systems"类别,从中选择了"Base10 (DEC)"。我期望有第二个对话框询问开始和结束值,但模糊测试立即开始并运行了0到9的值。这是固定列表的想法,“Base10 (DEC)“在ZAP中存储为0到9的数字列表,如果您想运行不同的范围,则必须自己生成,导入它,然后从"Custom fuzzers"类别中选择它。

因此,我打开了一个shell,生成了从1到100的数字列表,并将它们存储在一个文本文件中。要导入文件,请转到Tools菜单,然后选择options,在对话框中选择Fuzzer。在这里您看到一个添加自定义模糊文件的选项,使用"Select File…“导入文件。当文件添加到模糊器列表时,它是按名称完成的,因此请确保您使名称具有描述性,“fuzz_guesses"现在可能意味着什么,但一个月后当您回来时,它不会意味着太多。我没有看到任何查看已导入列表内容的方法,因此您能够看到它包含什么的唯一方法是针对某些东西运行它。

一旦添加了这一点,您可以返回消息,突出显示42,告诉它您想要模糊测试它,这次选择"Custom fuzzers"类别。导入的列表应该在这里显示,由其文件名标识。

然后模糊测试应该开始,默认使用单个线程,因此一次发出一个请求。目前这很好,但如果您想更改这一点,可以在用于添加自定义模糊列表的同一个对话框中完成。

除了显示请求是否成功之外,模糊窗格不会显示太多关于请求的信息,这是因为WebSocket调用不像普通的HTTP请求,它们不必有响应,因此没有响应代码,没有响应大小可以过滤。我发现最好的做法是让模糊测试运行,然后切换到WebSockets选项卡并观察消息。正如我们所知,服务器对错误的猜测响应失败消息,我们可以假设对正确的猜测有某种成功消息。我只是观察响应负载,直到我看到消息然后停止模糊器。

如果您关心的话,由于模糊器是单线程运行的,消息上方的猜测将是正确的,在这种情况下是38。

轮到您了

正如我在开头所说,SocketToMe有一些未发布的功能,如果您想练习模糊测试,请查看已发布的功能,看看是否能发现发送到服务器的请求是如何制作的。一旦您发现了它,您应该能够生成一个模糊列表,该列表将尝试所有可能的命令。提示,总共有5个。

结论

因此,这是对基于WebSockets的应用程序进行自定义模糊测试的演练。该过程相当简单,虽然我不喜欢为我想要做的每个不同的自定义模糊测试上传静态数据列表,但生成大多数列表并不难。您无法查看列表的内容,或者,据我所知,删除列表,这可能意味着如果您经常使用此功能,自定义类别可能会很快堵塞。我强烈建议使用非常信息丰富的文件名。

感谢BruCON

创建此项目的时间由BruCON 5x5奖慷慨赞助。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计