work节点使用外部包_AFLSmart工具简单分析及使用介绍

AFLSmart 是一个在 AFL 基础上,结合了 Peach 的结构化输入组件的灰盒 smart fuzz 工具。

AFLSmart 链接:https://github.com/aflsmart/aflsmart

参考资料:《Smart Greybox Fuzzing》

什么是 AFLSmart

灰盒 smart fuzz

灰盒测试是基于程序运行时刻的外部表现同时又结合程序内部逻辑结构来设计用例,执行程序并采集程序路径执行信息和外部用户接口结果的测试技术。

具有结果反馈功能的模糊测试即属于灰盒 fuzz,如 AFL,会对待测程序进行插装,从而监控每个输入的路径覆盖率,为下一次选择输入文件进行变异提供依据。

smart fuzz 是面向具有高度结构化输入(如,PPT,mp3,PDF 等)的程序进行测试的一类模糊测试工具,典型的 smart fuzz 工具如 Peach。使用 Peach 的关键在于名为「Peach Pit」的 xml 配置文件。「Peach Pit」主要包含了文件的数据信息。

AFLSmart

AFLSmart 在 AFL 的基础上,参照了 Peach 的 File Cracker 组件,将文件按 chunk 划分,抽象为一个可以用 xml 文件描述的树形的结构,如下图为一个 wav 格式的文件抽象为 xml 文件的表示:

7062e549fe4377109f8dd0df40fdb230.png

针对结构化的输入,AFL 提供了基于字典的方法进行解决,然而该方法的缺陷在于,在变异的时候,仍然处于 bit 级别的变异,AFL 无法对一个文件块进行增加和删除操作。   

AFLSmart 源码中,对 chunk 结构的定义如下:

struct chunk {
unsigned long
id; /* The id of the chunk, which either equals its pointer value or, when
loaded from chunks file, equals to the hashcode of its chunk
identifer string casted to unsigned long. */
int type; /* The hashcode of the chunk type. */
int start_byte; /* The start byte, negative if unknown. */
int end_byte; /* The last byte, negative if unknown. */
char modifiable; /* The modifiable flag. */
struct chunk *next; /* The next sibling child. */
struct chunk *children; /* The children chunks linked list. */
};

一个 chunk 结构里定义了 chunk 的类型、开始位置、结束位置、表示是否被修改的标志位、以及 chunk 的子节点和 next 节点。

在 AFL 的 bit 级别的变异的基础上,AFLSmart 增加了对 chunk 级别的变异操作,主要包括三种操作:

smart deletion:

在这种方法中,会对给定的种子文件,随机选取 chunk 进行删除。

83c3db1ee9f9d162b326e27c0484403d.png

smart addition:

在这种方法中,给定一个种子文件 S1,随机选取一个种子文件 S2,在 S2 中随机选取一个 chunk C2,将 C2 插入到 S1 中和 C2 具有相同父节点的 chunk C1 的后面(C1.parent.type ==C2.parent.type)   

54b3ff398eb93f3ae16f4252f5651ae6.png

smart splicing:

这种方法中,对于给定的种子文件 S1,随机选取 chunk C1,随机选取种子文件 S2,找到 S2 中与 C1 类型相同的 chunk C2,将 C2 替换到 C1 的位置上。   

254e4304dcf4176a55a35d040d8f0692.png

AFLSmart 的安装

1. 安装 automake 及一些其他的包

sudo apt-get install build-essential automake libtool libc6-dev-i386 python-pip g++-multilib

2. 安装 mono 包,为了在 Linux 上支持 C#

sudo apt-get install mono-complete

3. 安装 gcc-4.4 以及 g++-4.4,(Peach 中的 Pin 组件在更高的 gcc 版本中会发生一些编译问题)   

sudo add-apt-repository ppa:ubuntu-toolchain-r/test    sudo apt-get update    sudo apt install gcc-4.4    sudo apt install g++-4.4

如成功,则直接看第四步,如不能成功,可尝试以下命令

sudo gedit /etc/apt/sources.list

向文件中添加如下内容:    

deb http://dk.archive.ubuntu.com/ubuntu/ trusty main universe

然后安装

sudo apt-get update    sudo apt install gcc-4.4    sudo apt install g++-4.4

4. 环境成功准备好后,开始 AFLSmart 的安装

git clone https://github.com/aflsmart/aflsmart    cd aflsmart    make clean all    cd ..    export AFLSMART=$(pwd)/aflsmart    export WORKDIR=$(pwd)

5. 修改 Peach 的版本

cd $AFLSMART    wget https://sourceforge.net/projects/peachfuzz/files/Peach/3.0/peach-3.0.202-source.zip    unzip peach-3.0.202-source.zip    patch -p1 < peach-3.0.202.patch    cd peach-3.0.202-source    CC=gcc-4.4 CXX=g++-4.4 ./waf configure    CC=gcc-4.4 CXX=g++-4.4 ./waf install

6. 设置 PATH 的环境变量

export PATH=$PATH:$AFLSMART:$AFLSMART/peach-3.0.202-source/output/linux_x86_64_debug/bin    export AFL_PATH=$AFLSMART    export LD_LIBRARY_PATH=/usr/local/lib

7. 进入到 AFLSmart 目录,输入

./afl-fuzz

出现如下界面,说明安装成功。

014b16471fe7ee1f648123362e02e910.png

AFLSmart 的使用

熟悉 AFL 的朋友,对于 AFLSmart 的使用应该不会太陌生,AFlSmart 的使用方法与 AFL 基本一致。这里还是以 tcpdump 为例,对 AFLSmart 的使用进行一个简单的介绍。

测试 tcpdump 之前,首先应该下载 tcpdump 源码包,下载地址:http://www.tcpdump.org/,在这个地址,下载 tcpdump 包与 libpcap 包。

下载 tcpdump 的一些其他依赖包:下载 bison 包,下载地址:ftp.gnu.org/gnu/bison,   下载 m4 包,下载地址:ftp.gnu.org/gnu/m4/。

1. 安装 libpcap:

tar -zxvf libpcap-1.3.0.tar.gz     cd libpcap-1.3.0    ./configure    make     make install

2. 输入命令,安装 flex

sudo apt-get install flex

3.bison 与 m4 包的安装步骤与 libpcap 的相同,参照上述命令即可。

4. 使用 afl-gcc 对 tcpdump 进行编译,afl-gcc 会在对 tcpdump 进行编译时,对 tcpdump 进行插桩,从而方便监控用例的路径覆盖情况。命令如下:

tar -zxvf tcpdump-4.3.0.tar.gz     cd tcpdump-4.3.0    CC=./aflsmart 安装目录/afl-gcc ./configure    make clean all    make install

编译过程中,出现如下界面,说明使用 afl-gcc 对 tcpdump 进行编译成功。

b21d98afba6a6075dcf2097d8d00d8bc.png

tcpdump 的命令格式如下:

tcpdump [ -adeflnNOpqRStuvxX ] [ -c 数量 ] [ -C 文档尺寸 ] [ -F 文档名 ] [ -i 网络接口 ] [ -m 文档名 ] [ -r 文档名 ] [ -s 长度 ] [ -T 类型 ] [ -w 文档名 ] [ -E algo:secret ] [ 表达式 ] 

tcpdump 常用命令行选项:

-a 将网络地址和广播地址转变成容易识别的名字 

-d 将已截获的数据包的代码以人容易理解的格式输出; 

-dd 将已截获的数据包的代码以 C 程式的格式输出; 

-ddd 将已截获的数据包的代码以十进制格式输出; 

-e 输出数据链路层的头部信息; 

-f 将 internet 地址以数字形式输出; 

-l 将标准输出变为行缓冲方式; 

-n 不将网络地址转换成易识别的主机名,只以数字形式列出主机地址 (如 IP 地址),这样能够避免 DNS 查询; 

-t 不输出时间戳; 

-v 输出较周详的信息,例如 IP 包中的 TTL 和服务类型信息; 

-vv 输出详尽的报文信息; 

-c 在捕获指定个数的数据包后退出; 

-F 从指定的文档中读取过滤规则,忽略命令行中指定的其他过滤规则; 

-i 指定监听的网络接口; 

-r 从指定的文档中读取数据包 (该文档一般通过-w 选项产生); 

-w 将截获的数据包直接写入指定的文档中,不对其进行分析和输出; 

-T 将截获的数据包直接解释为指定类型的报文,现在支持的类型有 cnfp、rpc、rtp、snmp、vat 和 wb。

接下来,我们将使用 AFLsmart 对 tcpdump 的 -nr 功能进行测试,该参数的作用是从指定的文档中读取数据包。

6. 收集测试用例。我们需要 pcap 格式的输入,对 tcpdump 的-nr 功能进行测试。在 tcpdump 源码包中有一个 tests 文件夹,包含了许多我们测试所需的 pcap 文件。这里,我们直接使用这些 pcap 文件进行测试。

新建一个 tcpdumptest 文件夹,方便测试。将 testes 文件夹复制过来,只保留 pcap 的数据。

cd tcpdumptestmkdir incd testscp *.pcap ../incd ..rm -f tests

AFL 中还有一些对数据进行处理的工具,可以对输入数据进行覆盖率分析等,压缩输入文件的大小,从而提高测试的效率。如 afl-tmin、afl-cmin。网上已有许多介绍 AFL 的文章了,这里对这些工具就不重复介绍了。

你可以使用这些工具对 pcap 包进行一个处理,也可以不处理,直接使用它们进行测试。

7. 测试 tcpdump

输入命令:

cd aflsmart ./afl-fuzz -i ../testaflsmart/tcpdump/in/ -o ../testaflsmart/tcpdump/out/ tcpdump -nr @@

可能会出现如下界面:

7709b0e9e05c0edd6ddbf05c6b9bd0e9.png

按照图片提示,进入 root 用户模式,输入命令即可。

最终运行界面如下图所示:

c343b83a963f99e19d081564b3b6fc69.png

AFLSmart 的测试

在 smart greybox fuzz 文中提到,他们使用 AFLSmart 与 AFL、Peach、AFLfast 对几种具有结构化输入的程序进行测试,结果如下如所示:

388f07d08509953ca1a6ec84d8268e7b.png

由上图可以看出,AFLSmart 在测试 AVI、WAV、JPEG2000 这三种格式时,与其他三种工具相比,优势明显。

*本文作者:红玫瑰与黑玫瑰,转载请注明来自FreeBuf.COM

b17ea1f694ad27b4263e38a39a82a0b8.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android日志[基础篇]二 Android Studio修改LogCat日志的颜色

上一篇提到Android日志的5个级别的日志输出&#xff0c;在logcat里面设置自己喜欢或习惯的颜色&#xff0c;本文不只讲Android Sudio修改logcat的日志颜色。 代码和效果 代码 private void logColor(){Log.v(TAG,"logColor verbose");Log.d(TAG,"logColor de…

readfile函数使用方法_1分钟学会LOOKUP函数,有网友说使用这个方法,初学者秒变大神...

Hi&#xff0c;大家好&#xff0c;本专栏将会从零开始和大家用图文的方式&#xff0c;30天让你从不会到熟练使用函数&#xff0c;0基础开始学习Excel函数&#xff0c;让你喜欢上它&#xff01;有兴趣的小伙伴可以持续关注我&#xff0c;或者在专栏进行查看学习&#xff0c;愿与…

背景图层和普通图层的区别_图层样式(一)—高级混合选项

一、图层顺序为了便于说明&#xff0c;首先建立例子&#xff0c;新建图层&#xff0c;用画笔随便画个圈&#xff0c;新建蒙版随便画一笔&#xff0c;然后把所有图层样式加给它。可以看到样式从上到下的顺序&#xff0c;这也是它们混合的图层顺序。图层顺序我的效果&#xff0c;…

Android9.0 http网络请求失败问题的处理

目录处理方法(任意一种)&#xff1a;APP改用https请求targetSdkVersion 降到27以下配置network-security-config&#xff08;推荐&#xff09;原因出错案例处理方法(任意一种)&#xff1a; APP改用https请求 这种方式是最佳方法&#xff0c;需要前后端协调&#xff0c;后端得…

代码里无图片地址_项目实战:爬高清图片

↑ 关注 星标 &#xff0c;后台回复【大礼包】送你2TPython自学资料好消息&#xff1a;Python学习交流群&#xff0c;已经建立&#xff0c;猛戳加入之前我发过一些爬虫的文章&#xff0c;不过一直没发过爬取图片的&#xff0c;今天就给大家分享一篇吧&#xff01;/1 前言/上篇…

Android TextView通过SpannableString设置字体、大小、颜色、样式、超级链接

代码应该都能看明白 public class MainActivity extends ActionBarActivity {private TextView tv, tv2;private SpannableString sStr, sStr2;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.act…

winform项目_winform项目——仿QQ即时通讯程序01:原理及项目分析

即时通讯程序&#xff0c;腾讯QQ可以说是一家独大&#xff0c;虽然市场上仍然有类似QQ的即时通讯程序&#xff0c;但是基本上面向的对象都是特定人群。那么&#xff0c;现在做一个即时通讯的软件还有意义吗&#xff1f;在我看来&#xff0c;意义非常大。作为一个学习编程的人&a…

Android日志[进阶篇]二-分析堆栈轨迹(调试和外部堆栈)

Android日志[进阶篇]一-使用 Logcat 写入和查看日志 Android日志[进阶篇]二-分析堆栈轨迹(调试和外部堆栈) Android日志[进阶篇]三-Logcat命令行工具 Android日志[进阶篇]四-获取错误报告 Android日志[进阶篇]五-阅读错误报告 目录调试中的堆栈轨迹从外部来源打开堆栈轨迹监控剪…

Android日志[进阶篇]一-使用 Logcat 写入和查看日志

Android日志[进阶篇]一-使用 Logcat 写入和查看日志 Android日志[进阶篇]二-分析堆栈轨迹(调试和外部堆栈) Android日志[进阶篇]三-Logcat命令行工具 Android日志[进阶篇]四-获取错误报告 Android日志[进阶篇]五-阅读错误报告 目录查看应用日志写入日志消息Logcat 消息格式设置…

哈希表数据结构_算法与数据结构-哈希表

前面我们已经讲到了数组和链表&#xff0c;数组能通过下标 O(1) 访问&#xff0c;但是删除一个中间元素却要移动其他元素&#xff0c;时间 O(n)。 循环双端链表倒是可以在知道一个节点的情况下迅速删除它&#xff0c;但是吧查找又成了 O(n)。难道就没有一种方法可以快速定位和删…

Android日志[进阶篇]四-获取错误报告

Android日志[进阶篇]一-使用 Logcat 写入和查看日志 Android日志[进阶篇]二-分析堆栈轨迹(调试和外部堆栈) Android日志[进阶篇]三-Logcat命令行工具 Android日志[进阶篇]四-获取错误报告 Android日志[进阶篇]五-阅读错误报告 目录前言从设备上获取错误报告从 Android 模拟器上…

下列哪个适合做链栈_朋友圈人格图鉴:三天可见 vs 全部可见,哪个更适合做恋人?...

你们的朋友圈里有没有这样几种人&#xff1f;<< 朋友圈大赏 >>你可能已经对这些朋友圈的风格习以为常&#xff0c;其实&#xff0c;每个人在朋友圈展示的语言、行为&#xff0c;可能默默揭示着一个人自己原本是怎样的人、想成为什么样的人&#xff0c;以及与他人的…

iatf16949内审员_申请IATF16949认证有什么要求

1、证件要求必须要提供三证合一的营业执照&#xff08;在有效期内&#xff09;&#xff0c;营业执照的范围必须与申请IATF16949认证范围一致。2、处于汽车供应链的证明因为IATF16949认证要求厂家必须是直接与生产汽车有关的&#xff0c;具有加工制造能力&#xff0c;并通过这种…

GenseeSDK DocView(OpenGL)引起的TextView显示黑块

现象 先上图&#xff1a; 正常的图&#xff1a; 来到这的大侠是否也出现了同样的问题。 操作与描述 退出直播播放器后&#xff0c;整个app界面所有的TextView(EditText/Button)都显示为黑块。 快速解决 退出直播或点播后不要调用DocView的closeDoc函数即可&#xff0c;当…

Android WebView https白屏、Http和Https混合问题、证书配置和使用

目录前言启用https后白屏&#xff08;证书错误&#xff09;修改处理WebView中Http和Https混合问题处理办法Webview的几种内容加载模式证书配置或处理https请求的证书okhttp进行请求&#xff1a;HttpsURLConnection忽略证书前言 原有项目中有部分界面是用webview展现的h5页面&am…

tensorrt轻松部署高性能dnn推理_基于TensorRT车辆实时推理优化

基于TensorRT车辆实时推理优化Optimizing NVIDIA TensorRT Conversion for Real-time Inference on Autonomous Vehicles自动驾驶系统使用各种神经网络模型&#xff0c;这些模型要求在GPU上进行极其精确和高效的计算。Zoox是一家全新开发robotaxis的初创公司&#xff0c;充分利…

手机上网流量统计_数据统计 | 上半年手机流量同比增110.2%,你贡献了多少?

来源&#xff1a;工信部网站、中新经纬版权申明&#xff1a;内容来源网络&#xff0c;版权归原创者所有。除非无法确认&#xff0c;我们都会标明作者及出处&#xff0c;如有侵权烦请告知我们&#xff0c;我们会立即删除并表示歉意。谢谢&#xff01;7月25日&#xff0c;工信部网…

mybatis insert插入成功返回0_mybatis添加客户

在MyBatis的映射文件中&#xff0c;添加操作是通过元素来实现的。例如&#xff0c;向数据库中的t_customer表中插入一条数据可以通过如下配置来实现。在上述配置代码中&#xff0c;传入的参数是一个Customer类型&#xff0c;该类型的参数对象被传递到语句中时&#xff0c;#{use…

Andoid TextView显示富文本html内容及问题处理

目录富文本内容与效果TextView HtmlImageGetter 处理图片(表情)TagHandler 处理html内容的节点Html的转换过程HtmlToSpannedConverterhandleStartTagstartCssStyle(mSpannableStringBuilder, attributes)字体无效果实现getForegroundColorPattern颜色不显示的坑处理办法颜色修…

Java错误:找不到或无法加载主类

目录前言javac xxx.java 编译需要相对物理路径java xxx 执行需要虚拟路径总结前言 一般情况下&#xff0c;我们都使用工具进行代码的编辑和调试&#xff0c;例如eclipse 、Manven、Android Studio、sublime、vim、notepad、记事本等。 当我们用eclipse android studio等创建的p…