使用ZAP对WebSockets进行模糊测试
以下文章是我介绍ZAP和测试WebSockets的第二部分,本集将涵盖模糊测试。如果您以前没有使用过ZAP,我建议您先查看一些官方教程 - ZAP主页、视频教程。您可以在这里找到我的第一部分内容。
测试是针对我编写的一个基于WebSockets的小型应用程序SocketToMe进行的,该应用程序包含一些已发布的服务和一些未发布的服务。在本文中,我们将查看其中一个已发布的服务,并尝试识别一些未发布的服务。
数字猜谜游戏测试
我将调查的第一个功能是数字猜谜游戏。系统随机选择一个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之间的一个主要区别是,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奖项慷慨赞助。