详细介绍了fuzzing 工具spike自动化挖掘漏洞的过程
注意,字符串“UNKNOWN COMMAND”正是由我们发往服务器,然后又被服务返回给客户端。Vulnserver在接收到SPIKE的数据后,还可以返回一response数据,这表明它很稳定,并没在崩溃的边缘。稍后当我们真正引发程序崩溃的时候,这段信息将变得非常重要。
我们看一下下一个请求,在Follow TCP Stream窗口底部点击Filter Out This Stream按键,在Wireshark新的过滤视图中右击然后选择Follow TCP Stream选项。这时我们会看到一些有趣的东西。在上一个请求的“COMMAND”文档中,在插入其他随机字符串之前,SPIKE插入了一个非常长的由A组成的字符串。如图:
如果好奇,你可以继续过滤其他SPIKE发送的Fuzzing 数据(Filter Out This Stream)。我们主要需要理解的是每次使用s_string_variable命令,SPIKE将发送括号中的数据,然后再用fuzz 列表迭代发送,直到发完为止。如有你的脚本里有多个变量,他将反过来为每一个变量遍历所有可能值,变量将被括号中提供的值依次替换。
我们能做的是参考一个脚本创建生成多个独立的SPIKE脚本。若想测试固定类型数据,如各种命令( STATS, RTIME, LTIME等),我们必须使用个别SPIKE脚本(如是s_string)来定制他的数据结构。
本文表述了运行一个SPIKE脚本的基本流程,但是Vulnserver仍有许多可以fuzz测试的地方,尽管有些看起来不方便执行和监控崩溃状态。
我们所需要的是在大量发送SPIKES fuzzing数据的同时,可以详细记录返回的细节,并在程序生成崩溃的时候可以停下来。SPIKES在程序发生崩溃的时刻可以下来,让我们可以细细地分析输入数据,当再次启动程序时,它会从中断处继续fuzzing下去。
幸运的是,我们可以在fuzzing测试的过程中修改数据。下面概括了我们如何处理fuzzing任务的其他部分。
1、我们为每一段我们想fuzz的信息生成相应的.spk文件。在这种情况下,我们可以为每一个可用的命令生成.spk文件,如 STATS, RTIME等。我们也可以给予这些SPIKE脚本连续的文件名,添加额外的命令到脚本中,这样我们可以从SPIKE得到额外的终端输出信息。