如何使用Frelatage对Python代码进行模糊测试

关于Frelatage

Frelatage是一款基于覆盖率的Python模糊测试工具,在该工具的帮助下,广大研究人员可以轻松对Python代码进行模糊测试。

Frelatage的设计与开发受到了很多社区现有模糊测试工具的启发,其中包括
AFL
/
AFL++

Atheris

PythonFuzz
等等。其主要目的是整合优化了其他模糊测试工具的优秀特性,以便帮助研究人员以更高效的方式对Python应用程序进行模糊测试和安全研究。

功能介绍

Frelatage支持对下列类型的参数进行模糊测试:

字符串

整型

浮点型

列表

元组

字典

函数(以文件作为输入)

工作机制

Frelatage主要通过遗传算法来生成覆盖率尽可能高的测试用例,整个过程大致如下图所示:

工具要求

该工具基于 Python 3开发,因此我们需要在本地设备上安装并配置好 Python
3
环境。

工具安装

pip安装(推荐)

pip3 install frelatage

源码构建

bash <(wget -q https://raw.githubusercontent.com/Rog3rSm1th/Frelatage/main/scripts/autoinstall.sh -O -)

工具使用

对典型参数进行模糊测试

import frelatage

import my_vulnerable_library

 

def MyFunctionFuzz(data):

  my_vulnerable_library.parse(data)

 

input = frelatage.Input(value="initial_value")

f = frelatage.Fuzzer(MyFunctionFuzz, [[input]])

f.fuzz()

对文件参数进行模糊测试

Frelatage支持对文件类型输入参数进行模糊测试,首先我们需要初始化文件值,这一步需要在输入文件夹中创建文件(默认为./in):

echo "initial value" > ./in/input.txt

然后运行模糊测试工具即可:

import frelatage

import my_vulnerable_library

 

def MyFunctionFuzz(data):

  my_vulnerable_library.load_file(data)

 

input = frelatage.Input(file=True, value="input.txt")

f = frelatage.Fuzzer(MyFunctionFuzz, [[input]])

f.fuzz()

工具配置

下面给出的是工具的配置样例:

export FRELATAGE_DICTIONARY_ENABLE=1 &&

export FRELATAGE_TIMEOUT_DELAY=2 &&

export FRELATAGE_INPUT_FILE_TMP_DIR="/tmp/frelatage" &&

export FRELATAGE_INPUT_MAX_LEN=4096 &&

export FRELATAGE_MAX_THREADS=8 &&

export FRELATAGE_MAX_CYCLES_WITHOUT_NEW_PATHS=5000 &&

export FRELATAGE_INPUT_DIR="./in" &&

export FRELATAGE_DICTIONARY_DIR="./dict" &&

python3 fuzzer.py

接下来,我们就可以向模糊测试工具传递参数了:

import frelatage

 

def myfunction(input1_string, input2_int):

    pass

 

input1 = frelatage.Input(value="initial_value")

input2 = frelatage.Input(value=2)

 

f = frelatage.Fuzzer(

    # 需要测试的方法

    method=myfunction,

    # 语料库

    corpus=[[input1], [input2]],

    # 线程数量

    threads_count=8,

    # 需要考虑的例外情况

    exceptions_whitelist=(OSError),

    # 需要排除的例外情况

    exceptions_blacklist=(),

    # 存储错误报告的目录

    output_directory="./out",

    # 启用或禁用静默模式

    silent=False,

    # 启用或禁用无限模糊测试

    infinite_fuzz=False

)

f.fuzz()

报告生成

工具在完成模糊测试之后,会将结果存储到输出目录(默认为./out)中,输出文件命名规则为:

id:<crash ID>,err:<error type>,err_pos:<error>,err_file:<error file>.

报告目录的格式如下:

├── out

    │   ├── id:<crash ID>,err:<error type>,err_file:<error file>,err_pos:<err_pos>

    │       ├── input

    │       ├── 0

    │            ├── <inputfile1>

    │       ├── ...

│   ├── ...

工具运行演示

许可证协议

本项目的开发与发布遵循
MIT
开源许可证协议。

项目地址

Frelatage: GitHub传送门

参考资料

https://github.com/google/AFL


https://github.com/AFLplusplus/AFLplusplus

https://github.com/google/atheris


https://github.com/fuzzitdev/pythonfuzz

https://www.python.org/

splus)

https://github.com/google/atheris


https://github.com/fuzzitdev/pythonfuzz

https://www.python.org/

如果你对网络安全入门感兴趣,那么你点击这里👉CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

如果你对网络安全感兴趣,学习资源免费分享,保证100%免费!!!(嘿客入门教程)

👉网安(嘿客)全套学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

img

img

👉网安(嘿客红蓝对抗)所有方向的学习路线****👈

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

img

学习资料工具包

压箱底的好资料,全面地介绍网络安全的基础理论,包括逆向、八层网络防御、汇编语言、白帽子web安全、密码学、网络安全协议等,将基础理论和主流工具的应用实践紧密结合,有利于读者理解各种主流工具背后的实现机制。

在这里插入图片描述
面试题资料

独家渠道收集京东、360、天融信等公司测试题!进大厂指日可待!
在这里插入图片描述

👉嘿客必备开发工具👈

工欲善其事必先利其器。学习客常用的开发软件都在这里了,给大家节省了很多时间。

这份完整版的网络安全(客)全套学习资料已经上传至CSDN官方,朋友们如果需要点击下方链接也可扫描下方微信二v码获取网络工程师全套资料【保证100%免费】

**

在这里插入图片描述

如果你对网络安全入门感兴趣,那么你点击这里👉CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值