详细介绍了fuzzing 工具spike自动化挖掘漏洞的过程
root@bt4r1vm:~/fuzzing# perl -e 'print "x41" . "n"'
A
因此,是在大量的“A”字符串中的某4个A字符设置了EIP寄存器的值。我不会深究为什么会这样,但是如果你正寻找可利用的漏洞,这绝对是一个好的信号。
呵呵,我们已经找到程序的第一个bug了,我们可以继续Fuzzing程序的其他输入向量。重启Wireshark抓包器、Vulnserver,将SKIPFILE变量设为6,运行我们的打包程序。这将跳过前6个我们已经测试过的SPIKE脚本,从数字7开始,在本例子中就是06gmon.spk文件。
root@bt4r1vm:~/fuzzing# ./fuzzer.pl 192.168.56.101 9999 6 0 0
若是你一直盯着调试器看,你几乎立即就会发现又出现崩溃了。然而,SPIKE会继续运行一段时间,直到最终停止。终端最后两行输出信息如下:
[...SNIP...]
GMON 06gmon.spk : Variablesize= 10000
Fuzzing Variable 0:201
GMON 06gmon.spk : Variablesize= 5000
Fuzzing Variable 0:202
Couldn’t tcp connect to target
Stopped processing file 06gmon.spk
看起来是fuzzing数据引发了程序的错误。像之前一样,在终端中向上翻看,Welcome信息不再被显示。
打开Wireshark,用Edit--Find Packet选项,在最后一个数据包中向上搜索“Welcome”字符串,在Follow TCP Stream中的内容看起来应该比较熟悉。服务器有出现了崩溃,是GMON命令引起的。。。接下来又是一串随机的A字符串。
让我们拷一份为TRUN命令寻找bug的perl脚本,修改后为GMON命令做相同的操作。(在第一行把$baddata变量由TRUN修改为GMON)。拷一份trun.pl脚本,命名为gmon.pl,然后确认它的内容如下:
#!/usr/bin/perl
use IO::Socket;