本篇介绍honggfuzz的安装与简单使用
本文架构,PS:可选择观看哦
前言
漏洞检测做毕设,还有一年。半路换研究方向简直要命(微笑) 需要用到 LLVM honggfuzz,算是小白从0开始了…,做个笔记。
- LLVM :牛人Chris 开发的编译器框架,三段式分层架构【Github】 LLVM
- Clang:苹果公司开发的LLVM前端 (LLVM的子模块,源码在LLVM的clang文件夹ia)
- honggfuzz(本文):Google公司开发的模糊测试(fuzzing)工具 。与AFL、libfuzzer齐名,大家称其为AFL+libfuzzer增强版 【Github】 honggfuzz
没错!前言是复制粘贴的,我有强迫症,迫切希望开头一致!
前人的工作必须得到尊敬!放到前面,也希望能帮助大家解惑。
1.【CSDN Bolg】fuzzing工具之honggfuzz的安装与使用
2.【CSDN Bolg】使用反馈驱动 Fuzzer 工具 Honggfuzz 进行漏洞挖掘
3.【CSDN Bolg】模糊测试入门案例,利用AFL和Honggfuzz模糊测试Tiff
4.【REEBUF Blog】AFL漏洞挖掘技术漫谈(一):用AFL开始你的第一次Fuzzing
5.【博客园】fuzz实战之honggfuzz
git安装
git就是好用!一样都有源码~
git clone https://github.com/google/honggfuzz.git
make
make install
输入honggfuzz -v
,如果出现下面这样的就说明安装成功了
试用
编写测试文件demo.c
- 首先,创建 一个专门的文件夹存放我们的测试文件
mkdir fuzz
cd fuzz
mkdir in
mkdir result
- 然后,在
in
文件夹里面创建一个txt文件,写上helloworld(或者其他的也行) - 最后,在fuzz文件夹内,写一个demo,我的demo来源:
使用反馈驱动 Fuzzer 工具 Honggfuzz 进行漏洞挖掘–实战分析
感谢大佬!那我直接贴在下面了
touch demo.c
vim demo.c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/fcntl.h>
int main(int argc, char const \*argv[])
{
if(argc != 2)
{
printf("null args!\n");
return -1;
}
/\* Get file state \*/
struct stat fstat;
if(stat(argv[1], &fstat))
{
printf("Failed ^\_^\n");
return -1;
}
/\* Open file \*/
FILE \* fd = NULL;
fd = open(argv[1], O_RDONLY);
if(fd == -1)
{
printf("open file failed!\n");
return -1;
}
/\* Select \*/
char buf[15];
if(read(fd, buf, 2) == -1)
{
printf("read failed!");
return -1;
}
if(buf[0] == 'a' && buf[1] == 'b')
{
if(read(fd, buf, 4) != -1)
{
if(buf[2] == 's')
{
read(fd, buf, fstat.st_size - 6);
printf("%s\n", buf);
}
}
}
return 0;
}
设置环境变量
额…并不知道用啥来编c,所以我们要设置环境变量来告诉系统编译工具在哪。我使用honggfuzz自带的clang来编译demo.c
export CC=/home/username/Desktop/honggfuzz/hfuzz_cc/hfuzz-clang
export CXX=/home/username/Desktop/honggfuzz/hfuzz_cc/hfuzz-clang++
当然,你也可以设置其他的
开始fuzz
设置环境变量后在fuzz
文件夹下打开终端(或者自己逐步cd
到那里),输入
hongfuzz -e txt -u -z -Q -i ./in -W ./result -- ./demo ___FILE___
参数介绍(同样来自大佬文章 使用反馈驱动 Fuzzer 工具 Honggfuzz 进行漏洞挖掘
e
指定测试用例的扩展名u
保存所有测试用例z
源码插桩Q
打印被测试程序的输出i
语料库,即种子,也就是最原始的测试用例W
输出工作目录--
分隔 honggfuzz 与被测程序___FILE___
被测程序的参数,用占位符代替文件名,类似于 AFL 中的 @@
这里我要加点东西:
___FILE___
是左右各三个下划线_
而且跟待测程序之间需要有一个空格
否则会报错:
Fuzzing
输入命令之后,则会以in
目录下的语料库作为输入,逐个测试我们的demo。产生的异常会存放在result
目录下。可以看到这里经过近16分钟的测试,已经产生了441个crashes
。但感觉还有有点慢,得想办法改进改进
先CTRL+C终止下fuzzing,查看目前得到得结果。进入存放crashes
得目录result
,可以看到:
其中存放了HONGGFUZZ.REPORT.TXT
报告文件,以及造成程序崩溃得测试用例详情
模糊测试策略(Fuzzing strategy )
官方文档这样说:
The implemented strategy identifies files which add new code coverage (or increased instruction/branch counters). Those inputs are then added to a dynamically stored in memory corpus, and reused during following fuzzing rounds
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
MtAg-1715564542899)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!