【Clang+LLVM+honggfuzz学习】(二)honggfuzz的安装与试用

news2024/11/18 7:27:04

书接上篇【Clang+LLVM+honggfuzz学习】(一)LLVM简介、安装和第一个Hello Pass
本篇介绍honggfuzz的安装与简单使用

本文架构,PS:可选择观看哦

  • 前言
  • git安装
  • 试用
    • 编写测试文件`demo.c`
    • 设置环境变量
    • 开始fuzz
    • Fuzz-ing
    • 疑问

前言

漏洞检测做毕设,还有一年。半路换研究方向简直要命(微笑) 需要用到 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,如果出现下面这样的就说明安装成功了
honggfuzzversion

试用

编写测试文件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++

当然,你也可以设置其他的
ours

setfuzz

开始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___ 是左右各三个下划线_而且跟待测程序之间需要有一个空格
否则会报错:
beginfuzz

Fuzz-ing

输入命令之后,则会以in目录下的语料库作为输入,逐个测试我们的demo。产生的异常会存放在result目录下。可以看到这里经过近16分钟的测试,已经产生了441个crashes但感觉还有有点慢,得想办法改进改进
在这里插入图片描述

先CTRL+C终止下fuzzing,查看目前得到得结果。进入存放crashes得目录result,可以看到:
hongfuzz-result
其中存放了HONGGFUZZ.REPORT.TXT报告文件,以及造成程序崩溃得测试用例详情
honggfuzz-report

疑问

Q : 但是怎么知道具体什么用例导致得程序崩溃呢?比较疑惑。。。。。
因为输出目录下都不是可读的文件,难道这里面放的就是测试用例?
官方文档【Github】官方文档 这样写得:


  • OUTPUT FILES

ModeOutput file
Linux,NetBSDSIGSEGV.PC.4ba1ae.STACK.13599d485.CODE.1.ADDR.0x10.INSTR.mov____0x10(%rbx),%rax.fuzz

  • Description

  • SIGSEGV,SIGILL,SIGBUS,SIGABRT,SIGFPE - Description of the signal which terminated the process (when using ptrace() API, it’s a signal which was delivered to the process, even if silently discarded)
  • PC.0x8056ad7 - Program Counter (PC) value (ptrace() API only), for x86 it’s a value of the EIP register (RIP for x86-64)
  • STACK.13599d485 - Stack signature (based on stack-tracing)
  • ADDR.0x30333037 - Value of the _siginfo_t.si_addr_(see man 2 signaction for more details) (most likely meaningless for SIGABRT)
  • INSTR.mov____0x10(%rbx),%rax - Disassembled instruction which was found under the last known PC (Program Counter) (x86, x86-64 architectures only, meaningless for SIGABRT)

Q: 所以应该是以文件名得形式返回异常信息?又或者直接在HONGGFUZZ.REPORT.TXT中看到得异常信息就是全部?上述文章都没有解释得很好的,留个位置,等我知道了再来更新(反正早晚会知道…)

暂未完工~~ 后续有啥要更新的再写吧
最后再次感谢这些博客,带我逐步入门,解决了我学习上的小困惑。另外,本人也还在学习阶段,文中若有错误希望大家不吝指出,共同进步!

最后,再贴上参考得文献:
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1567598.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mac/win使用pyinstaller打包app/exe文件,活着执行脚本,双击运行

&#x1f338; 踩坑记录 python环境最好使用虚拟环境&#xff0c;推荐使用conda管理&#xff0c;并且若本地有python环境&#xff0c;不要使用和 本地环境版本 相同的虚拟环境 这里踩坑较多&#xff0c;已经记不清楚注意点 虚拟环境python版本不要和本地环境一样 mac/win只能…

【Linux】从零认识文件操作

送给大家一句话&#xff1a; 要相信&#xff0c;所有的不美好都是为了迎接美好&#xff0c;所有的困难都会为努力让道。 —— 简蔓《巧克力色微凉青春》 开始理解基础 IO 吧&#xff01; 1 前言2 知识回顾3 理解文件3.1 进程和文件的关系3.2 文件的系统调用openwrite文件 fd 值…

问题解决:写CSDN博文时图片大小不适应,不清晰,没法排版

项目环境&#xff1a; Window10&#xff0c;Edge123.0.2420.65 问题描述&#xff1a; 当我在CSDN写博文的时候&#xff0c;会经常插入一些图片&#xff0c;但有时候我插入的图片太大了&#xff0c;影响了整体排版。 比如我加入了一张图片&#xff0c;就变成了下面这个样子&…

前端三剑客 —— CSS (第三节)

目录 上节回顾&#xff1a; 1.CSS使用有以下几种样式; 2.选择器 1.基本选择器 2.包含选择器 3.属性选择器 [] 4.伪类选择器 &#xff1a; 5.伪元素选择器 ::before :after 3.常见样式的使用 常见样式参考表 一些特殊样式 媒体查询 自定义字体 变换效果 translate&…

OpenHarmony实战:小型系统平台驱动移植

在这一步&#xff0c;我们会在源码目录//device/vendor_name/soc_name/drivers目录下创建平台驱动。 建议的目录结构&#xff1a; device ├── vendor_name │ ├── drivers │ │ │ ├── common │ │ │ ├── Kconfig # 厂商驱动内核菜单入口 │ …

win11安装wsl报错:无法解析服务器的名称或地址

一 说明 项目开发中&#xff0c;需要用到wsl&#xff0c;因此根据wsl官方&#xff08;WSL安装教程&#xff09;命令 wsl --install 进行wsl的安装。而本文主要是记录自己在安装wsl中遇到的问题 “无法解析服务器的名称或地址” 的解决办法。 二 方法一&#xff1a;更改DNS&…

RUST语言基本数据类型认识

1.RUST的基本数据类型参考: 2.使用RUST数据类型声明变量并赋值: let a:i81;//8位有符号整数let a1:u82;//8位无符号整数let b:i161;//16位有符号整数let b1:u162;//16位无符号整数let c:i321;//32位有符号整数let c1:u322;//32位无符号整数let d:i641;//64位有符号整数let d1:u…

【web】nginx+php-fpm云导航项目部署-(简版)

一、yum安装nginx yum -y install nginx 二、php环境安装 2.1 php安装 yum -y install php 2.2 php-fpm安装 yum -y install php-fpm 注&#xff1a;PHP在 5.3.3 之后已经讲php-fpm写入php源码核心了。 2.3 项目依赖的php-xml和php-xmlrpc安装 yum -y install php-…

在Vue2里面加载AntvL7

1、代码块 <template><div ref"mapContainer" style"width: 800vh; height: 100vh; align-items: center; justify-content: center"></div> </template><script> export default {mounted() {this.initMap();},methods: {…

openplc Linux 地址映射io,读写驱动数据等使用记录

1. 上一篇记录 openplc使用C语言文件读写驱动实现基本流程。 openPLC_Editor C语言编程 在mp157 arm板上调用io等使用记录_openplc c 编程-CSDN博客 2. 下面通过映射地址的方式控制io和读写驱动数据。 在runtime 环境的 hardware 硬件配置中 选择 python on Linux(PSM)&#…

Redis常用命令补充和持久化

一、redis 多数据库常用命令 1.1 多数据库间切换 1.2 多数据库间移动数据 1.3 清除数据库内数据 1.4 设置密码 1.4.1 使用config set requirepass yourpassword命令设置密码 1.4.2 使用config get requirepass命令查看密码 二、redis高可用 2.1 redis 持久化 2.1.1 持…

PS从入门到精通视频各类教程整理全集,包含素材、作业等(7)复发

PS从入门到精通视频各类教程整理全集&#xff0c;包含素材、作业等 最新PS以及插件合集&#xff0c;可在我以往文章中找到 由于阿里云盘有分享次受限制和文件大小限制&#xff0c;今天先分享到这里&#xff0c;后续持续更新 PS敬伟01——90集等文件 https://www.alipan.com/s…

日历插件fullcalendar【前端】

日历插件fullcalendar【前端】 前言版权开源推荐日历插件fullcalendar一、下载二、初次使用日历界面示例-添加事件&#xff0c;删除事件 三、汉化四、动态数据五、前后端交互1.环境搭建-前端搭建2.环境搭建-后端搭建3.代码编写-前端代码fullcalendar.htmlfullcalendar.js 4.代码…

vue项目引入微信sdk: npm install weixin-js-sdk --save报错

网上查到要用淘宝的镜像 同事告知旧 域名&#xff1a;https://registry.npm.taobao.org/已经不能再使用 使用 npm config set registry http://registry.npmmirror.com

DTFT及其反变换的直观理解

对于离散时间傅里叶变换(DTFT)及其反变换的讲解&#xff0c;教材里通常会先给出DTFT正变换的公式&#xff0c;再举个DTFT的简单变换例子&#xff0c;推导一下DTFT的性质&#xff0c;然后给出DTFT反变换的公式&#xff0c;再证明一下正变换和反变化的对应关系。总的来说就是&…

MySQL版本特性和存储引擎选择

MySQL版本特性和存储引擎选择 1.说一下MySQL 5.5 5.6 5.7 8.0 各个版本的特性 MySQL 5.5 优点: 稳定性&#xff1a;5.5版本是长期支持&#xff08;LTS&#xff09;版本&#xff0c;因此它非常稳定&#xff0c;被广泛部署在生产环境中。兼容性&#xff1a;与旧版本的MySQL和…

索引的概念

索引的概念    1.索引是一种可选的与表相关的数据库对象&#xff0c;用于提高数据的查询效率。    2.索引是一种有序的数据结构。    3.如果一个表没有创建索引&#xff0c;则对该表进行查询时需要进行全表扫描&#xff1b;如果创建了索引&#xff0c;则在有条件查询时…

http模块 设置资源类型(mime类型)

虽然浏览器自带websocket功能它会根据响应回来的内容自动去判断资源类型&#xff0c;但是我们加上了mime类型判断代码会更加规范些 一、mime类型概念&#xff1a; 媒体类型是一种标准&#xff0c;它用来表示文档。文件、字节流的性质和格式。HTTP服务可以设置响应头Content-T…

WebKit简介

1、简介&#xff08;WebKit&#xff09; WebKit 是一个开源的浏览器引擎&#xff0c;最初由苹果公司基于KHTML&#xff08;K Desktop Environment的HTML渲染引擎&#xff09;开发&#xff0c;并广泛应用于Safari浏览器&#xff0c;后来也被其他多款浏览器和应用采用。WebKit负…

【管理咨询宝藏48】AA银行信息科技提升分析报告

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏48】AA银行信息科技提升分析报告 【格式】PPT版本&#xff0c;可编辑 【关键词】战略规划、商业分析、管理咨询 【强烈推荐】这是一套市面上非常…