我目前正在研究Windows漏洞开发,并正在通过Spike查找应用程序中的一些崩溃我已经通过我编写的scapy脚本手动定位了一个崩溃,并修改了某些数据我当前的问题是试图为其他崩溃编写一个Spike模板来模糊化,但我目前无法使Spike模糊化为我发送的二进制数据——它总是发送相同的东西利用其他尖峰呼叫,即s_word
,s_binary_bigendian_word
所有结果:generic_send_tcp: undefined symbol: s_word
generic_send_tcp: undefined symbol: s_binary_bigendian_word
等。
所讨论的应用程序是“Disk Saavy 10.4.18”,它通过SEH有一个已知的缓冲区溢出我知道有一个漏洞——请不要把我和它联系起来我试图学习如何从模糊二进制协议到充分利用。
我已经捕获了一些初始流量,并将其转换为scapy脚本以3WHS,然后PSH,ACK我的数据下面是样本包的原始数据:
0000 75 19 ba ab 03 00 00 00 00 00 00 00 1a 00 00 00 u...............
0010 20 00 00 00 00 00 00 00 53 45 52 56 45 52 5f 47 .......SERVER_G
0020 45 54 5f 49 4e 46 4f 02 32 01 44 41 54 41 01 30 ET_INFO.2.DATA.0
0030 01 00 00 00 60 c0 f1 02 ....`.......`...
前12个字节必须保持原样(似乎不是我的问题的一部分),否则应用程序无法正确解析它但是,这四个字节之后直接插入ECX将这四个值改为类似于
1A CC CC CC
的值会导致ECX运行良好、beCC CC CC 1A
并且应用程序崩溃一切都很好Scapy很棒,但我更喜欢用SPIKE这样的模糊框架来模糊。第一个(和第二个)问题:虽然查看Spike的“文档”允许我创建一个模糊模板并发送数据,但我目前无法真正“模糊”我的目标字节我的Spike脚本(可能很糟糕)如下:
s_binary("\\x75\\x19\\xBA\\xAB\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00");
s_block_start("ecx");
s_binary("0x1A000000");
s_block_end("ecx");
s_binary("\\x20\\x00\\x00\\x00\\x00\\x00\\x00\\x00");
s_string("SERVER_GET_INFO");
s_binary("\\x02");
s_string("2");
s_binary("\\x01");
s_string("DATA");
s_binary("\\x01");
s_string("0");
s_binary("\\x01\\x00\\x00\\x00");
s_string("`");
s_binary("\\xC0\\xF1\\x02");
Side note-- if there's a better way to write this script, let me know.
(minus the block, that's just for learning)
使用
generic_send_tcp 192.168.138.134 9124 diskSaavy.spk ecx 0
运行模板可以工作,服务器会做出响应,但是负载中的字节永远不会被修改,并且相同的负载会一遍又一遍地发送我做错什么了?现在,查看文档和许多google之后,尝试了许多其他更具针对性的值,比如分别
s_word
、s_binary_word
s_binary_bigendian_word_variable
和LE以上都是通过谷歌和An Introduction to SPIKE, the Fuzzer Creation Kit和Fuzzing Frameworks等文章找到的所以我把
s_binary("0x1A000000");
改成s_binary_variable("0x1A000000");
,s_word("0x1A000000");
等,每次我得到:# generic_send_tcp 192.168.138.134 9124 diskSaavy.spk ecx 0
Total Number of Strings is 681
Fuzzing
Fuzzing Variable 0:0
generic_send_tcp: undefined symbol: s_word <--- my call
我快疯了到目前为止,我已经尝试了各种不同的调用,比如上面的示例,并按照上面一个相关问题的答案安装了
binutils
,但是没有解决方案我已经读到undefined symbol
可能与链接器问题有关,但这超出了我的知识水平我希望能得到任何帮助。有什么想法吗谢谢。
最佳答案
我不知道那个钉子还能用Sulley取代了它,但也不是很活跃boofuzz在一些samem原则上更积极地维护和运行Documentation。
对Spike不太确定,但是Sulley和boofuzz有一个“fuzzable”参数,当设置为false时,该参数将禁用元素上的fuzzing,因此您可以尝试将其显式设置为true(但通常默认情况下为true)。
编辑:披露:我维护boofuzz。