-
-
SPIKE使用总结
-
发表于:
2009-5-18 18:00
8998
-
各位好啊!
我是wwwljc,最近需要使用SPIKE,所以在网上找了个来学习。关于SPIKE的使用说明很少,我还是通过看源码才有一点体会,这里就共享出来,错误之处请大侠们批评指正啊!
1:编译
进入src目录运行:
make clean
automake && autoheader && autoconf && ./configure
make
. ./ld.sh
2:基本使用方法
failwest的《0day安全:软件漏洞分析技术》一书中描述了SPIKE的基本使用方法,我这里就不再介绍了。
3:文件编译
我认为,我们可以认为SPIKE提供了一组Fuzzing所需的函数库,而实际上我们需要调用这些库函数编写相应的程序实现Fuzzing。实际操作中,对于那些开源的协议,可以直接阅读相关文档进行分析,而对于一些介绍很少的协议,推荐使用wireshark等软件解码后再编写程序。
针对我自己的编写的程序,编译命令如下:
gcc -o generic_send_tcp generic_send_tcp.c -I ../include/ dlrpc.o dlargs.o spike.o listener.o hdebug.o tcpstuff.o spike_dcerpc.o base64.o udpstuff.o spike_oncrpc.o -ldl -L. -ldlrpc
. ./ld.sh
各位可以根据自己的需要导入相关的文件进行编译。
4:源码介绍
在阅读SPIKE源码的时候,发现代码应该不算很难看懂,只不过有些地方很晕,主要原因是一些变量很难理解,这样就导致对程序的了解不深刻。这里我就简单介绍下struct spike结构中的部分变量,通过了解这些变量的含义,就可以轻松看源码了。
4.1 int didlastvariable;
测试是否为最后一个变量,也就是fuzzvariable是否为最大值
4.2 int didlastfuzzstring;
是否为最后一个fuzzing string的下标
4.3 int didlastfuzzint;
是否为最后一个fuzzing int的下标
4.4 int fuzzstring;
当前变量fuzz string/int的下标
4.5 int fuzzvariable;
第fuzzvariable个变量或第fuzzvariable次循环
4.6 int currentvariable;
如果fuzzvariable==currentvariable,则将这个变量进行fuzzing,其他变量保持不变
4.7 int firstvariable;
currentvariable==0,则firstvariable=1; currentvariable!=0,则firstvariable=0
5:常用函数
s_binary("00 00");
插入二进制数据
s_string("Referer\r\n");
插入一个字符串常量
s_int_variable(0x00,3);
插入一个int变量
s_string_variable("test\r\n");
插入一个字符串变量
s_string_variables('&',"username=bob&password=feet");
插入多个字符串变量
总结:以上是我这段时间研究SPIKE的成果,有错误之处,还请指正啊。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课