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的基础使用相关推荐

  1. AFL(American Fuzzy Lop)源码详细解读(1)

    AFL(American Fuzzy Lop)源码详细解读(1) 多亏大佬们的文章,对读源码帮助很大: https://eternalsakura13.com/2020/08/23/afl/ http ...

  2. AFL(American Fuzzy Lop)源码详细解读(3)

    AFL(American Fuzzy Lop)源码详细解读(3) 本篇是关于主循环阶段的内容,整个AFL最核心的部分,篇幅较长.最后简述一下afl_fuzz整体流程. 多亏大佬们的文章,对读源码帮助很 ...

  3. AFL(American Fuzzy Lop)源码详细解读(2)

    AFL(American Fuzzy Lop)源码详细解读(2) 本篇是关于 dry run (空跑.演练) 阶段的内容,一直到主循环之前. 多亏大佬们的文章,对读源码帮助很大: https://et ...

  4. AFL(American Fuzzy Lop)-afl-fuzz.c

    转载AFL(American Fuzzy Lop)源码详细解读(1) AFL(American Fuzzy Lop)源码详细解读(1) 多亏大佬们的文章,对读源码帮助很大: https://etern ...

  5. AFL(american fuzzy lop)学习二

    AFL(american fuzzy lop)学习二 @sizaif @2022-04-10 设计思想 覆盖率计算 改进边缘覆盖: 向目标程序注入以下工具来捕获分支(边缘)覆盖率和分支命中计数 一条边 ...

  6. AFL(american fuzzy lop)学习三

    AFL(american fuzzy lop)学习三 @sizaif @2022-04-11 fork Server 为了提高性能,afl-fuzz 使用"fork server" ...

  7. AFL(american fuzzy lop)学习一

    AFL(american fuzzy lop)学习一 @sizaf AFL 的模糊方法 基于改进的边缘覆盖 插桩法引导的遗传算法 流程: 插桩 从源码编译程序时进行插桩,以记录代码覆盖率(Code C ...

  8. AFL(American Fuzzy Lop)源码详细解读(8)

    这篇记录 llvm mode 中的 afl-llvm-pass.so.cc 文件和 afl-llvm-rt.o.c 文件,以及整体流程的简述. 对llvm这部分理解还比较浅. 可以阅读大佬的这篇文章: ...

  9. 小白初学AFL(American Fuzzy Lop)

    有幸从一位师哥那里知道这个软件,但是由于实习刚刚结束,终于有时间一探当前最为强大而有效的漏洞挖掘技术. 首先我的电脑系统是WINDOWS10,而AFL支持的是Linux系统,当然大家如果不想安装双系统 ...

最新文章

  1. python 安装库 报错 SSL: CERTIFICATE_VERIFY_FAILED 解决方法
  2. matelab的安装
  3. HDFS的namenode和datanode
  4. Kubernetes里的secret最基本的用法
  5. Linux命令:mkdir
  6. go定时器 每天重复_Go 简单性的价值:来自对 Go 倍加青睐的谷歌软件工程师的自述...
  7. 宝塔自助建站系统源码v8.0
  8. Virtual DOM(虚拟dom-2)
  9. 【Spring】Spring Boot 和 Redis 自定义 RedisTemplate
  10. 仅需 5 步,用 JavaScript 直接通过前端发送电子邮件
  11. 排除表_维修电工十年经验分享:常见电气故障及排除故障方法
  12. 在 Cloud 9 中搭建和运行 Go
  13. Android市场变化令微软很受伤 专利授权收入锐减26%
  14. 破解PPT密码/改只读为可编辑PPT
  15. 代码统计工具CLOC
  16. K8S集群应用市场安装部署:第一篇
  17. python for 循环中的下划线
  18. 无线控制需要服务器,H3C无线控制器与LDAP服务器配合进行远程Portal认证可以做么?...
  19. Windows驱动_文件系统微小过滤驱动之一初识MiniFilter
  20. 《Python数据分析基础教程:NumPy学习指南(第2版)》笔记16:第七章 专用函数2——金融函数

热门文章

  1. Graph Contrastive Learning with Adaptive Augmentation
  2. IOS、Android设计规范/商用字体总结——UI设计入门,你想要的都在这!
  3. 游戏配音如何提高声音感知力
  4. 【转载】Locust实现集合点
  5. AIOps——从数字化运维、智能化运维到智慧化运营
  6. 什么是高防CDN,高防CDN是如何防御网络攻击的呢?
  7. webpack设置打包入口后运行时报错Invalid configuration object. Webpack has been initialized using a configuration
  8. no non-test Go files
  9. 第一篇 厚黑学 三、厚黑经
  10. 小程序激励视频观看超过30秒,获取奖励