×

注意!页面内容来自https://www.codeleading.com/article/79686583580/,本站不储存任何内容,为了更好的阅读体验进行在线解析,若有广告出现,请及时反馈。若您觉得侵犯了您的利益,请通知我们进行删除,然后访问 原网页

AFL安装使用教程

技术标签: 网络  大数据  java

安装

AFL简介:一个面向安全的模糊程序,采用新型的编译时工具和遗传算法来自动发现干净、有趣的测试用例,从而触发目标二进制文件中的新内部状态。

准备

Ubuntu 20.04
Target Platform:x86_64 and arm64
必备软件包:
make/build-essential

sudo apt-get install build-essential make

下载AFL包

https://lcamtuf.coredump.cx/afl/releases/afl-latest.tgz

AFL快速安装

  1. 编译AFL使用 make
  2. 找到或编写一个相当快的、简单的程序,从文件或stdin中获取数据,以适合测试的方式进行处理,然后退出
  3. 编译程序 /library去进行模糊测试 使用afl-gcc
CC=/path/to/afl-gcc CXX=/path/to/afl-g++ ./configure --disable-shared
   make clean all

4.获取一个小的但是有效的输入文件,对程序有意义
5.如果这个程序从标准输入流进行读取,运行afl-fuzz就像

   ./afl-fuzz -i testcase_dir -o findings_dir -- \
     /path/to/tested/program [...program's cmdline...]

如果这个项目从一个文件里获取输入,你能用@@在这个命令行中

6.通过及时查阅文档来调查模糊器界面用户中显示为红色的任何东西

注意:如果出现了以下情况
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B5ablS6H-1648625174936)(https://note.youdao.com/yws/res/33313/WEBRESOURCE82c44f88556a2a873616345d20063b06)]
需要对操作系统核心转储进关闭

sudo su
echo core >/proc/sys/kernel/core_pattern
exit

使用

创建一个测试案例文件 afl_test.c

#include <stdlib.h>
#include <signal.h>

void test (char *buf) {
    int n = 0;
    if(buf[0] == 'a') n++;
    if(buf[1] == 'f') n++;
    if(buf[2] == 'l') n++;
    if(buf[3] == '!') n++;  
    printf("%d\n",n);    
    if(n == 4) {
    printf("awesome!\n");
        raise(SIGSEGV);
    }else{
        printf("wrong!\n");
    }
}

int main(int argcchar *argv[]) {
    char buf[100];
    test(argv[1]);
    return 0;
}

使用 afl-gcc进行编译

afl-gcc -g -o test test_afl.c

使用afl-fuzz进 fuzzing测试

afl-fuzz -i fuzz_in -o fuzz_out ./afl_test @@

其中两个@@表示占位符 (因为源程序中需要在运行中有相应的字符串输入),以及需要创建fuzz_in,用来存放初始的种子和 fuzz_out最终得到的crash

最终得到如图所示的AFL运行结果:
(https://note.youdao.com/yws/res/33321/WEBRESOURCE9c334341f7a79679061c90b6d3c3a61b)]

版权声明:本文为weixin_44237378原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44237378/article/details/123847554

智能推荐

AFL编译和使用LAVA_M

使用AFL编译LAVA_M 在运行./validate.sh之前,设置CC和CXX的环境,运行命令: 可以通过env查看环境变量是否设置好,然后运行./validate.sh即可。 问题 修改validate.sh文件中./configure这一行命令并不能利用afl成功编译,运行afl提示程序无插桩。...

使用afl对libmodbus进行fuzz

1. 过程概览 下载编译libmodbus 利用 preeny 库辅助fuzz 获取样本数据,数据处理 启动afl 2. 具体步骤 2.1 下载编译libmodbus libmodbus库是一个用于 modbus 通讯的库,通过这个库可以很方便的实现 modbus 服务器和客户端的通讯。 首先下载好源码,目录下的 tests 目录里面有一些示例程序。 然后编译 modbus server,使用 a...

kafka安装使用教程

下载地址:https://www.apache.org/dyn/closer.cgi?path=/kafka/1.0.2/kafka_2.11-1.0.2.tgz 文档地址:http://kafka.apache.org/10/documentation.html#quickstart 下载后配置,暂时不配 开启服务 开启zookeeper 开启kafka服务 创建topic(主题/队列) 查看主...

jhipster 安装使用教程

简介 jhipster 是一个开源的脚手架工具.可以 基于 Node. + Yeoman + Bower + Angular JS + Gulp + Spring Boot 等 生成一个完整的前端 + 后端 工程,是各种最佳实践的结合。 官方教程 - 中文 : https://www.jhipster-cn.tech/ 官方教程 - 英文 : https://www.jhipster.tech...

kafka 安装,使用教程

记录一下,安装过程 风来了.fox 1.JAVA JDK 安装和环境变量配置 http://blog.csdn.net/fenglailea/article/details/52457731 2.kafka 下载 http://kafka.apache.org/downloads.html 选择【Binary downloads】下载 这里选择当前最新版(2016-09-07): Scala 2....

猜你喜欢

Redis安装使用教程

一、redis下载 1.首先下载redis 下载地址 2.启动服务 二、在spring(IDEA)中配置redis 1.依赖包安装 在maven里添加依赖包 2.Spring 项目集成进缓存支持        要启用缓存支持,需要创建一个新的 CacheManager bean。CacheManager 接口有很多实现,本文演示的是和 Redis 的集成,自...

docker 安装使用教程

一、docker安装 1、环境:CentOS7.4 2、添加docker的yum源命令行输入 cat >/etc/yum.repos.d/docker.repo <<-EOF 3、安装Docker软件包 yum install docker-engine 4、启动docker service docker start 5、测试运行下hello-world镜像 docker run...

NodeJs安装使用教程

1.下载 官网下载 :https://node.org/en/download/ 下载好之后,一路next即可 2. 更改配置 2.1 更改目录 2.1.1 更改缓存目录 2.1.2 更改全局安装目录 以后安装的模块都会安装到此目录下 2.2 更改镜像 设置为国内的镜像,以便于更快的下载模块 2.3 查看当前配置 3. 安装一些常用模块 3.1 安装最新的npm 加-g参数是全局安装,也就是将...

apioak安装使用教程

centos 7 安装apioak 安装 OpenResty 和其他必需的依赖项 安装MariaDB 安装aoioak 导入数据 修改数据库链接信息并启动 配置和使用都很简单,方便在同一个主机部署多域名的网站。 转载请联系:宋洋葱...

Helm安装使用教程

JFrog_ChartCenter 下载helm介质 配置helm 部署tiller-仅供参考(如果将tiller部署k8s集群中,那么tiiler将获取k8s的cluster-admin权限,有一定安全隐患。我们考虑将tiller部署在本地节点中。即 tillerless) 在本地节点部署tillerless (个人感觉就是 centos yum源部署在 http/ftp上,所有节点repo文件...