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

对lua进行模糊测试及问题记录

网上对lua进行测试的帖子太少了,然后最近正好要跑对lua进行模糊测试的过程,下面以afl为例,讲解如何对lua进行测试。

安装lua

安装lua的详细过程可以参考此链接:
https://github.com/HexHive/magma/tree/v1.2/targets/lua
首先按照preinstall.sh中的文件执行需要提前安装的依赖,然后执行fetch.sh下载lua,再执行build.sh对lua进行编译即可运行,详细执行过程如下:

安装前准备

在安装lua之前需要先安装编译lua需要的依赖:

apt-get update && \
    apt-get install -y git make libreadline-dev

下载lua

讲lua下载并安装到repo目录下,repo可以替换为任何你想安装的目录

git clone https://github.com/lua/lua.git "./repo"

编译lua

在编译lua的时候可以采用gcc来编译,也可以使用afl-clang,lua默认的编译方式是gcc,在进行模糊测试时我采用的是afl-clang,也因此,在执行时报了一个错,在下文中进行讲解。

  1. 配置环境变量
    如果你需要使用gcc来进行编译则跳过这一步,your path是你的afl-calng-fast路径,一般在你的fuzzer目录下
export CC=your path /afl-clang-fast CXX=/your path/afl-clang-fast++

修改makefile配置

cd repo
vim makefile

在makefile中将CC=gcc这一句设置为无效:
在这里插入图片描述
2. 编译lua

#进入前面lua拉去的目录下
cd repo  
make clean
make liblua.a
cp liblua.a ../out/
make lua
cp lua ../out/

模糊测试

接下来就可以对lua进行模糊测试了,如果想要添加字典可以添加此链接的字典:lua.dict
将字典也放到out目录下.

接下来将lua中的测试用例复制到out目录:

#注意测试用例在repo目录下的testes中,将其复制到out目录下得得corpus中
cp ./repo/testes/*.lua …/out/corpus/

此时各个文件夹情况如下:
在这里插入图片描述
执行模糊测试:

afl-fuzz -i ./corpus/  -o out -x ./lua.dict -- ./lua

遇见问题

1.编译lua时

前面已经提到,本文选择的是afl-clang来配置的环境变量,然而在make编译完后进行模糊测试时报错如下:

Looks like the target binary is not instrumented! The fuzzer depends on
compile-time instrumentation to isolate interesting test cases while
mutating the input data. For more information, and for tips on how to
instrument binaries, please see /usr/local/share/doc/afl/README.

When source code is not available, you may be able to leverage QEMU
mode support. Consult the README for tips on how to enable this.
(It is also possible to use afl-fuzz as a traditional, “dumb” fuzzer.
For that, you can use the -n option - but expect much worse results.)

[-] PROGRAM ABORT : No instrumentation detected
Location : check_binary(), afl-fuzz.c:6989

在这里插入图片描述
这个实际仔细看就会发现在执行make编译liblua.a时尽管我们设置了环境变量为afl-clang,但编译时仍然是按照gcc来编译的。
在这里插入图片描述
这是因为makefile文件中直接定义了CC为gcc,只需要将makefile修改了就行。
进入repo文件夹下
vim makefile
将CC=gcc引掉即可
在这里插入图片描述

2.模糊测试时报错

在进行模糊测试时还报了这个错,显示超时,直接把对应的corpus里面的测试用例删除就可以了
在这里插入图片描述

相关文章:

  • VMware安装centOS7
  • Linux安全基线(二)配置8小项
  • 操作系统-第二章-调度与调度算法
  • 千年传承!敦煌遗址在云宇宙重建,背后还隐藏了哪些故事
  • IB课程热门科目你喜欢哪几个?
  • Node.js | JavaScript也能写后端?
  • 正念禅修(一)
  • cf #821 Div.2(A~E)
  • IDEA使用git拉取gitLab的项目——多个项目得放在同一文件下
  • 天津市高分二号卫星影像获取/高分一号卫星影像
  • 【错误解决】KeyError: ‘FusedBatchNormV3‘
  • TOP10!政策红利「叠加」市场刚需,谁在「领跑」干线物流赛道
  • 【Python数据分析 - 10】:pandas常见基本操作
  • 菊风推出小程序SDK,支持与落地电话、App、智能硬件互通!
  • excel 函数countifs的用法
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • go append函数以及写入
  • IndexedDB
  • JavaWeb(学习笔记二)
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Js基础知识(四) - js运行原理与机制
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • React中的“虫洞”——Context
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Unix命令
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • XML已死 ?
  • Yii源码解读-服务定位器(Service Locator)
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 前端临床手札——文件上传
  • 微信开源mars源码分析1—上层samples分析
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​queue --- 一个同步的队列类​
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (0)Nginx 功能特性
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (39)STM32——FLASH闪存
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (vue)页面文件上传获取:action地址
  • (十一)手动添加用户和文件的特殊权限
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)Scala的“=”符号简介
  • *** 2003
  • .Net 6.0 处理跨域的方式
  • .net core webapi 大文件上传到wwwroot文件夹
  • .net core 控制台应用程序读取配置文件app.config
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .Net转前端开发-启航篇,如何定制博客园主题
  • .skip() 和 .only() 的使用
  • /bin/bash^M: bad interpreter: No such file or directory