模糊测试:使用随机输入破坏事物

news2024/9/28 21:21:14

模糊测试:使用随机输入破坏事物

    • 一个简单的模糊器
    • 模糊测试外部程序
      • 创建输入文件
      • 调用外部程序
      • 长时间运行的模糊测试
    • 模糊测试器的发现
      • 缓冲区溢出
      • 缺少错误检查

我们将从最简单的测试生成技术之一开始,随机文本生成(也称为模糊测试)的关键思想是将一串随机字符输入程序,以达到发现故障。

一个简单的模糊器

尝试完成此任务并构建一个模糊生成器。这个想法是生成随机字符,将它们添加到缓冲区字符串变量 () 中,最后返回字符串out。
random.randrange(start, end)-返回一个随机数
range(start, end)-创建一个迭代器
chr(n)-返回一个带有ASCll代码的字符n

import random
def fuzzer(max_length: int = 100, char_start: int = 32, char_range: int = 32)->str:
    string_length = random.randrange(0, max_length + 1)
    out = ""
    for i in range(0, string_length):
        out += chr(random.randrange(char_start, char_start + char_range))
    return out

该函数返回一串随机字符:fuzzer()
在这里插入图片描述
例如,我们还可以生成一系列小写字母。
在这里插入图片描述

模糊测试外部程序

如果我们实际调用一个带有模糊测试输入的外部程序会发生什么?首先,我们创建一个包含模糊测试数据的输入文件,然后,我们将此输入文件输入到所选程序中。

创建输入文件

import os
import tempfile
basename = "input.txt"
tempdir = tempfile.mkdtemp()
FILE = os.path.join(tempdir, basename)
print(FILE)

在这里插入图片描述
现在可以打开这个文件进行写入

data = fuzzer()
with open(FILE, "w") as f:
    f.write(data)

验证该文件是否确实创立并写入

contents = open(FILE).read()
print(contents)
assert(contents == data)

在这里插入图片描述

调用外部程序

采用算术表达式对其进行计算

import os
import subprocess
program = "bc"
with open(FILE, "w") as f:
    f.write("2 + 2\n")
result = subprocess.run([program, FILE],
                        stdin=subprocess.DEVNULL,
                        stdout=subprocess.PIPE,
                        stderr=subprocess.PIPE,
                        universal_newlines=True)  

长时间运行的模糊测试

现在让我们将大量输入到我们的测试程序中,看看它是否会在某些程序上崩溃。将所有结果存储在变量中,作为输入数据和实际结果。

trials = 100
program = "bc"

runs = []

for i in range(trials):
    data = fuzzer()
    with open(FILE, "w") as f:
        f.write(data)
    result = subprocess.run([program, FILE],
                            stdin=subprocess.DEVNULL,
                            stdout=subprocess.PIPE,
                            stderr=subprocess.PIPE,
                            universal_newlines=True)
    runs.append((data, result))

模糊测试器的发现

缓冲区溢出

许多程序都内置了输入和输入元素的最大长度。像 C语言中,很容易在程序(或程序员)甚至没有注意到的情况下超过这些长度,从而触发所谓的缓冲区溢出。
模拟缓冲区溢出行为:

def crash_if_too_long(s):
    buffer = "Thursday"
    if len(s) > len(buffer):
        raise ValueError
from ExpectError import ExpectError
trials = 100
with ExpectError():
    for i in range(trials):
        s = fuzzer()
        crash_if_too_long(s)
Traceback (most recent call last):
  File "/var/folders/n2/xd9445p97rb3xh7m1dfx8_4h0006ts/T/ipykernel_21451/292568387.py", line 5, in <cell line: 2>
    crash_if_too_long(s)
  File "/var/folders/n2/xd9445p97rb3xh7m1dfx8_4h0006ts/T/ipykernel_21451/2784561514.py", line 4, in crash_if_too_long
    raise ValueError
ValueError (expected)

缺少错误检查

许多编程语言没有异常,而是在特殊情况下有函数返回特殊错误代码。例如,C 函数通常从标准输入返回一个字符;如果不再有可用的输入,则返回特殊值(文件末尾)。

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

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

相关文章

Spring Cloud Gateway官方文档学习笔记

Spring Cloud Gateway官方文档学习笔记 前言 基础知识&#xff1a;API网关基础知识总结面试题&#xff1a;Spring Cloud Gateway夺命连环10问&#xff1f; 何为网关&#xff1f; 什么是网关&#xff1f;理解成火车站的检票口&#xff0c;统一 检票 网关优点&#xff1a; 统…

C#上位机与欧姆龙PLC的通信05---- HostLink协议

1、介绍 Hostlink协议是欧姆龙PLC与上位机链接的公开协议。上位机通过发送Hostlink命令&#xff0c;可以对PLC进行I/O读写、可以对PLC进行I/O读写、改变操作模式、强制置位/复位等操作。由于是公开协议&#xff0c;即便是非欧姆龙的上位设备&#xff08;软件&#xff09;&…

王者荣耀展示

..在写代码前要创建这些文件夹&#xff0c;并储存图片 代码 package com.sxt; import javax.swing.*; import java.awt.*; public class Background extends GameObject { public Background(GameFrame gameFrame) { super(gameFrame); // TODO Aut…

第5章 散列

我们在第4章讨论了查找树ADT&#xff0c;它允许对一组元素进行各种操作。本章讨论散列表(hash table)ADT&#xff0c;不过它只支持二叉查找树所允许的一部分操作。 散列表的实现常常叫作散列(hashing)。散列是一种以常数平均时间执行插入、删除和查找的技术。但是&#xff0c;那…

运维大模型探索之 Text2PromQL 问答机器人

作者&#xff1a;陈昆仪&#xff08;图杨&#xff09; 大家下午好&#xff0c;我是来自阿里云可观测团队的算法工程师陈昆仪。今天分享的主题是“和我交谈并获得您想要的PromQL”。今天我跟大家分享在将AIGC技术运用到可观测领域的探索。 今天分享主要包括5个部分&#xff1a;…

【Linux系统基础】(3)在Linux上部署运维监控Zabbix和Grafana

目录 运维监控Zabbix部署简介安装安装前准备 - Mysql安装Zabbix Server 和 Zabbix Agenta. 安装Zabbix yum库b. 安装Zabbix Server、前端、Agentc. 初始化Mysql数据库d. 为Zabbix Server配置数据库e. 配置Zabbix的PHP前端 配置zabbix 前端&#xff08;WEB UI&#xff09; 运维监…

学习在UE中通过Omniverse实现对USD文件的Live-Sync(实时同步编辑)

目标 前一篇 学习了Omniverse的一些基础概念。本篇在了解这些概念的基础上&#xff0c;我想体验下Omniverse的一些具体的能力&#xff0c;特别是 Live-Sync (实时同步) 相关的能力。 本篇实践了使用Omniverse的力量在UE中建立USD文件的 Live-Sync 编辑。由于相关的知识我是从…

将Go语言开发的Web程序部署到K8S

搭建K8S基础环境 如果已经有K8S环境的同学可以跳过&#xff0c;如果没有&#xff0c;推荐你看看我的《Ubuntu22加Minikue搭建K8S环境》&#xff0c;课程目录如下&#xff1a; Ubuntu22安装Vscode 下载&#xff1a;https://code.visualstudio.com/Download 安装命令&#…

Unity之DOTweenPath轨迹移动

Unity之DOTweenPath轨迹移动 一、介绍 DOTweenPath二、操作说明1、Scene View Commands2、INfo3、Tween Options4、Path Tween Options5、Path Editor Options&#xff1a;轨迹编辑参数&#xff0c;就不介绍了6、ResetPath&#xff1a;重置轨迹7、Events&#xff1a;8、WayPoin…

ioDraw AI:思维导图、流程图、序列图、类图、饼图,一应俱全

前言 在信息爆炸的时代&#xff0c;我们每天接收着大量的信息&#xff0c;如何高效地整理和呈现这些信息成为了一项重要的挑战。思维导图作为一种可视化思维工具&#xff0c;能够帮助我们快速构建和整理复杂的信息结构&#xff0c;便于我们理解和记忆。ioDraw AI绘图工具正是基…

图像ISP处理——畸变校正算法

图像畸变校正算法主要用于矫正图像中因为摄像机镜头畸变而引起的形状和尺寸变化。摄像机镜头畸变主要包括径向畸变和切向畸变。以下是一些常见的图像畸变校正算法&#xff1a; 多项式畸变校正法&#xff08;Polynomial Distortion Correction&#xff09;&#xff1a; 原理&am…

Settings中电池选项-Android13

Settings中电池选项-Android13 1、设置中界面2、电池计算2.1 充电时间计算2.1.1 BatteryUsageStats获取2.1.2 BatteryStatsImpl计算 2.2 电池剩余使用时间2.2.1 Estimate获取2.2.2 BatteryStatsImpl计算 3、电池信息来源4、命令模拟* 日志 [电池]Android 9.0 电池未充电与充电字…

C语言:字符串字面量及其保存位置

相关阅读 C语言https://blog.csdn.net/weixin_45791458/category_12423166.html?spm1001.2014.3001.5482 虽然C语言中不存在字符串类型&#xff0c;但依然可以通过数组或指针的方式保存字符串&#xff0c;但字符串字面量却没有想象的这么简单&#xff0c;本文就将对此进行讨论…

Java进阶(第六期): Arrays类(数组工具)、冒泡排序、选择排序、二分查找、【正则表达式】、Java正则爬取信息

文章目录 一、Arrays1.1代码示例&#xff1a; 二、冒泡排序2.1 代码示例 三、选择排序3.1 代码示例 四、二分查找4.1 代码示例 &#xff08;这里采用乱序数组&#xff09; 五、正则表达式5.1 正则表达式的基本使用5.2 正则表达式爬取信息练习 Java进阶&#xff08;第六期&#…

hash长度扩展攻击

作为一个信息安全的人&#xff0c;打各个学校的CTF比赛是比较重要的&#xff01; 最近一个朋友发了道题目过来&#xff0c;发现有道题目比较有意思&#xff0c;这里跟大家分享下 这串代码的大致意思是&#xff1a; 这段代码首先引入了一个名为"flag.php"的文件&am…

redis的那些事(二)——布隆过滤器

什么是布隆过滤器&#xff1f; 布隆过滤器&#xff08;Bloom Filter&#xff09;是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。 布隆过滤器实现原理 布隆过滤器是一个bit向量或者说是一个b…

Redis基础-Redis概念及常见命令

1.nosql数据库 NoSQL数据库是一种提供了非关系型数据存储的数据库系统&#xff0c;与传统的关系型数据库&#xff08;如SQL数据库&#xff09;不同。NoSQL数据库的特点是灵活性高&#xff0c;能够处理结构化、半结构化或非结构化数据。它们通常用于大数据和实时Web应用。NoSQL数…

C语言之字符串数组

目录 字符串数组 读取字符串数组中字符串 注意 字符串可以用数组来表示&#xff0c;所以字符串的集合也可以用数组的数组&#xff08;即多维数组&#xff09;来表示&#xff0c;下面我们就来学习字符串数组。 字符串数组 类型相同的数据集合适合用数组来实现&#xff0c;所…

多款双向晶闸管调光电路

双向晶闸管调光控制电路原理图 交流调压是把不变的交流电压变换成有效值可调的交流电压&#xff0c;用一只双向晶闸管代替两只反并联晶闸管&#xff0c;可使电路大大简化。被广泛应用于工业加热、灯光控制、感应电动机的调速以及电解电镀的交流侧调压等场合。 用双向晶闸管组…

工具系列:TensorFlow决策森林_(3)使用dtreeviz可视化

文章目录 介绍设置安装 TF-DF 和 dtreeviz导入库 可视化分类树加载、清洗和准备数据分割训练/测试集并训练模型训练一个随机森林分类器显示决策树检查叶节点统计信息决策树如何对实例进行分类特征空间划分 可视化回归树加载、清洗和准备数据分割训练/测试集并训练模型训练一个随…