AFL——American Fuzzy Lop的基础使用
AFL——American Fuzzy Lop的基础使用
因为某些奇怪的原因,我一个没搞过pwn的得来搞代码fuzz,只好学一下,顺便记一下。
AFL的安装
在部分源有的情况下可以直接使用apt-get install安装
或者开启docker直接使用
或者传统安装
wget http://lcamtuf.coredump.cx/afl/releases/afl-latest.tgz
tar xvf afl-latest.tgz
cd afl-2.52b #根据自己下载的版本进行替换
make && make -C llvm_mode CXX=g++
make install
AFL内含工具
AFL提供了许多工具
常用的有
·afl-gcc#gcc与g++编译
·afl-clang#clang对于c与c++的封装编译器
·afl-tmin#简化缩小输入例
·afl-cmin#同上
·afl-showmap#对文件进行执行path跟踪
·afl-analyze#对输入列进行分析,查找有用的字段
基础使用事例
首先我们先随便写个程序
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <signal.h> int crash(char *str)
{int len = strlen(str);if(str[0] == 'O' && len == 8){raise(SIGSEGV);}elseprintf("noting happened!\n");return 0;
}int main(int argc, char *argv[])
{char buf[10]={0};gets(buf);//栈溢出printf(buf);//格式化字符串漏洞printf("\n");crash(buf);return 0;
}
格式化字符串漏洞和栈溢出就不多说了,我个搞web的都有了解,更别说专门搞pwn的了。
为了更加的方便去理解,还写了个crash函数,如果输入的字符串,首字母为O且长度为8,那么就会抛出错误。
对程序进行编译插桩
将刚才的文件保存为test.c
afl-gcc test.c
instrumented 那一行出现就说明编译插桩成功
我们还得将输出改一下,不让他输出到特定的处理程序,而是将coredumps输出为文件,好让我们后期利用。
在使用kali2020的时候,因为默认没有root权限,建议提前输入sudo -s进入超级管理员模式。
sudo -secho core > /proc/sys/kernel/core_pattern
对输出的a.out文件进行测试
我们可以使用echo命令传参给他
echo "hello" |./a.out
再试试构造一个会crash的字符串
echo "OOOOOOOO" |./a.out
成功报错
对程序进行FUZZ测试
我们先创建两个文件夹
mkdir in out
然后我们在in文件夹中创建一个包含 hello的文件
然后我们就可以进行fuzz测试啦
afl-fuzz -i in -o out -- ./a.out
看到旁边标红的uniq crashes就是我们想要的结果
感觉跑了差不多了,就可以自己ctrl c停下来了。
进入out文件夹,再进入crashes文件夹
我们就可以看见跑出来的crash记录ng)
cat一下,看一下其中的内容。
其中一个和我们要构造的差不多
这应该就是AFL使用的一个基本过程了。
AFL——American Fuzzy Lop的基础使用相关推荐
- AFL(American Fuzzy Lop)源码详细解读(1)
AFL(American Fuzzy Lop)源码详细解读(1) 多亏大佬们的文章,对读源码帮助很大: https://eternalsakura13.com/2020/08/23/afl/ http ...
- AFL(American Fuzzy Lop)源码详细解读(3)
AFL(American Fuzzy Lop)源码详细解读(3) 本篇是关于主循环阶段的内容,整个AFL最核心的部分,篇幅较长.最后简述一下afl_fuzz整体流程. 多亏大佬们的文章,对读源码帮助很 ...
- AFL(American Fuzzy Lop)源码详细解读(2)
AFL(American Fuzzy Lop)源码详细解读(2) 本篇是关于 dry run (空跑.演练) 阶段的内容,一直到主循环之前. 多亏大佬们的文章,对读源码帮助很大: https://et ...
- AFL(American Fuzzy Lop)-afl-fuzz.c
转载AFL(American Fuzzy Lop)源码详细解读(1) AFL(American Fuzzy Lop)源码详细解读(1) 多亏大佬们的文章,对读源码帮助很大: https://etern ...
- AFL(american fuzzy lop)学习二
AFL(american fuzzy lop)学习二 @sizaif @2022-04-10 设计思想 覆盖率计算 改进边缘覆盖: 向目标程序注入以下工具来捕获分支(边缘)覆盖率和分支命中计数 一条边 ...
- AFL(american fuzzy lop)学习三
AFL(american fuzzy lop)学习三 @sizaif @2022-04-11 fork Server 为了提高性能,afl-fuzz 使用"fork server" ...
- AFL(american fuzzy lop)学习一
AFL(american fuzzy lop)学习一 @sizaf AFL 的模糊方法 基于改进的边缘覆盖 插桩法引导的遗传算法 流程: 插桩 从源码编译程序时进行插桩,以记录代码覆盖率(Code C ...
- AFL(American Fuzzy Lop)源码详细解读(8)
这篇记录 llvm mode 中的 afl-llvm-pass.so.cc 文件和 afl-llvm-rt.o.c 文件,以及整体流程的简述. 对llvm这部分理解还比较浅. 可以阅读大佬的这篇文章: ...
- 小白初学AFL(American Fuzzy Lop)
有幸从一位师哥那里知道这个软件,但是由于实习刚刚结束,终于有时间一探当前最为强大而有效的漏洞挖掘技术. 首先我的电脑系统是WINDOWS10,而AFL支持的是Linux系统,当然大家如果不想安装双系统 ...
最新文章
- python 安装库 报错 SSL: CERTIFICATE_VERIFY_FAILED 解决方法
- matelab的安装
- HDFS的namenode和datanode
- Kubernetes里的secret最基本的用法
- Linux命令:mkdir
- go定时器 每天重复_Go 简单性的价值:来自对 Go 倍加青睐的谷歌软件工程师的自述...
- 宝塔自助建站系统源码v8.0
- Virtual DOM(虚拟dom-2)
- 【Spring】Spring Boot 和 Redis 自定义 RedisTemplate
- 仅需 5 步,用 JavaScript 直接通过前端发送电子邮件
- 排除表_维修电工十年经验分享:常见电气故障及排除故障方法
- 在 Cloud 9 中搭建和运行 Go
- Android市场变化令微软很受伤 专利授权收入锐减26%
- 破解PPT密码/改只读为可编辑PPT
- 代码统计工具CLOC
- K8S集群应用市场安装部署:第一篇
- python for 循环中的下划线
- 无线控制需要服务器,H3C无线控制器与LDAP服务器配合进行远程Portal认证可以做么?...
- Windows驱动_文件系统微小过滤驱动之一初识MiniFilter
- 《Python数据分析基础教程:NumPy学习指南(第2版)》笔记16:第七章 专用函数2——金融函数
热门文章
- Graph Contrastive Learning with Adaptive Augmentation
- IOS、Android设计规范/商用字体总结——UI设计入门,你想要的都在这!
- 游戏配音如何提高声音感知力
- 【转载】Locust实现集合点
- AIOps——从数字化运维、智能化运维到智慧化运营
- 什么是高防CDN,高防CDN是如何防御网络攻击的呢?
- webpack设置打包入口后运行时报错Invalid configuration object. Webpack has been initialized using a configuration
- no non-test Go files
- 第一篇 厚黑学 三、厚黑经
- 小程序激励视频观看超过30秒,获取奖励