alf-fuzz初试(一)

2024-03-14 09:32
文章标签 初试 fuzz alf

本文主要是介绍alf-fuzz初试(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0x00 搭建测试环境

1.docker
2.docker镜像
使用作者已经帮我们搭建好了测试的docker环境

step1:拉取docker镜像

    ➜  Desktop docker pull mykter/afl-trainingUsing default tag: latestlatest: Pulling from mykter/afl-training.....Status: Downloaded newer image for mykter/afl-training:latest

step2:启动镜像

➜  binder docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
mykter/afl-training   latest              1c50ec5b1735        2 weeks ago         1.38GB➜  binder docker run --privileged -p 22000:22 -e PASSMETHOD=env -e PASS=yourpassword mykter/afl-training
Password set from environment variable
Spawning SSHd

step3:ssh连接镜像

    ➜  Desktop ssh fuzzer@localhost -p 22000

0x01 quickstart

配好llvm的环境

先cd到afl-2.52b来bulid alf


make
make -C llvm_mode
sudo make install

alf编译含有漏洞的文件:

$ cd quickstart
$ CC=afl-clang-fast AFL_HARDEN=1 make

查看程序的基本逻辑:

fuzzer@f48686888e7a:~/workshop/quickstart$ ./vulnerableUsage: ./vulnerable
Text utility - accepts commands and data on stdin and prints results to stdout.Input             | Output------------------+-----------------------u <N> <string>    | Uppercased version of the first <N> bytes of <string>.head <N> <string> | The first <N> bytes of <string>.
fuzzer@f48686888e7a:~/workshop/quickstart$ ./vulnerable < inputs/u
CAPSme
fuzzer@f48686888e7a:~/workshop/quickstart$ cat inputs/u
u 4 capsme

0x02 开始运行fuzz

quickstart里含有一个demo,里面包含三种漏洞。

fuzzer@f48686888e7a:~/workshop/quickstart$ afl-fuzz -i inputs -o out ./vulnerable
在这里插入图片描述

去crash目录查看崩溃的文件:

第一种崩溃为

head 111111111hee:

fuzzer@55a3030afc22:~/workshop/quickstart$ cat /home/fuzzer/workshop/quickstart/out/crashes/id:000001,sig:11,src:000009,op:ext_AO,pos:0
head 111111111hee

使用gdb调试,且通过display来查看一些变量的值:

(gdb) r (gdb) r </home/fuzzer/workshop/quickstart/out/crashes/id:000001,sig:11,src:000009,op:ext_AO,pos:0
Starting program: /home/fuzzer/workshop/quickstart/vulnerable </home/fuzzer/workshop/quickstart/out/crashes/id:000001,sig:11,src:000009,op:ext_AO,pos:0Breakpoint 1, process (input=0x7fffffffe3e0 "head 111111111hee\n") at vulnerable.c:13
13		if (strncmp(input, "u ", 2) == 0)
(gdb) n
38		else if (strncmp(input, "head ", 5) == 0)
(gdb)
40			if (strlen(input) > 6)
(gdb)
42				len = strtol(input + 4, &rest, 10);
(gdb) display rest
1: rest = 0x603120 <__afl_area_initial> ""
(gdb) display len
2: len = 0
(gdb) n
43				rest += 1;		  // skip the first char (should be a space)
1: rest = 0x7fffffffe3ee "hee\n"
2: len = 111111111
(gdb) n
44				rest[len] = '\0'; // truncate string at specified offset
1: rest = 0x7fffffffe3ef "ee\n"
2: len = 111111111
(gdb) nProgram received signal SIGSEGV, Segmentation fault.
0x000000000040115c in process (input=0x7fffffffe3e0 "head 111111111hee\n") at vulnerable.c:44
44				rest[len] = '\0'; // truncate string at specified offset
1: rest = 0x7fffffffe3ef "ee\n"
2: len = 111111111

最后的崩溃点在rest[len] = ‘\0’;:


(gdb)n
44				rest[len] = '\0'; // truncate string at specified offset
1: rest = 0x7fffffffe3ef "ee\n"
2: len = 111111111
(gdb) nProgram received signal SIGSEGV, Segmentation fault.

报错为SIGSEGV,因为rest[len]为rest[111111111]=’\0’; 修改了我们没有权限访问的地址。

如果改成head 1hee\n呢?

其中hee\n为rest的值
而加入\n表示rest的结尾。如果len大于rest的长度 就会出现崩溃。

崩溃id:000002,sig:06,src:000009+000001,op:splice,rep:16也符合该规律:

fuzzer@55a3030afc22:~/workshop/quickstart$ cat /home/fuzzer/workshop/quickstart/out/crashes/id:000002,sig:06,src:000009+000001,op:splice,rep:16
head 99

u -111

第二种崩溃分析:

cat /home/fuzzer/workshop/quickstart/out/crashes/id:000000,sig:11,src:000008,op:arith8,pos:6,val:+13
u     -11\n

rest访问没有权限访问的地址:
0x7ffffffff000-0x7fffffffe3ea=3094

Program received signal SIGSEGV, Segmentation fault.
0x0000000000400f9d in process (input=0x7fffffffe3e0 "u     -11\\n\n") at vulnerable.c:31
31				out[i] = rest[i] - 32; // only handles ASCII
1: input = 0x7fffffffe3e0 "u     -11\\n\n"
2: rest = 0x7fffffffe3ea "n\n"
3: len = -11
4: out = 0x614260 "N\352", '\340' <repeats 93 times>, "k\017@淀\032", '\340' <repeats 16 times>, "\260\371 \340\340\340\340\340w;\200\327\337_\340\340\341\340\340\340\340\340\340\340(\305\337\337\337_\340\340\340`\340\340\341\340\340\340p\363 ", '\340' <repeats 13 times>, "\277\375\064\220\237\031\070h\360\354 \340\340\340\340\340 \305\337\337\337_\340\340\340", <incomplete sequence \340>...
5: i = 3094
6: rest[i] = <error: Cannot access memory at address 0x7ffffffff000>
7: out[i] = 0 '\000'
(gdb)

第三种崩溃如下:

fuzzer@55a3030afc22:~/workshop/quickstart$ ./vulnerable
surprise!
Segmentation fault

0x03 开始挑战

3.1 开始挑战一些真实的漏洞fuzz:

fuzzer@55a3030afc22:~/workshop/challenges/cyber-grand-challenge/CROMU_00007

编译:

CC=afl-clang-fast AFL_HARDEN=1   make
afl-fuzz -i input -o output ./CROMU_00007

3.2 fuzz jasper
jasper是一个开放源代码的主动提供的JPEG-2000编解码器的免费软件

前期准备:
git clone https://github.com/mdadams/jasper.git
sudo apt-get -y install cmake #安装依赖的cmake

执行编译命令:

mkdir BUILD &&
cd    BUILD &&
//设定编译器,注意在编译前需要把编译器设定为AFL的的编译器
export CC=afl-clang
export CXX=afl-clang++
cmake -DCMAKE_INSTALL_PREFIX=/usr    \-DCMAKE_BUILD_TYPE=Release     \-DCMAKE_SKIP_INSTALL_RPATH=YES \-DJAS_ENABLE_DOC=NO            \-DCMAKE_INSTALL_DOCDIR=/usr/share/doc/jasper-2.0.14 \..  &&
make

cd BUILD && make install

开始fuzz:
mkdir inFuzz output
afl-fuzz -i inFuzz -o outFuzz jasper --input @@ --output test.bmp --output-format bmp

跑出crash后,使用valgrind结合源码分析是否是漏洞

valgrind -v --tool=memcheck --leak-check=full jasper --input id:000035,sig:06,src:002011,op:havoc,rep:2
–output test.bmp --output-format bmp

AFL训练1~8:https://blog.csdn.net/qq_36711003/category_10146244.html

3.x测试fuzz kernrl
https://blog.cloudflare.com/a-gentle-introduction-to-linux-kernel-fuzzing/
https://github.com/cloudflare/cloudflare-blog/tree/master/2019-07-kernel-fuzzing

在这里插入图片描述

参考:

如何Fuzz ELF文件中的任意函数libfuzz
https://stfpeak.github.io/2017/06/12/AFL-Cautions/
https://paper.seebug.org/842/ AFL 漏洞挖掘技术漫谈(二):Fuzz 结果分析和代码覆盖率
https://github.com/Battelle/afl-unicorn afl-unicorn lets you fuzz any piece of binary that can be emulated by Unicorn Engine.

• [Fuzzing] Fuzzing DNS zone parsers - Cambus.net:
https://www.cambus.net/fuzzing-dns-zone-parsers/
・ 利用 AFL Fuzz statzone DNS Zone Parsers – Jett

https://github.com/rk700/uniFuzzer
A fuzzing tool for closed-source binaries based on Unicorn and LibFuzzer

这篇关于alf-fuzz初试(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/807975

相关文章

初试构建工具Webpack

文章目录 一、Webpack概述二、安装Webpack三、Webpack打包实战1、创建index.js2、创建index.html3、运行webpack4、浏览index.html5、添加第二个脚本(1)创建index2.js(2)修改index.js(3)重新运行 webpack(4)浏览index.html 6、引入CSS样式进行编译(1)安装必要的 Loaders(2)更新 webp

php环境搭建,小白helloworld初试

学php的起因是因为阿里云的云服务器好贵啊。用来搞测试网站有点方。虚拟主机倒是便宜,不过只有html和php环境。 一、本人php小白,有啥不对的,请指正。 1.各种软件环境:前人栽树,所以出现了XAMPP这种好东西,把需要的软件都搞到一起,然后直接下载解压就ok.这个貌似就是下载地址 下载后请安装在C,D,E,F这种根目录下,例如E:/xampp. 我也不知道为啥会这样,本人亲试,重装两次,

mongodb在windows下安装及简单使用教程(新手初试)

每次看新东西的时候,总会百度到很多有用的资料,很多前辈都是好人,他们走过的路都分享出来了.让我们可以省很多事情. 最近学 Spring Boot 有用到 mongodb。所以这里记录一下.以后如果在工作中用到,可以来看看 >>mongodb下载地址。 一:安装教程 可以自行百度,安装软件很简单。这里是在windows下安装mongodb。 二:启动 1.首先在软件的安装目录下,建立一个d

docker-compose 初试及命令基础 lnmp.yaml配置文件的使用

#安装docker-compose.yml docker-compose build #运行docker-compose.yml docker-compose up -d   #查看运行端口 docker ps 以一个简单的lnmp.yaml的配置文件进行讲解docker-compose命令的基础讲解,熟练掌握命令 [root@docker lnmp]# cat lnmp.yaml

初试微信小程序

微信小程序官网:https://mp.weixin.qq.com/debug/wxadoc/dev/?t=1475052055364 1.打开微信web开发者工具 双击打开:微信web开发者工具 2.新建项目 点击添加项目。(appid,项目名,项目保存的路劲:可以随便输入。) 3.打开项目 4.项目结构说明 5.编写代码 创建页面 index.wxml .wx

CentOS报错make: *** [fuzz-commit-graph.o] Error 1

目录 一、问题描述二、解决方法 一、问题描述 CentOS 7 下执行 make profix=/usr/local/git 命令时报错: [root@server-c00ef8c3-710d-4708-9cde-2c864e7c03e2 git-2.35.1]# make profix=/usr/local/gitCC fuzz-commit-graph.oIn fil

xray使用初试-扫描登录后的APP

前言 平时用的扫描器一般是AWVS,appscan等,属于主动扫描,但对于登录后的各种功能都不方便扫描,今天经同事指导,认识了xray扫描器,利用该扫描器配置代理对登录后的app进行了扫描,效果还不错,因此记录下来与大家分享。 主动扫描:自己发送请求包进行扫描被动扫描:对接收到的请求包进行扫描,所以尽量每个功能都走一遍 环境 环境:要扫描的APP安装在夜神模拟器中工具:xray使用命令,配

百度实习生面试初试

我可爱又厉害的舍友在百度实习,帮我内推的简历,不是校招,所以也没有传说中的二面三面等等。 刚开始都是简单自我介绍一下,我是简单介绍了一下之前做的项目,我自我感觉我很不主动,我没有把自己做的东西最多地体现出来。有时候面试官问我一个很基础的问题,我都不知道怎么回答,我会纠结他是不是让我从最底层推公式给他,然后就犹豫很久,所以我觉得面试官可能会认为我高端的算法不会,基础的东西掌握也不牢靠。 面试官主

SPA页面初试

之前一直很好奇,SPA应用到底是怎么实现的,昨天无意间看到了有一篇介绍的文章,就想着来试一下水(以下根据我的理解所写,可能会让你看的云里雾里,如果想加深了解,最好先了解下window.location.hash是什么东西) 其实,SPA的原理就是,一开始将一些必要的页面都加载进来,当你在页面输入别的路由的时候,其实还是待在当前的页面,只不过是他识别出你想要去的地址,然后将那个页面的内容获取到,替

WEB初试开发之学生管理系统总结

经过了三周的奋斗,终于有了点小成果。从刚开始的什么都不懂,到现在的整体了解。 在这次实践开发中,学习到了许多的东西,比如框架的搭建、JS、小组的及时交流(小组成员一共3人)等等。在这次实践中接触的技术有JSP、JS、html、css等,在这次实践中运用的工具有Myeclipse、tomcat、sql 2005精简版.                   在第一周中,大部分的