0x00 前言
Peach是个开源的Fuzz框架,支持对文件格式、ActiveX、网络协议、API等对象的模糊测试,迄今一共发了三版,前两版是python写的,最后一版用C#重构了整个框架,支持windows、linux、OSX多个平台
之前学习了下Sulley,但,emmm…讲真,Peach比Sulley容易上手太多了,无论是搭建还是使用,建议新手从Peach开始学习
环境搭建
网络上对windows下搭建peach的文章有很多,Linux的较少(中文),写的也挺乱的,其实官网上介绍的很全面:
分别介绍了两种安装方法,这里我选用的是第一种,直接用它编译好的文件,如果有需要对peach进行拓展的可以选用第二种
具体步骤如下:
1、下载release版的shell文件
http://www.peach.tech/resources/peachcommunity/
2、安装组件:
sudo apt-get install build-essential g++-multilib mono-complete
3、验证
解压下载的peach压缩包,进入peach目录执行
./peach
Peach Pit
关于peach的语法,pit文件的编写,官方文档已经写的很详尽了,给个中文版的下载连接:https://www.jianshu.com/go-wild?ac=2&url=https%3A%2F%2Fdownload.csdn.net%2Fdownload%2Fsherlock17%2F10317690
Peach3官方文档
例子
下面是一段登录验证的c代码:
sample.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int fun_test1(char * tmp)
{
char pass[32];
memcpy(pass,tmp+1,tmp[0]);
// do pass
if(memcmp(pass,"123456",6) == 0)
{
printf("OK\n");
return 1;
}
return 0;
}
int fun_test(char * tmp)
{
if (tmp[0] == 't') {
if (tmp[1] == 'e') {
if (tmp[2] == 's') {
if (tmp[3] == 't') {
fun_test1(tmp+4);
}
}
}
}
return 0;
}
int main(int argc, char** argv)
{
char tmp[32];
int len;
if(argc < 2 )
{
len = fread(tmp,1, sizeof(tmp),stdin);
}
else
{
FILE * fd = fopen(argv[1],"rb");
if(!fd)
return 2;
len = fread(tmp,1,sizeof(tmp),fd);
fclose(fd);
}
fun_test(tmp);
return 0;
}
在kali下编译:
进入sample.c文件所在目录:
gcc sample.c -o sample
种子文件 sample.bin
test 123456123456
编写pit文件 fuzz.xml
懒得贴了,调markdown的格式很烦,自行下载吧 fuzz.xml
https://www.jianshu.com/go-wild?ac=2&url=https%3A%2F%2Fdownload.csdn.net%2Fdownload%2Fsherlock17%2F10317699
运行Peach
./peach [文件路径]/fuzz.xml
在设置的日志目录下可看到存储的异常日志信息
作者:Sh3rl0ck_17
链接:https://www.jianshu.com/p/ec76dfbdc574
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。