AFL模糊测试
一、AFL简介

bitflip:按位翻转,1变为0,0变为1 arithmetic:整数加/减算术运算 interest:把一些特殊内容替换到原文件中。所谓的特殊内容是AFL预设的一些比较特殊的数,比如可能造成溢出的数。 dictionary:把自动生成或用户提供的token替换/插入到原文件中 havoc:“大破坏”,是前面几种变异的组合 splice:“连接”,此阶段会将两个文件拼接起来得到一个新的文件
二、AFL安装和使用
2.1、安装

- afl-gcc 和afl-g++ 分别对应的是gcc 和g++ 的封装
- afl-clang 和afl-clang++ 分别对应clang 的c 和c++ 编译器封装À。
- afl-fuzz 是AFL 的主体,用于对目标程序进行fuzz。
- afl-analyze 可以对用例进行分析,通过分析给定的用例,看能否发现用例中有意义的字段。
- afl-qemu-trace 用于qemu-mode ,默认不安装 ,需要手工执行qemu-mode 的编译脚本进行编译,后面会介绍。
- afl-plot 生成测试任务的状态图
- afl-tmin 和afl-cmin 对用例进行简化
- afl-whatsup 用于查看fuzz 任务的状态
- afl-gotcpu 用于查看当前CPU 状态
- afl-showmap 用于对单个用例进行执行路径跟踪

2.2、准备被测程序
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <signal.h> int AFLTest(char *str)
{int len = strlen(str);if(str[0] == 'A' && len == 6){raise(SIGSEGV);//如果输入的字符串的首字符为A并且长度为6,则异常退出}else if(str[0] == 'F' && len == 16){raise(SIGSEGV);//如果输入的字符串的首字符为F并且长度为16,则异常退出}else if(str[0] == 'L' && len == 66){raise(SIGSEGV);//如果输入的字符串的首字符为F并且长度为66,则异常退出}else{printf("it is good!\n");}return 0;
}int main(int argc, char *argv[])
{char buf[100]={0};gets(buf);//存在栈溢出漏洞printf(buf);//存在格式化字符串漏洞AFLTest(buf);return 0;
}
2.3、使用 afl-gcc 插桩编译
(编译插桩是指在代码编译期间修改或新增代码)


2.4、准备种子语料库
2.4.1、搜集种子语料库
- libav sample s
- ffmpeg samples
- fuzzdata
- moonshine
- afl generated image test sets
- fuzzer-test-suite
2.4.2、精简语料库
2.4.2.1、去重

2.4.2.2、裁剪体积
2.5、开始测试









2.6、fuzz结果分析

- crashes/README.txt:保存了目标执行这些crashes文件的命令行参数。
- hangs:导致目标超时的独特测试用例。
- fuzzer_stats:afl-fuzz的运行状态。
- plot_data:用于afl-plot绘图。









三、并行fuzz测试

- 主实例: afl-fuzz -M master -i good-seeds/ -o good-outputs -m none -- ./test
- 从实例1 : afl-fuzz -S slave1 -i good-seeds/ -o good-outputs -m none -- ./test
- 从实例2: afl-fuzz -S slave2 -i good-seeds/ -o good-outputs -m none -- ./test
- 主实例: afl-fuzz -M master -i- -o good-outputs -m none -- ./test
- 从实例1 : afl-fuzz -S slave1 -i- -o good-outputs -m none -- ./test
- 从实例2: afl-fuzz -S slave2 -i- -o good-outputs -m none -- ./test

四、黑盒 fuzz(无源码AFL测试)
4.1、qemu_mode模式安装

- 修改build_qemu_support.sh文件中的 QEMU_URL=" https://download.qemu.org/qemu- ${VERSION}.tar.xz",不然提示404
- 参考 我的AFL入门之路 - 知乎 (zhihu.com) ,更改一些配置:
-
4.2、示例



五、参考
google/AFL: american fuzzy lop - a security-oriented fuzzer (github.com)
入门AFL | I'm dev (i-m.dev)
我的AFL入门之路 - 知乎 (zhihu.com)
AFL实战_Elwood Ying的博客-CSDN博客
经典 Fuzzer 工具 AFL 模糊测试指南_swift fuzzer工具_江下枫的博客-CSDN博客
模糊测试技术线上分享_哔哩哔哩_bilibili
相关文章:

AFL模糊测试
一、AFL简介 AFL(American Fuzzy Lop)号称是当前最高级的Fuzzing 测试工具之一 ,是由安全研究员Michał Zalewski(lcamtuf)开发的一款 基于覆盖引导(Coverage-guided)的 模糊测试工具࿰…...

PaddleOCR学习笔记1-初步尝试
尝试使用PaddleOCR方法,如何使用自定义的模型方法,参数怎么配置,图片识别尝试简单提高识别率方法。 目前仅仅只是初步学习下如何使用PaddleOCR的方法。 一,测试识别图片: 1.png : 正确文本内容为“哲学可以帮助辩别现…...

ExpressLRS开源代码之框架结构
ExpressLRS开源代码之框架结构 1. 源由2. Arduino应用框架3. ExpressLRS应用框架4. 硬件设计框架4.1 单天线4.2 双天线单PA4.3 双天线双PA 5. 应用软件设计6. 参考资料 1. 源由 最近为了理解《ExpressLRS开源之基本调试数据含义》,做了一些源代码的研读。 概念、文…...

【C++ • STL】一文带你走进string
文章目录 一、STL简介二、标准库中的string类三、string类的常用接口说明2.1 string类对象的常见构造2.2 string类对象的访问及遍历操作2.2.1 元素访问2.2.2 迭代器 2.3 string类对象的容量操作2.4 string类对象的修改操作2.5 string类非成员函数 四、总结 ヾ(๑╹◡╹)&#x…...

GPT引领前沿热点、AI绘图
GPT对于每个科研人员已经成为不可或缺的辅助工具,不同的研究领域和项目具有不同的需求。如在科研编程、绘图领域: 1、编程建议和示例代码: 无论你使用的编程语言是Python、R、MATLAB还是其他语言,都可以为你提供相关的代码示例。 2、数据可…...

ArcGIS Pro3.0.2保姆级安装教程
软件简介: ArcGIS Pro是ERSI推出的新一代原生态64位ArcGIS桌面产品。具备强大的二维、三维一体化功能,继承了传统桌面产品ArcMap等产品几乎所有的功能,并在多个方面作了进一步的优化和改进,是云端一体化、数据科学与空间数据科学…...

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

从零开始学习软件测试-第38天笔记
接口测试 什么是接口 接口是两个独立部件共享信息的边界,测试中常说的接口大部分是web接口。web接口是遵循了http或者https协议的URL。 数据的流转过程 由客户端通过接口将数据发送给服务器。服务器收到数据之后,取出想要的数据,拼装成一…...

ASP.NET Core 8 的 Web App
Web App Web App 与 Web API 的不同之处在于包含 UI 部分,所谓的 UI 就是 HTML 页面。 Web App 支持几种渲染HTML 的方式: 服务端渲染客户端渲染混合渲染 服务端渲染 服务端渲染UI是在浏览器请求的时候,服务端生成 HTML,然后返…...

jeesite自定义数据字典,自定义字典表,自带树选择数据源(保姆级图文教程)
文章目录 前言一、框架自带树字典表如何使用二、自定义表作为字典表1. 下拉选项使用自建表作为字典表。实际效果框架示例实际开发代码2. 结构树选择使用自建表作为字典表。效果展示实际开发代码总结前言 项目开发中字典表如果不满足实际需求,比如使用自己的表作为字典,系统自…...

基于v-md-editor的在线文档编辑实现
概述 前面的文章讲到了基于语雀的在线文档编辑器的实现,在本文,将基于v-md-editor实现在线文档的编辑。 实现后效果 实现 说明:本文是基于Vue3实现的,实现了:1.Markdown的在线编辑和预览;2. 文件的上传和…...

C(结构体指针、利用结构体指针偏移获取数据)
记录问题,还没有研究明白 struct MY_STRUCT{int a;short b;char s[100];double d; }; int main(){ MY_STRUCT s{1,2,"he",999};MY_STRUCT* struct_ptr &s;char *char_p (char *) &s.s;int *int_ap &s.a;short * int_bp &s.b;double …...

数据结构和算法之插入排序
一、插入排序 插入排序是一种简单直观的排序算法。它的原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 #mermaid-svg-v2YbPqchr8qWCPvn {font-family:"trebuchet ms",verdana,arial,san…...

感应电动机
引言 感应电动机,这个名字对于普通人来说可能有些陌生,但它在我们的日常生活和工作中占据着举足轻重的地位。从各类电器设备到工业生产设备,感应电动机的应用广泛而深入。了解感应电动机的种类和主要结构有助于我们更好地理解其工作原理,从而为我们的生活和工作带来更多便利…...

AjaxJavaScriptcss模仿百度一下模糊查询功能
1、效果 如下图所示,我们在输入大学时,程序会到后端查询名字中包含大学的数据,并展示到前端页面。 用户选择一个大学,该大学值会被赋值到input表单,同时关闭下拉表单; 当页面展示的数据都不符合条件时&…...

sqli-labs复现
sqli-labs第一关复现 环境搭建下载phpstudy下载sqli-labs浏览器加载 第一关复现 环境搭建 下载phpstudy phpstudy是一个可以快速帮助我们搭建web服务器环境的软件 官网:https://www.xp.cn/ 这里我选择的是windows 64bit 客户端版本,安装路径为C:\php…...

k8s入门到实战--跨服务调用
service.png 背景 在做传统业务开发的时候,当我们的服务提供方有多个实例时,往往我们需要将对方的服务列表保存在本地,然后采用一定的算法进行调用;当服务提供方的列表变化时还得及时通知调用方。 student: url: - 192.168.1…...

小程序中使用分包
前言 小程序在未使用的分包的情况下仅支持大小为2M,如果图片等资源过多的情况下可以使用分包功能,使用分包的情况下单个分包大小不能超过2M,总大小不能超过20M,分包有两种情况:普通分包和独立分包,下面介绍的是普通分包。官方文档…...

python官方标准库
文章目录 1. 标准库2. Python标准库介绍3. 示例 1. 标准库 https://docs.python.org/zh-cn/3/library/ https://pypi.org/ 2. Python标准库介绍 Python 语言参考手册 描述了 Python 语言的具体语法和语义,这份库参考则介绍了与 Python 一同发行的标准库。它还描…...

Python Opencv实践 - 霍夫圆检测(Hough Circles)
import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/steelpipes.jpg") print(img.shape) plt.imshow(img[:,:,::-1])#转为二值图 gray cv.cvtColor(img, cv.COLOR_BGR2GRAY) plt.imshow(gray, cmap plt.cm.gray…...

异步请求库的实际应用案例:爬取豆瓣经典电影
在日常爬虫过程中,你有没有遇到过需要爬取大量数据的情况,但是传统的同步请求方式让您等得焦头烂额? 这个问题的根源在于传统的同步请求方式。当我们使用同步请求时,程序会一直等待服务器的响应,直到数据返回后才能继续…...

数据结构学习系列之两个单向链表的合并
两个单向链表的合并:创建两个单向链表p1和p2,合并p1和p2即可,代码如下:示例代码: int merge_2_link_list(node_t *p1,node_t **p2){if(NULL p1 || NULL p2 || NULL *p2){printf("入参合理性检查\n");ret…...

java网络编程,套接字socket
目录 一 网络概述 二 网络的类型分类 三 网络体系结构 四 网络通信协议概述 五 网络通信协议种类 六 Socket简介 七 Socket路径 八 java网络编程三要素 九 基于UDP协议的Socket编程 十 基于TCP协议的Socket编程 十一 基于TCP协议和UDP的区别 一 网络概述 多台相互连…...

一日一技:Python如何同时调用多个GPT的API?
相信很多同学或多或少都在Python中使用过GPT API,通过Python安装openai库,来调用GPT模型。 OpenAI官方文档中给出了一个示例,如下图所示: OpenAI API 测试 如果你只有一个API账号,那么你可能不觉得这样写有什么问题。…...

【云原生】Docker环境安装
文章目录 一、安装准备1、前提条件2、查看系统内核3、查看已安装的CentOS版本信息 二、CentOS7安装docker1、安装需要的软件包2、设置docker下载镜像3、更新yum软件包索引4、安装docker ce5、启动docker6、版本验证7、设置开机启动 三、卸载 Docker 是一个开源的应用容器引擎&a…...

56、springboot ------ RESTful服务及RESTful接口设计
★ RESTful服务 RESTful服务是“前后端分离”架构中的主要功能: 后端应用对外暴露RESTful服务,前端应用则通过RESTful服务与后端应用交互。后端应用 RESTful接口 <------------------> 前端★ 基于JSON的RESTful服务 使用RestController注解…...

sysmonitor如何使用
Sysmonitor是一个系统监控工具,可以监视系统资源的使用情况,如CPU、内存、磁盘、网络等。以下是使用Sysmonitor的步骤: 打开终端或命令行界面,输入以下命令安装Sysmonitor: sudo apt-get install sysmonitor安装完成…...

视频监控/视频汇聚/安防视频监控平台EasyCVR如何将默认快照的raw格式改为jpg/base64格式?
视频监控/视频汇聚/安防视频监控平台EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。视频云存储EasyCVR平台能在复…...

QRCode.js生成的二维码水平居中的解决方案
在使用qrcode.js库生成二维码,并希望生成的二维码能够在其容器中居中。 以下是一个简单的例子,它展示了如何使用qrcode.js生成二维码,并通过CSS将其居中: HTML代码 <div id"qrcode-container"><div id"…...

在Cisco设备上配置接口速度和双工
默认情况下,思科交换机将自动协商速度和双工设置。将设备(交换机、路由器或工作站)连接到 Cisco 交换机上的端口时,将发生协商过程,设备将就传输参数达成一致,当今的大多数网络适配器都支持此功能。 在本文…...