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…...
高效学挖漏洞!全网最全平台汇总 + 零基础到精通指南,一篇搞定所有
一、众测平台(国内) 名称网址漏洞盒子https://www.vulbox.com/火线安全平台https://www.huoxian.cn/漏洞银行https://www.bugbank.cn/360漏洞众包响应平台https://src.360.net/补天平台(奇安信)https://www.butian.net/春秋云测https://zhongce.ichunqi…...
4步完成Axure本地化设置:让新手轻松上手的中文界面方案
4步完成Axure本地化设置:让新手轻松上手的中文界面方案 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包,不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn …...
告别ViT的笨重:手把手教你用SegFormer在Cityscapes数据集上实现高效语义分割
告别ViT的笨重:手把手教你用SegFormer在Cityscapes数据集上实现高效语义分割 在自动驾驶、遥感影像分析等计算机视觉应用中,语义分割技术扮演着关键角色。传统基于卷积神经网络(CNN)的方法虽然取得了显著进展,但面临着…...
新手也能看懂!5分钟搞懂图像频谱图:用MATLAB的fft2和fftshift分析图片细节
图像频谱图解析:用MATLAB透视照片的隐藏密码 想象一下,如果每张照片都能像X光片一样被"透视",让我们看到它内部隐藏的结构特征,那会怎样?这就是图像频谱图的魔力所在。不同于我们日常看到的像素排列…...
我试了opencli,3秒拿到知乎热榜——手把手教你把200+网站变成命令行
前言: 坦白说,我第一次看到opencli的时候,心想:"又一个给程序员用的 命令行工具 ,跟我没关系。" 然后我随手试了一条命令—— opencli bilibili hot 3秒钟,B站条直接出现在我眼前。标题、热度、排名,整整齐齐。 那一刻我意识到 这玩意儿不是给程序员用的,是…...
2026大厂校招笔试指南(高频考点+真实趋势)
关注 霍格沃兹测试学院公众号,回复「资料」,领取人工智能测试开发技术合集很多人现在卡在同一个问题上:题也刷了,时间也花了,但一到笔试还是过不了。你可能也有这种感觉:简单题会做,中等题卡住&…...
记录一次 反射引起的Metaspace OOM 的完整排查
一、问题背景线上某个 Spring Boot 服务偶发出现:java.lang.OutOfMemoryError: MetaspaceJVM 参数中已经限制:-XX:MetaspaceSize512m -XX:MaxMetaspaceSize512m但监控显示:Metaspace used ≈ 370MB Metaspace committed ≈ 508MB看起来仍…...
Maxwell Fields Calculator双模式切换指南:堆栈与代数表达式输入实战解析
Maxwell Fields Calculator双模式切换指南:堆栈与代数表达式输入实战解析 在电磁仿真领域,Maxwell Fields Calculator一直是工程师进行后处理分析的利器。随着2025 R1版本的推出,一项革命性的功能——双模式表达式输入,彻底改变了…...
告别重复编码:用快马AI一键生成团队协作网盘高效开发框架
最近在开发一个团队协作网盘系统时,发现很多基础功能其实都是重复性工作。比如权限管理、文件版本控制这些模块,每个项目都要从头写一遍。后来尝试用InsCode(快马)平台的AI生成功能,效率提升特别明显。这里分享下我的实践心得: 权…...
Neo.mjs性能优化:如何实现每秒40,000+增量更新的秘密
Neo.mjs性能优化:如何实现每秒40,000增量更新的秘密 【免费下载链接】neo The application worker driven frontend framework 项目地址: https://gitcode.com/gh_mirrors/neo/neo Neo.mjs作为一款由应用工作器驱动的前端框架,以其卓越的性能表现…...
