详细介绍了fuzzing 工具spike自动化挖掘漏洞的过程
SPIKE脚本命令
为了写一个SPIKE脚本,我们首先需要知道一些可用的命令以及它们做了些什么。 如果你想了解SPIKE的命令组成,我们通过检查如.spk或spike.h等文件来探索发现。Spike.h文件会列举出可用的原函数(命令),.spk文件提供关于这些命令使用的例子。
我们要记住的是spike脚本功能只支持spike.h的子集。因此,你只能使用SPIKE的内置命令。
为了避免探索这些文件的麻烦,我在下边将列出一些更为有用的SPIKE的原始脚本。spike.h文件由C语言写成,它用C语言的语法与数据结构列出了每个SPIKE命令。对于那些不熟悉C的人来说,我通过用展示例子的方式来使你更加容易的复用代码,写出你自己的脚本。“//”在C中是用来加备注的(编译器在编译程序时将忽略//之后内容),所以接下来我会用这种方式为每个命令提供额外的解释 。当然,你可以忽略的这些解释或者添加自己的解释,这些内容都会被SPKE忽略掉。
接下来我会断断续续的介绍字符串、二进制数据、块以及其他有用的结构。
Strings字符串
strings命令提供给我们向SPIKES添加ASCII字符的方式。同样是字符串命令的 s_string_variable函数,事实上是一个向SPIKE添加fuzz 字符串的非常重要的命令。
s_string(“string”);//作为“SPIKE”的一部分,简单的输出字符“string”
s_string_repeat(“string”,200);// 重复字符“string” 200次
s_string_variable(“string”);//向你的SPKIE中插入一段字符串,字符串“string”
将被用作这个变量的第一次循环,以及其他循环中的s_string_variables变量。
Binary Data二进制数据
binary命令提供了一种向SPIKES添加二进制数据的方法。它们可以支持各种各样的定制的二进制数据。
s_binary(“\x41″);//插入二进制数据,16进制表示为0x41,ASCII码为A
s_binary_repeat(“\x41″, 200);//插入二进制数据0x14 200次
对于SPIKE的二进制命令,相同数据不同书写方式都是可用的。为了输出跟上面相同的16进制字符,我们可以用“41”或者“0x41”,我们还可以混合这些值(如:用“410x41\x42”来输出ASCII码“AAB”)。任何空格都将被忽略,所有这些方便剪切/粘贴的数据都来自于这些用16进制表示的应用程序,如包捕获工具/调试器等。
Defining Blocks定义块