AFL入门学习<AFL 下载和安装>

FUZZ:Fuzzing技术是一种基于黑盒(或灰盒)的测试技术,通过自动化生成并执行大量的随机测试用例来发现产品或协议的未知漏洞。随着计算机的发展,Fuzzing技术也在不断发展。
AFL:American fuzzy lop 号称是当前最高级的Fuzzing 测试工具之一,由谷歌的Michal Zalewski 所开发。通过对源码进行重新编译时进行插桩(简称编译时插桩)的方式自动产生测试用例来探索二进制程序内部新的执行路径。与其他基于插桩技术的fuzzers 相比,afl-fuzz 具有较低的性能消耗,有各种高效的fuzzing 策略和tricks 最小化技巧,不需要先行复杂的配置,能无缝处理复杂的现实中的程序。
①从源码编译程序时进行插桩,以记录代码覆盖率(Code Coverage);
②选择一些输入文件,作为初始测试集加入输入队列(queue);
③将队列中的文件按一定的策略进行“突变”;
④如果经过变异文件更新了覆盖范围,则将其保留添加到队列中;
⑤上述过程会一直循环进行,期间触发了crash的文件会被记录下来。

下载和安装:我们使用Ubuntu64位系统,通过以下命令即可成功安装AFL:

wget http://lcamtuf.coredump.cx/afl/releases/afl-latest.tgz
tar xvf afl-latest.tgz
cd afl-2.52b
sudo make && sudo make install
安装完成后,默认在/usr/local/bin/目录下,修改.bashrc加入环境变量export PATH=/usr/local/bin:$PATH后即可使用

AFL简单使用
虽然可以在网上找一个有漏洞的程序,但为了完全了解细节,我们还是自己写一个简单的C程序。这个程序使用了2个字符串缓冲区,每个缓冲区的长度为32字节,分别用于存放username和password。为了获取用户输入,我们使用不安全的gets()函数,它不会去检查边界,这会导致缓冲区溢出。

#include <stdio.h>
#include <string.h>int main(void)
{char login[32];char passwd[32];printf("Login: \n");gets(login);printf("Password: \n");gets(passwd);if (strcmp(login, "root") == 0) {if (strcmp(passwd, "1qazxsw2") == 0) {printf("Access Granted.\n");return 0;}}printf("Access Denied.\n");return 1;
}

执行该程序,会要求输入username和password。输入被存放到login和passwd变量中。然后使用strcmp()和正确的值比较,如果输入值为"root"和"1qazxsw2",控制台会输出"Access Granted.“,否则输出"Access Denied.”。
我们使用afl-gcc编译器来构建目标程序。AFL编译器会在源码周围添加代码,最大限度地扩大覆盖率。使用以下命令进行编译:

afl-gcc -fno-stack-protector -z execstack vuln1.c -o vuln1
-fno-stack-protector 该选项会禁止stack canary保护
-z execstack 允许堆栈可执行

使用afl-fuzz来fuzz程序
fuzz的一个关键点是创建好的测试用例,通过分析目标程序的所有潜在路径来最大化输入的覆盖率。vuln1程序很简单,只有3条路径:

username无效;
username有效,但password无效;
username和password都有效。
创建3个文件作为测试用例来覆盖3条路径,每个文件都包含2行。如下:

| test1.txt | test2.txt | test3.txt |
| --------- | --------- | --------- |
| a         | root      | root      |
| a         | a         | 1qazxsw2  |

AFL会读取每个文件的内容,将每一行输入到vuln1的标准输入中。创建一个名为testcase的目录,并在其中创建3个表示这些情况的文件。文件名并不重要。

创建3个文件之后,再创建一个和testcase同级的名为results的目录,该目录会保存fuzz结果。

最后一步准备工作:切到root用户,修改core_pattern文件内容为core:

 echo core > /proc/sys/kernel/core_pattern

使用以下命令开始fuzz:


afl-fuzz -i ./testcases/ -o ./results/ ./vuln1

开始fuzz之后,右上角的uniq crashes会很快出现变化,当total paths到达3时,已经达到了我们想要的效果。使用Ctrl-C终止程序。在真实环境下,我们一般无法知道一共有多少种路径,AFL提供颜色变化来帮助你判断是否已有结果。最需要关注的就是uniq crashes,如果它的值不为0,表明已经有输入导致了程序崩溃,在results/crashes文件夹里存有相应文件。

AFL入门学习<AFL 下载和安装>相关推荐

  1. PADS软件学习——软件下载与安装

    PADS软件学习--软件下载.安装.破解 1. 软件下载安装 1.1 软件下载 PADS:https://pan.baidu.com/s/113VGq5BGEQiuwcl2X6TECA 提取码: 3y ...

  2. 适合小白的Linux入门学习教程,从安装到实操(涵盖各种常用指令,超详细!)

    Linux入门学习 Linux简介 Linux是什么 Linux的特点 Linux和Windows的区别 Linux入门 我们为什么要学习Linux 环境搭建 安装CentOS 购买云服务器 走进Li ...

  3. Splunk工具学习(下载、安装、简单使用、核心概念)

    目录 什么是Splunk? 介绍 Splunk的应用场景 Splunk下载与安装 docker安装(推荐) 手动安装 Splunk简单使用 登录 搜索 详细了解Splunk Splunk的概念 Ind ...

  4. nodejs入门--node的下载与安装

    node.js的下载.安装及运行 1.下载 官网下载地址:https://nodejs.org/en/download/ 中文下载地址:http://nodejs.cn/download/ LTS:L ...

  5. c语言入门自学手机版,C语言入门学习app下载-C语言入门学习app最新版下载 V1.0.2-友情手机站...

    C语言入门学习app是一款0基础自学软件,这里有着丰富C语音相关课程学习,大家在这里是可以便捷搜索查找,随时都是可以找到适合感兴趣课程学习,都是一些优质课程知识提供大家,学员在这里是可以高效学习,海恩 ...

  6. c语言入门自学手机版,C语言入门学习软件下载-C语言入门学习手机版v1.0.2 - 起点软件园...

    C语言入门学习是一款最新推出上线于安卓手机平台的专业编程学习软件,C语言入门学习app收录了海量入门视频课程,清晰易懂的详细讲解专为刚入门学习C语言的小白量身打造,不同章节都有相应的习题,根据习题成绩 ...

  7. mysql install语句_MySQL入门学习(一)安装与基本操作

    安装篇 PHP+MySQL+Linux目前已逐渐成为小型web服务器的一种经典组合.在Windows环境下构筑和调试MySQL数据库是许多网站开发者的一种首选.本人在Windows98环境下初学MyS ...

  8. JBPM4.4入门学习一:JBPM安装配置及构建数据库环境

    好久不写博客了... JBPM一直是一个令我头疼的东西,想去学习确不知道如何下手.最近这两天上网搜了许多关于JBPM的东西,今天先整理一篇. 该篇文章主要介绍了使用JBPM的前期准备.创建数据库环境及 ...

  9. 机器人操作系统ROS Indigo 入门学习(1)——安装ROS Indigo【转】

    转自:http://blog.csdn.net/bobsweetie/article/details/43638761 Ubuntu14.04安装ROS Indigo 一.安装ROS 1.1配置Ubu ...

最新文章

  1. 使用OpenCV,Python进行图像哈希(差分哈希 dHash)处理
  2. ATS统计量proxy.node.client_throughput_out的单位调研
  3. 主攻ASP.NET.4.5.1 MVC5.0之重生:Web项目语音朗读网页文本,简单语音提示浏览状态
  4. Client does not support authentication protocol requested by server;
  5. mysql锁表查询_Mysql upate 更新锁表还是锁行测试
  6. 若依前后端分离如何修改title标题呢?
  7. 从零开始刷Leetcode——数组(268.283.414)
  8. 求助 mac企业微信多开
  9. linux下ntp服务配置
  10. filter 无效不起作用
  11. PLC可编程控制实验装置及单片机综合实验台
  12. Qt设计精美的登录注册界面(包含SQLite数据库应用)
  13. 设备树文件里的aliases和chosen
  14. KVM基于Web部署虚拟主机
  15. java使用多态打印个人信息_java 多态 回顾
  16. RemoteViews讲解
  17. flutter 中实现磨砂玻璃效果
  18. nuc977 配置nfs
  19. 解决windows11屏幕亮度忽明忽暗的问题
  20. 微信小程序学习第3天——网络数据请求

热门文章

  1. React之生命周期-forceUpdate
  2. 基于Tomcat7的WebSocket.兼容IE(客户端需Flash10)
  3. 试用了下ITIL开源管理工具iTop,感觉很爽,准备尽快部署并首先实现公司CMDB治理
  4. less使用语法详解
  5. 全国行政区划码(国家统计局数据)
  6. 四、豆瓣top250(BeautifulSoup)及京东商品评论(json)
  7. 绿叶积分编排制软件功能介绍
  8. Flutter 季度调研结果分享 | 聚焦多平台开发者关注的问题
  9. Oracle 12c 升级 19c
  10. vim cscope java_【转】Cscope的使用(领略Vim + Cscope的强大魅力)