AFL-FUZZ模糊测试神器,自由的遗传学算法,导致用例的生成格外有效。
但是AFL默认支持STDIN和FILE形式的用例,那么如何对一个C/S架构的网络协议软件进行模糊测试呢?
If testing a network service, modify it to run in the foreground and read from stdin.
ok,这里是帮助文档的简单描述。
以下,我要对我在实际中遇到的项目进行描述,从而介绍一下如何使用AFL-FUZZ对网络协议进行模糊测试。
首先,模糊测试区分黑盒测试和白盒测试,那么如何快速进行模糊测试Demo呢?那自然是黑盒测试更简单便捷,测试用例也更有效。
老规矩贴代码。
string data;
ifstream file;
file.open(argv[1]);
file>>data;
这样,就可以从文件中获取用例,接着呢,自然是跟server段建立连接,并发送。
这段代码就不献丑了。
使用AFL进行模糊测试之前需要获取一个有效的用例,OK,wireshark抓取,然后转存Hex
然后使用python decode("hex") 保存到文件中,放到in目录。
然后开始进行模糊测试
afl-g++ -o poc poc.c
afl-fuzz -i in -o out ./poc @@
最后短短2分钟,竟然测出两个bug,UAF 和 Double free。