AFL++模糊测试

news2025/1/20 16:34:26

一、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.coloradmin.cn/o/991422.html

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

相关文章

管理类联考——数学——汇总篇——知识点突破——数据分析——计数原理——排列组合——成双

&#x1f30a; 配对问题的解题思路&#xff1a;配对问题主要以鞋子或者手套来作为命题对象&#xff0c;其核心在于成双不成双&#xff0c;对于成双问题&#xff0c;直接选取整双即可&#xff0c;对于不成双问题&#xff0c;要先取成双的&#xff0c;然后从每双中取单只即可。 …

计算机使用中常用截图与标注方法

一、截图常用方法 1&#xff0e;windows自带快捷键 Print Screen SysPq 截取全屏&#xff0c;可以粘到word文档中&#xff0c;可以粘贴到"画图"程序中&#xff0c;命名一个文件名&#xff0c;另存为图片&#xff0c;或.jpg后缀&#xff0c;或.png后缀 alt Print S…

掌动智能国产化测试工具的重要性与优势

在信息技术领域的快速发展下&#xff0c;对于软件和硬件产品的质量和性能要求也日益提高。同时针对信创要求&#xff0c;国产化测试工具在这个过程中发挥着重要的作用&#xff0c;不仅能够提升产品的可靠性和稳定性&#xff0c;还能够降低测试成本和提高测试效率。作为国内领先…

win10怎么禁止软件联网

有一些用户发现软件在联网的状态下会进行自动更新&#xff0c;想要禁止软件联网却不知道如何操作&#xff0c;这里小编就给大家详细介绍一下Win10禁止软件联网的方法&#xff0c;有需要的小伙伴快来和小编一起看一看了解一下吧。 Win10禁止软件联网的方法&#xff1a; 1、按下…

【校招VIP】测试算法考点之链表

考点介绍&#xff1a; 链表是一种逻辑简单的、实用的数据结构&#xff0c;几乎被所有程序设计语言支持。单链表的操作算法是笔试面试中较为常见的题目。 测试算法考点之链表-相关题目及解析内容可点击文章末尾链接查看&#xff01; 一、考点题目 1.一个长度为n的单向链表&am…

智能离子风棒联网监控静电消除器的工作原理和特点

智能离子风棒联网监控静电消除器是一种应用了物联网技术的设备&#xff0c;用于监测和控制静电消除过程。下面是该设备的工作原理和特点&#xff1a; 工作原理&#xff1a; 1. 检测静电水平&#xff1a;智能离子风棒内置传感器&#xff0c;可以实时监测环境中的静电水平。 2.…

高等工程数学张韵华版第四章课后题答案

下面答案仅供参考&#xff01; 章节目录 第4章 欧氏空间和二次型 4.1内积和欧氏空间 4.1.1内积的定义 4.1.2欧氏空间的性质 4.1.3 正交投影 4.1.4 施密特正交化 4.2 正交变换和对称变换 4.2.1 正交变换 4.2.2 正交矩阵 4.2.3 对称变换 4.2.4 对称矩阵 4.3 二…

12-JVM调优实战-2

上一篇&#xff1a;11-JVM调优实战-1 1.JVM运行情况预估 用 jstat gc -pid 命令可以计算出如下一些关键数据&#xff0c;有了这些数据就可以采用之前介绍过的优化思路&#xff0c;先给自己的系统设置一些初始性的JVM参数&#xff0c;比如堆内存大小&#xff0c;年轻代大小&a…

Springboot整合AOP实现日志的保存

1.定义注解 /*** 系统日志元注解*/ Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface LogFilter {String value() default "" ; } 2.编写切面的实现 Aspect Component public class LogAspect {private static final …

SW孤立基准面的方法

先把要单独显示的对象选择出来建立选择集&#xff0c; 然后框选所有基准面&#xff08;过滤基准面&#xff09;&#xff0c;选择隐藏&#xff0c; 最后把选择集的打开。

【Mysql】Mysql获取排班时间段中的休息时间段方法

在MySQL中&#xff0c;可以使用自连接&#xff08;self-join&#xff09;来获取上一条记录的结束时间和下一条记录的开始时间&#xff0c;并将它们组合成一条记录。首先&#xff0c;需要为表创建一个包含记录ID和时间信息的临时表&#xff0c;然后使用自连接获取相邻记录的时间…

seata升级1.1.0后遇到io.seata.common.exception.ShouldNeverHappenException

我们这一节主要讲的是seata升级后的主要修改&#xff0c;至于seata的基本部署可以参考我之前的随笔。 一开始我在升级SpringBoot版本之后&#xff0c;seata就突然启动不起来了&#xff0c;报了下面的错&#xff1a; Caused by: io.seata.common.exception.ShouldNeverHappenExc…

将AI融入到SEO中—基于Python的实现思路

在当今数字化时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;对于网站和在线业务的成功至关重要。然而&#xff0c;随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;我们可以利用它来提升SEO策略并取得更好的效果。本文将介绍如何通过使用Python编…

浅谈多回路电表在荷兰光伏系统配电项目中的应用

1.背景信息 Background&#xff1a; 随着全球化石能源&#xff08;石油&#xff0c;煤炭&#xff09;越来越接近枯竭&#xff0c;污染日趋严重&#xff0c;气候日益变暖等问题&#xff0c;全球多个国家和地区相继出台了法规政策&#xff0c;推动了光伏产业的发展。但是现有的光…

基于SSM的蜀都天香酒楼管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

DC电源模块的使用寿命问题

BOSHIDA DC电源模块的使用寿命问题 DC电源模块是一种电子元器件&#xff0c;它为电路提供稳定的直流电压和电流。在电子产品中&#xff0c;DC电源模块往往是核心部件之一&#xff0c;其使用寿命与产品的整体性能密切相关。 使用寿命是DC电源模块的重要参数之一。使用寿命是指…

软件测试/测试开发丨Python 深拷贝与浅拷贝

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27327 深拷贝与浅拷贝 浅拷贝&#xff1a;有4中实现方法&#xff1a;对象本身的copy方法&#xff0c;工厂方法&#xff0c;切片以及copy模块的copy方法。…

如何才能搭建高质量的在线产品手册呢?

随着科技的发展&#xff0c;越来越多的企业将目光投向互联网&#xff0c;并将自己的产品推向了线上。而对于这些线上产品&#xff0c;拥有一份完备的、易用、高质量的在线产品手册显得尤为重要。 如何才能搭建高质量的在线产品手册呢&#xff1f; 一、确定手册的内容和格式 …

数字高精度温度传感芯片的工作原理以及应用

数字温度传感芯片是一种测量温度的设备&#xff0c;其工作原理是通过感知周围环境的温度变化来产生电信号&#xff0c;并将其转换为数字信号输出。通常使用集成电路技术&#xff0c;利用材料的电阻、电容、热电效应等特性来实现温度的测量。能够提供准确和可重复性的温度测量结…

FPGA GTH aurora 8b/10b编解码 PCIE 板对板视频传输,提供2套工程源码加QT上位机源码和技术支持

目录 1、前言免责声明 2、我这里已有的 GT 高速接口解决方案3、GTH 全网最细解读GTH 基本结构GTH 发送和接收处理流程GTH 的参考时钟GTH 发送接口GTH 接收接口GTH IP核调用和使用 4、设计思路框架视频源选择silicon9011解码芯片配置及采集动态彩条视频数据组包GTH aurora 8b/10…