AFL++模糊测试

一、AFL++

这里我们主要使用AFL++ Fuzzing 测试IOT的二进制文件,当我们解压提取一个固件时,能够获得大量的IOT二进制应用 ,如果要进行漏洞挖掘则需要将二进制文件进行逆向分析,然后查找危险函数以及输入接口,对于一个大型的应用,直接进行二进制分析会大大降低我们的效率,所以可以使用Fuzzing技术对IOT的二进制文件进行模糊测试,提高漏洞挖掘效率。
对于IOT的二进制文件通常由于架构的不同,不能直接进行FuzzingAFL++可以使用Qemu、Unicorn或Frida 三种模式进行Fuzzing,虽然不如有源码进行Fuzzing高效,但是其适用面广,并且同样能提高漏洞挖掘效率。
AFL++使用qemu用户模式模拟仿真来运行二进制文件,其使用的qemu是进行修改的版本,在程序执行时检测基本块,根据收集的信息生成测试用例,通过生成的大量测试用例触发不同的代码路径,从而提高代码的覆盖率,提高触发Crash的概率。
AFL++和其他的类似的Fuzzing工具(AFL,hongfuzz等)一样,仅适用于文件输入的Fuzzing,不支持从套接字输入的程序,对于套接字的Fuzzing测试在下篇进行讲解,本篇文件将重点落在环境的搭建及文件输入相关的二进制应用的Fuzzing

二、AFL++环境搭建

系统环境:任何Linux系统上编译
测试固件:TP-Link SR20、Cisco RV130X
$ sudo apt update
$ sudo apt install git make build-essential clang ninja-build pkg-config libglib2.0-dev libpixman-1-dev
$ git clone https://github.com/AFLplusplus/AFLplusplus.git
$ cd AFLplusplus
$ make all
$ cd qemu_mode
$ CPU_TARGET=arm ./build_qemu_support.sh # 这里编译ARM架构的

三、AFL++案例

3.1、AFL++测试TP-Link SR20路由器固件

固件的下载地址如下: https://static.tp-link.com/2018/201806/20180611/SR20(US)_V1_180518.zip
使用Binwalk提取固件:
$ binwalk -Me tpra_sr20v1_us-up-ver1-2-1-P522_20180518-rel77140_2018-05-21_08.42.04.bin
解包后结果:
接下来我们查找来自文件输入的程序进行Fuzzing测试:
这里可以看到大家耳熟能详的bmp2tiff应用,那么我们就拿bmp2tiff进行Fuzzing测试,生成一个bmp的测试用例,将测试用例放到创建的bmp-input文件夹中,同时创建bmp-output Fuzzing输出文件夹
查看bmp2tiff指令的使用方法:
执行bmp2tiff:
接下来, root权限下执行以下命令进行Fuzzing测试:
$ QEMU_LD_PREFIX=./squashfs-root/   /root/桌面/AFLplusplus/afl-fuzz  \-Q \-i bmp-input \-o bmp-output \-- ./squashfs-root/usr/bin/bmp2tiff @@ /dev/null-Q:适用qemu模式
-i:输入文件夹
-o:输出文件夹
@@:表示将用来替换的样本
/dev/null:忽略错误信息
可以看到在Fuzzing期间触发了21个crash。
这里使用程序直接解析生成的crash文件:

3.2、AFL++测试Cisco RV130X路由器的固件

固件下载地址如下: 可以从  https://software.cisco.com/download/home/285026141/type/282465789/release/1.0.3.55?i=!pp  下载。该文件名为  RV130X_FW_1.0.3.55.bin
binwalk提取固件,提取后的文件系统如下:
我们将研究对 /usr/sbin/ 中的 jsonparse 和 xmlparser1 二进制文件进行模糊测试。 这些程序接受来自文件的输入,非常适合模糊测试。 我们没有可用的源代码,因此我们必须使用 Qemu 模式。

3.2.1、模糊测试xmlparser1

在模糊测试之前,我们需要知道程序如何接受输入。使用 –help 参数使用 qemu-arm-static 运行 xmlparser1 会显示使用情况。它接受带有 -f 参数的文件名。-d 参数代表调试。
qemu-arm-static -L . ./usr/sbin/ xmlparser1 --help    # -L path  EMU_LD_PREFIX  set the elf interpreter prefix to 'path'
我们可以创建一个 测试 XML 文件并运行 xmlparser1: test.xml
<?xml version="1.0" encoding="UTF-8"?><shiporder orderid="889923" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd"><orderperson>John Smith</orderperson><shipto><name>Ola Nordmann</name><address>Langgt 23</address><city>4000 Stavanger</city><country>Norway</country></shipto><item><title>Empire Burlesque</title><note>Special Edition</note><quantity>1</quantity><price>10.90</price></item><item><title>Hide your heart</title><quantity>1</quantity><price>9.90</price></item></shiporder>
创建两个目录 input-xml 和 output-xml 并将 test.xml 文件移动到 input-xml,如图所示。
运行 xmlparser1:
xmlparser1 显示 test.xml 文件的解析内容。 我们现在可以继续进行模糊测试。 要运行模糊器,我们需要提供一个输入文件,模糊器将使用该文件生成进一步的测试用例。 我们将指定 test.xml 作为我们的输入文件。
我们现在可以启动 afl-fuzz:
$ /root/桌面/my_firmwares/_RV130X_FW_1.0.3.55.bin.extracted/
$ QEMU_LD_PREFIX=./squashfs-root/ /root/桌面/AFLplusplus/afl-fuzz \-Q \-i input-xml/ \-o output-xml/ \-- ./squashfs-root/usr/sbin/xmlparser1 -f @@-Q:在 Qemu 模式下使用 AFL++
-i:输入目录的路径
-o:输出目录的路径。此目录将包含触发二进制文件上有趣行为的文件,例如崩溃或挂起
在运行时,AFL++ 会将@@ 参数替换为输入文件的名称
​​

3.2.2、模糊测试 jsonparse

创建一个 测试JSON文件 并在其上运行jsonparser:test.json
{"name":"Jason Ray","profession":"Software Engineer","age":31,"address":{"city":"New York","postalCode":64780,"Country":"USA"},"socialProfiles":[{"name":"Twitter","link":"https://twitter.com"},{"name":"Facebook","link":"https://www.facebook.com"}]}
创建两个目录 input-json 和 output-json 并将 test.json 文件移动到 input-json:
运行jsonparser:
root权限下执行如下命令进行Fuzzing测试:
$ /root/桌面/my_firmwares/_RV130X_FW_1.0.3.55.bin.extracted/
QEMU_LD_PREFIX=./squashfs-root/ /root/桌面/AFLplusplus/afl-fuzz \-Q \-i input-json \-o output-json \-- ./squashfs-root/usr/sbin/jsonparse @@
可以看到也出现了crash,这里使用程序直接解析生成的crash文件:
这里可以看到触发段错误。

四、参考

GitHub - AFLplusplus/AFLplusplus: The fuzzer afl++ is afl with community patches, qemu 5.1 upgrade, collision-free coverage, enhanced laf-intel & redqueen, AFLfast++ power schedules, MOpt mutators, unicorn_mode, and a lot more!

Fuzzing IoT binaries with AFL++ - Part I (attify.com)

Fuzzing IoT binaries with AFL++ - Part II (attify.com)

IOT Fuzzing框架AFL++ (上)-安全客 - 安全资讯平台 (anquanke.com)

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

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

相关文章

java从入门到起飞(八)——循环和递归

文章目录 Java循环1. 什么是循环&#xff1f;1.1 为什么需要循环&#xff1f;1.2 循环的分类 2. Java中的循环结构2.1 for循环2.2 while循环2.3 do-while循环 3. 循环控制语句3.1 break语句3.2 continue语句 4. 总结 Java递归1. 什么是递归2. 递归的原理3. 递归的实现4. 递归的…

聚观早报|华为Mate 60 Pro支持面容支付;特斯拉重回底特律车展

【聚观365】9月8日消息 华为Mate 60 Pro已支持面容支付 特斯拉将重回底特律车展 iPhone在美国有1.67亿用户 韩国半导体8月份出口85.6亿美元 比亚迪元PLUS冠军版将于9月15日上市 华为Mate 60 Pro已支持面容支付 毫无预热的华为Mate 60 Pro突然在华为商城首批开售&#xf…

旅游攻略APP外包开发功能

旅游攻略APP是帮助旅行者计划和享受旅行的工具&#xff0c;下面列出了一些常见的旅游攻略APP功能&#xff0c;以及在上线这类应用时需要注意的问题&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 常见…

使用内网负载机(Linux)执行Jmeter性能测试

一、背景 ​ 在我们工作中有时候会需要使用客户提供的内网负载机进行性能测试&#xff0c;一般在什么情况下我们需要要求客户提供内网负载机进行性能测试呢&#xff1f; 遇到公网环境下性能测试达到了带宽瓶颈。那么这时&#xff0c;我们就需要考虑在内网环境负载机下来执行我们…

球谐函数实现环境光照漫反射实践

该文章以及代码主要来自 图形学论文解析与复现&#xff1a;【论文复现】An Efficient Representation for Irradiance Environment Maps 作者&#xff1a;Monica的小甜甜 与原文的不同&#xff1a; 对一些有问题的地方进行了修改添加了注释对有疑问的地方添加了疑问点引入了其…

飞书即时消息无需API开发连接Cohere,打造飞书AI智能问答助手

飞书即时消息用户使用场景&#xff1a; 许多企业都在使用飞书系统进行协同办公&#xff0c;而现在有了Cohere大语言模型技术&#xff0c;能够根据用户的提问来自动产生回答&#xff0c;无需人为干预。对于企业负责人来说&#xff0c;他们认为如果将Cohere技术融入到飞书机器人中…

CCF-CSP 30次 第二题【矩阵运算】

计算机软件能力认证考试系统 #include<bits/stdc.h> using namespace std; const int N1e410; #define int long long int n,d; int q[N][22],k[22][N],v[N][22],w[N]; int ans1[N][22],ans2[N][22]; signed main() {scanf("%lld %lld",&n,&d);for(in…

Ubuntu----Linux命令-----防火墙(查看、关闭、启动)

一、查看防火墙状态 命令&#xff1a;ufw status 说明&#xff1a; 活动&#xff1a;防火墙是开启的 不活动&#xff1a;防火墙是关闭的 二、开启防火墙 命令&#xff1a;sudo ufw enable 开启防火墙后&#xff0c;可以查看防火墙状态 三、关闭防火墙 命令&#xff1a;sud…

喜报丨迪捷软件入选浙江省2023年省级产业数字化服务商

近日&#xff0c;根据《关于组织开展2023年度省级产业数字化服务商申报工作的通知》要求&#xff0c;省经信厅公布2023年省级产业数字化服务商名单&#xff0c;浙江迪捷软件科技有限公司榜上有名。 省级产业数字化服务商上榜名单的评选在企业申报、地方推荐、专家评审、综合评估…

小白备战大厂算法笔试(四)——哈希表

文章目录 哈希表常用操作简单实现冲突与扩容链式地址开放寻址线性探测多次哈希 哈希表 哈希表&#xff0c;又称散列表&#xff0c;其通过建立键 key 与值 value 之间的映射&#xff0c;实现高效的元素查询。具体而言&#xff0c;我们向哈希表输入一个键 key &#xff0c;则可以…

软件系统功能测试的依据

验收测试 一、软件系统功能测试的依据&#xff1a; 采用GB/T 25000.51-2016系统与软件工程系统与软件质量要求和评价(SQuaRE)第51部分&#xff1a;就绪可用软件产品(RUSP)作为测试依据 二、常用功能测试方法&#xff1a; 界面测试 是指对使用界面的软件进行的软件测试&…

docker安装mysql、clickhouse、oracle等各种数据库汇总

1&#xff1a;docker 安装mongo数据库并使用 官网&#xff1a;https://www.mongodb.com/docs/manual/ mongo shell教程1&#xff1a;http://c.biancheng.net/mongodb2/connection.html 安装1 &#xff1a;https://www.zhihu.com/question/54602953/answer/3047452434?utm_id0…