SPIKE工具包测试

模糊测试(Fuzzing)简介:是一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。其核心思想是自动或半自动的生成随机数据输入到一个程序中,并监控目标程序异常,如崩溃,断言(assertion)失败,以发现可能的程序错误,比如内存泄漏等。
测试过程:
a) 确定测试的目标
b) 确定输入的向量
c) 生成模糊测试数据,可由测试工具通过随机或是半随机的方式生成
d) 测试工具将生成的数据发送给被测试的系统(输入)
e) 测试工具检测被测系统的状态(如是否能够响应,响应是否正确等)
f) 根据被测系统的状态判断发现是否有漏洞可以被利用

SPIKE工具简介:

SPIKE 最广泛使用最知名的一个框架。使用C语言编写,提供了一系列允许快速和高效的开发网络协议模糊测试器的API。在SPIKE中,数据结构被分解表示成块,也叫SPIKE,这个块同时包含二进制数据和块大小。


VUlnserver--是一个基于Windows的多线程TCP服务器,它侦听端口9999上的客户端连接(默认情况下),并允许用户运行许多不同的命令,这些命令容易受到各种类型的可利用缓冲区溢出的攻击。
github下载连接:https://github.com/stephenbradshaw/vulnserver/

模糊测试实践:

SPIKE有几个通用模糊测试器,他们接收脚本作为输入,下面列出能在SPIKE中找到的通用模糊测试器:

TCP监听模糊测试器(客户端)
TCP/UDP发送模糊测试器
行缓冲TCP发送模糊测试器
接下来介绍一下字符串、二进制数据、块以及其他有用的结构。

1. 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变量。

2.Binary Data二进制数据 
binary命令提供了一种向SPIKE添加二进制数据的方法。它们可以支持各种各样的定制的二进制数据。

s_binary("\x41");//插入二进制数据,16进制表示为0x41,ASCII码为A  
s_binary_repeat("\x41", 200);//插入二进制数据0x14 200次 

3.Blocks 块 

块定义命令允许你用SPIKE脚本指定已命名块的起始与结束点。这允许你在SPIKES内用block size命令定义那些数据段的大小。

s_block_start("block1"); //定义块"block1"的起始位置  
s_block_end("block1"); // 定义块"block1″的结束位置 
s_blocksize_string("block1", 2); // 添加一个2个字符长的字符串到SPIKE中来代表block1块的大小  
s_binary_block_size_byte("block1"); //添加1byte数据到SPIKE中来代表block1块的大小 

4. 其他有用的命令

s_read_packet(); // 读取来自服务器的数据,并显示到屏幕上  
s_readline(); // 从服务器上读取一行输入信息 

 

 

1) Kali Linux服务器默认继承安装了SPIKE模糊测试工具包,可以使用gereric_+2次TAB输出工具包中的工具


2) tcp模糊测试需要使用generic_send_tcp工具,直接输入工具获取帮助信息
3) 编写SPIKE脚本,默认脚本存储位置/usr/share/spike/
SPIKE脚本是以.spk为结尾,并且脚本文件中具有特定方法。


s_readlin(); 从服务器读取一行内容,s_string("字符串")
s_string("string"); 打印字符串,内容为"string"
s_string_repeat("string",200); 重复字符串"string" 200次

测试结果:

posted @ 2021-07-06 21:12  宇宙刘  阅读(1064)  评论(0)    收藏  举报