详细介绍了fuzzing 工具spike自动化挖掘漏洞的过程
2、然后我们创建一个包装程序,它将用generic_send_tcp解释器运行每一个SPK文件。在理想状态下,包装程序可以从任何一个script文件开始;当 generic_send_tcp向关闭的端口发送信息时,它可以为我们提供一些有用的信息。(用来表示程序发送数据失败)
3、测试框架启动后,我们可以重复下面的步骤,知道我们停止fuzzing:
在调试器中加载程序,在Wireshark中开启一个信息的数据捕获实例;
从上次离开的位置继续运行wrapper程序,它将针对目标程序一直运行下去,
直到遇到崩溃;
当wrapper程序停止,我们在调试器中检查程序运行状态,来自程序的命令行
输出与抓包的数据可以让我们判定是什么引起了程序的崩溃。
一旦我们去顶你问题数据,我们可以将其插入exploit框架,再次针对目标程
序发送测试数据,看程序崩溃是否可重现。
重复工作,直到fuzzing程序结束。
首先,生成合适的SPIKE脚本文件。在Linux fuzzing 系统上新建目录,将下面内容拷到“00help.spk”文件中去。
printf("HELP 00help.spk : "); //print to terminal command and filename
s_readline(); //print received line from server
s_string("HELP "); // send "HELP " to program
s_string_variable("COMMAND"); //send fuzzed string
相比最后生成的SPIKE文件,我们已经向其中添加里一些新的行。一开始,用C语言的打印函数将信息打印到终端界面,当fuzzing脚本中断的时候,这些信息可以标示本脚本命令的身份。我们把要fuzzing的命令和脚本名称放到括号内。下一条命令中s_string添加一个静态字符串“HELP ”到SPIKE发送。(注意HELP之后的空格,这与命令HELP是有区别的)
脚本的目的就是想HELP命令的参数插入fuzz数据,让Vulnserver反馈大量相关的信息,来让我们看明白发生了什么。
我们用基础模板生成SPIKE脚本,测试Vulnserver的每个命令。使用命令列表,我们可以批量测试文件如: 01stats.spk, 02rtime.spk, 03ltime.spk。我们可以定义连续的文件名,提供一简单定位断点的方法。
为了避免我们忘了那些在协议分析会话中发现的可支持命令,这再叨叨一次。
HELP
STATS [stat_value]
RTIME [rtime_value]
LTIME [ltime_value]
SRUN [srun_value]
TRUN [trun_value]
GMON [gmon_value]
GDOG [gdog_value]