当前位置: 首页 > news >正文

定向模糊测试工具Beacon基本用法

Beacon是一个定向模糊测试工具,给定行号,能够定向探索行号附近的代码区域。主要思想是采用静态分析的方法获取到与目标有关的变量的最弱前置条件(weakest precondition)的信息,并在相关位置插入断言,来提前终止模糊测试执行与目标无关的输入,提高模糊测试的吞吐量来提高效率。

关于这篇工作的具体介绍,可以参考该链接的解读:https://zhuanlan.zhihu.com/p/531371498

0. 安装

docker 拉取Beacon的镜像

docker pull yguoaz/beacon

使用方法见该链接:https://outstanding-hydrogen-2d1.notion.site/Beacon-documentation-8480ed4e7fff452a989f7e77ce749951

官方教程给出了基本的操作说明,这里打算实际复现下这个过程。

1. 分析precondition

/Beacon/precondInfer /Beacon/Test/swftophp-2017-7578.bc -target-file=/Beacon/Test/cstest.txt -join-bound=5

这个例子中:

  • /Beacon/Test/swftophp-2017-7578.bc是目标程序的字节码
  • /Beacon/Test/cstest.txt 是给定的行号。比如包含下面的内容
parser.c:66

给定的行号通常是漏洞的崩溃点,一般通过CVE数据库里的崩溃报告来获取。

执行上面命令后会输出三个文件:

  • bbreaches_Beacon_Test_cstest.txt : 能到达目标指令的基本块集合。
  • range_res.txt : 范围分析结果
  • transed.bc : 转换后的字节码用于后续的处理

bb_reaches_Beacon_Test_cstest.txt内是一堆数字,下面节选了一部分,应该是LLVM IR中间层的基本块的ID。

2676
38526
27001
7456
37338
19712
38153
1958
37059
33506
2190
37077

range_res.txt是前置条件分析的结果,包含了变量的取值范围等信息。

    {"fun": "outputTrailer_0x2608af8","funLoc": 7320,"instRes": [],"argRes": [],"unreachbb": [7353,7369]},{"fun": "parseSWF_DEFINEMORPHSHAPE_0x25efb78","funLoc": 32260,"instRes": [{"value": "  %62 = icmp ne void (i8*, ...)* %61, null, !dbg !7087","range": "[0,0]","line": 32343}],"argRes": [],"unreachbb": [32347]}

2. 插桩

插桩过程利用上面输出的信息,

/Beacon/Ins -output=/Beacon/Test/CVE-2017-7578.bc \
-byte -blocks=/Beacon/Test/bbreaches-CVE-2017-7578.txt \
-afl -log=log.txt -load=/Beacon/Test/outputs/range_res.txt \/Beacon/Test/outputs/transed.bc

各个选项的含义:

  • -output:输出插桩后的字节码文件
  • -blocks:接收可达的基本块列表,就是前面生成的bb_reaches_Beacon_Test_cstest.txt
    • 需要注意,默认情况下,可达性分析的结果是基于字节码的,因此需要使用-byte选项
    • 如果用户自己做了源码级的可达性分析,可以用-src选项。并且提供可达的行号,形式为“文件名:行号”
  • -load: 获取precondition,比如前面生成的range_res.txt
  • -afl:允许AFL覆盖率追踪的插桩
  • -asan选项:默认是关掉的,可能会导致功能性错误

然后将字节码编译为可执行的二进制文件,注意需要链接一些动态库。

clang /Beacon/Test/CVE-2017-7578.bc -o /Beacon/Test/CVE-2017-7578 -lm -lz /Beacon/Test/afl-llvm-rt.o

3. 开始fuzz

最后执行afl-fuzz命令

/Beacon/afl-fuzz -i /Beacon/Test/in -o /Beacon/Test/fuzz-output -m none -t 9999 -d -- /Beacon/Test/CVE-2017-7578 @@

总体流程和其他工作差不多。

4. 再来测试下Libtiff

由于镜像中没有提供生成字节码的文件,所以需要提前安装gllvm或者wllvm,这里就不再赘述。

然后准备好libtiff的目标文件,cstest.txt和libtiff种子文件夹in放在/Beacon/libtiff_test文件夹下

直接运行下面脚本即可,需要注意下面脚本假设gllvm放在/Beacon/文件夹下。

cd /Beacon/libtiff_test
git clone https://gitlab.com/libtiff/libtiff.git 
cd libtiff
export CC=/Beacon/gllvm/gclang 
export CXX=/Beacon/gllvm/gclang++ 
./autogen.sh
./configure --disable-shared
make clean 
make 
cd tools/
/Beacon/gllvm/get-bc tiffcp
mv tiffcp.bc /Beacon/libtiff_test/
/Beacon/precondInfer /Beacon/libtiff_test/tiffcp.bc -target-file=/Beacon/libtiff_test/cstest.txt -join-bound=5
/Beacon/Ins -output=/Beacon/libtiff_test/tiffcp.ci.bc \
-byte -blocks=/Beacon/libtiff_test/bbreaches__Beacon_libtiff_test_cstest.txt \
-afl -log=log.txt -load=/Beacon/libtiff_test/range_res.txt \/Beacon/libtiff_test/transed.bcclang /Beacon/libtiff_test/tiffcp.ci.bc -o /Beacon/libtiff_test/tiffcp -lm -lz /Beacon/Test/afl-llvm-rt.o/Beacon/afl-fuzz -i /Beacon/libtiff_test/in -o /Beacon/libtiff_test/fuzz-output -m none -t 9999 -d -- /Beacon/libtiff_test/tiffcp @@ 

另外,如果给的是无效的target,在运行precondInfer命令时会报如下错误:

malformed target file -- exiting!

相关文章:

定向模糊测试工具Beacon基本用法

Beacon是一个定向模糊测试工具,给定行号,能够定向探索行号附近的代码区域。主要思想是采用静态分析的方法获取到与目标有关的变量的最弱前置条件(weakest precondition)的信息,并在相关位置插入断言,来提前…...

《程序员面试金典(第6版)》面试题 02.01. 移除重复节点

题目描述 编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。 示例1: 输入:[1, 2, 3, 3, 2, 1] 输出:[1, 2, 3] -示例2: 输入:[1, 1, 1, 1, 2] 输出:[1, 2] 提示: 链表长度在[0, 20000]范…...

如何对web系统开展无障碍测试

Accessibility test(无障碍测试)是一种测试方法,旨在评估软件、网站或其他数字产品的可访问性,以确保它们能够被身体残障或其他特殊需求的用户使用。这些测试通常包括使用辅助技术,如屏幕阅读器和放大器,以…...

使用vite+vue3.0 创建一个cesium基础应用 ----01 项目搭建

使用vitevue3.0 创建一个cesium基础应用 ----01 项目搭建 1.使用yarn创建一个vite项目 我们可以在vite官网找到vite创建项目的命令 https://cn.vitejs.dev/ 可以使用yarn创建项目选择使用vue3.0框架,语言使用js 创建完成后结构如下: 2.找到vite社区中的…...

【Python学习笔记】第二十七节 Python 多线程

一、进程和线程进程:是程序的一次执行,每个进程都有自己的地址空间、内存、数据栈及其他记录运行轨迹的辅助数据。线程:所有的线程都运行在同一个进程当中,共享相同的运行环境。线程有开始、顺序执行和结束三个部分, …...

【id:18】【20分】B. DS顺序表--连续操作

题目描述建立顺序表的类,属性包括:数组、实际长度、最大长度(设定为1000)该类具有以下成员函数:构造函数:实现顺序表的初始化。插入多个数据的multiinsert(int i, int n, int item[])函数,实现在…...

vi编辑器操作指令分享

vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方…...

OSPF与BFD联动配置

13.1.1BFD概念 BFD提供了一个通用的、标准化的、介质无关的、协议无关的快速故障检测机制,有以下两大优点: 对相邻转发引擎之间的通道提供轻负荷、快速故障检测。 用单一的机制对任何介质、任何协议层进行实时检测。 BFD是一个简单的“Hello”协议。两个系统之间建立BFD会…...

jQuery基础

> 🥲 🥸 🤌 🫀 🫁 🥷 🐻‍❄️🦤 🪶 🦭 🪲 🪳 🪰 🪱 🪴 🫐 🫒 &#x1…...

day39|139.单词拆分 背包问题ending

139.单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1: 输入: s "leetcode",…...

Shell脚本编程

Shell编程 视频地址https://www.bilibili.com/video/BV1hW41167NW/?p1&vd_source977d52a6b92ce8b6ae67c16fc61f0428 第一章 Shell概述 大数据程序员为什么要学习Shell呢? 需要看懂运维人员编写的Shell程序偶尔会编写一些简单的Shell程序来管理集群&#xf…...

ChatGPT解答:JavaScript保存当前网页页面图片为pdf文件或者word文件,前端用vue2,给出详细的方案和代码

ChatGPT解答:JavaScript保存当前网页页面图片为pdf文件或者word文件,前端用vue2,给出详细的方案和代码 ChatGPTDemo Based on OpenAI API (gpt-3.5-turbo). JavaScript保存当前网页页面图片为pdf文件或者word文件,前端用vue2&am…...

Python基础学习11——文件

我们可以利用python对本电脑文件夹里的文件进行处理,python中提供了一系列相关的方法和函数供我们使用。 读取文件 我们现在在本python文件中有一个txt文件名为Lego,那么我们就可以利用python打开该文件 with open(Lego.txt) as file_text:contents …...

外网用户打不开公司的网站?web服务器端口映射到公网

我们经常会遇到这样的情景,在公司内部可以打开公司的网站,在家里或者外网却打不开,按照网上的做法,重新启动了服务器和iis,还是不行。许多用户设置了路由器端口映射功能,但是端口映射不成功怎么办&#xff…...

【CS224W】(task9)图神经网络的表示能力(更新中!!)

note 基于图同构网络(GIN)的图表征网络。为了得到图表征首先需要做节点表征,然后做图读出。GIN中节点表征的计算遵循WL Test算法中节点标签的更新方法,因此它的上界是WL Test算法。 在图读出中,我们对所有的节点表征&…...

binlog找回误删数据

1、检查当前是否开启binlog存储 输入命令show variables like %log_bin%;,结果如下 可以看到log_bin的值是ON,说明binlog开启了。 2、查找binlog的存储位置 这个去到数据库的my.cnf配置文件中寻找,有一个log_bin的配置 切换到log_bin的目…...

《程序员面试金典(第6版)》面试题 02.03. 删除中间节点

题目描述 若链表中的某个节点,既不是链表头节点,也不是链表尾节点,则称其为该链表的「中间节点」。 假定已知链表的某一个中间节点,请实现一种算法,将该节点从链表中删除。 例如: 传入节点 c&#xff08…...

Spring Boot

目录 SpringBoot SpringBoot创建和使用 什么是Spring Boot Spring Boot优点 Spring Boot项目的创建 项目目录介绍和运行 目录介绍 项目运行 SpringBoot核心设计思想 SpringBoot的配置文件 配置文件的作用 配置文件的格式 注意事项 properties配置文件 propertie…...

图论初入门

目录 一、前言 二、图的概念 三、例题及相关概念 1、全球变暖(2018年省赛,lanqiao0J题号178) 2、欧拉路径 3、小例题 4、例题(洛谷P7771) 一、前言 本文主要讲了树与图的基本概念,图的存储、DFS遍历…...

02-Oracle数据库的启动与关闭

本文章主要讲解Oracle数据库的启动与关闭方法,详细讲解启动Oracle的命令,三种启动数据库的方法及区别;关闭数据库的4种方法及他们的区别。 启动和关闭数据库 •数据库没启动前,只有拥有DBA权限或者以sysoper或sysdba身份才能连接到…...

MiniCPM-V-2_6代码截图理解:函数逻辑分析+注释生成效果展示

MiniCPM-V-2_6代码截图理解:函数逻辑分析注释生成效果展示 1. 引言:当AI能看懂代码截图 你有没有遇到过这样的情况:看到一个复杂的代码截图,想要理解其中的函数逻辑,却需要一行行手动输入代码?或者面对一…...

4步打造高效能开源路由器:OpenWrt固件安装指南

4步打造高效能开源路由器:OpenWrt固件安装指南 【免费下载链接】openwrt openwrt编译更新库X86-R2C-R2S-R4S-R5S-N1-小米MI系列等多机型全部适配OTA自动升级 项目地址: https://gitcode.com/GitHub_Trending/openwrt5/openwrt OpenWrt固件安装是提升R5S设备性…...

极速体验OpenClaw:星图平台nanobot镜像10分钟入门

极速体验OpenClaw:星图平台nanobot镜像10分钟入门 1. 为什么选择云端沙盒体验OpenClaw 作为一个长期关注AI自动化工具的技术爱好者,我一直在寻找一个既安全又高效的本地AI助手解决方案。OpenClaw的出现让我眼前一亮,但本地部署的复杂环境配…...

应对维普AIGC史诗级升级:2026降重急救包!5款工具基准测试 x 4大手改重构技巧

论文初稿快要交了,维普却突然搞了个大动作,把系统给升级了。说实话,这事真挺让人头疼的,有人前两天查还是绿的,以为稳了,结果升级完再一测,AI率直接飙红。 但别慌,也别怀疑自己是不…...

连续使用 OpenClaw 50 天后,我总结了 3 个核心工作流和 5 个血泪教训

🔥 连续使用 OpenClaw 50 天后,我总结了 3 个核心工作流和 5 个血泪教训AI 不会取代你,但会用 AI 的人会取代你——这句话说烂了,但 50 天后我才真正明白它的意思。01 上周五下午 5 点,同事都在加班,我先走…...

从零构建CPWC超声成像仿真:Field II实战与模块化工作流解析

1. CPWC超声成像仿真入门指南 第一次接触CPWC超声成像仿真时,我被各种专业术语和复杂的数学公式搞得晕头转向。经过几个月的实战摸索,终于总结出一套小白也能快速上手的方法。CPWC(相干平面波复合)是近年来超声成像领域的热门技术…...

告别境外断网:Nrfr让全球网络无缝连接——免Root跨国通信解决方案

告别境外断网:Nrfr让全球网络无缝连接——免Root跨国通信解决方案 【免费下载链接】Nrfr 🌍 免 Root 的 SIM 卡国家码修改工具 | 解决国际漫游时的兼容性问题,帮助使用海外 SIM 卡获得更好的本地化体验,解锁运营商限制&#xff0c…...

别再只会复制代码了!用CubeMX配置STM32F407的PWM驱动TB6612,从原理到实战一次搞懂

从零构建PWM电机控制系统:STM32F407与TB6612的深度实践指南 引言:为什么你需要摆脱复制粘贴的陷阱 在实验室里,我见过太多学生面对电机控制项目时的第一反应——打开搜索引擎,寻找"STM32 PWM驱动电机代码",然…...

FLUX.1-dev-fp8-dit文生图+SDXL_Prompt风格效果展示:多分辨率适配(1024x1024/768x1344)

FLUX.1-dev-fp8-dit文生图SDXL_Prompt风格效果展示:多分辨率适配(1024x1024/768x1344) 你见过能同时驾驭方形海报和竖屏手机壁纸的AI画图工具吗?今天要聊的FLUX.1-dev-fp8-dit模型,配合SDXL Prompt风格插件&#xff0…...

小龙虾使用手册(蓝皮书)实战案例版

扫描下载文档详情页: https://www.didaidea.com/wenku/16656.html...