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

工具学习_模糊测试

定义:模糊测试(fuzz testing, fuzzing)是一种软件测试技术。其核心思想是将自动或半自动生成的随机数据输入到一个程序中,并监视程序异常,如崩溃、断言失败,以发现可能的程序错误,比如内存泄漏。模糊测试常常用于检测软件或计算机系统的安全漏洞。

历史:1988年,威斯康星大学的Barton Miller教授率先在他的课程实验中提出了模拟测试。实验内容是开发一个基本的命令行模拟器来测试Unix程序。这个模拟器可以用随机数据来“毁坏”这些测试程序直到其崩溃。该类实验于1995年被重新复兴,并且包括了图形界面程序(例如X Window System)、网络协议和系统API库。一些后续工作可以测试Mac和Windows系统上的命令行程序与图形界面程序。关于模拟测试更早的想法可以追溯到1983年。Steve Capps当时开发了一个叫做The Monkey的Macintosh程序以测试Mac程序,并曾被用于发现MacPaint的程序错误。另一个早期的模拟测试工具是crashme,于1991年发布。其主要功能是让Unix以及Unix系统去执行随机关联指令以测试这些系统的健壮性。

测试流程:模糊测试通过向系统输入随机或异常数据来发现潜在问题。流程包括:在测试前搭建测试环境并配置测试工具;在测试中生成并执行模糊测试用例,监控系统状态,检查崩溃或异常;在测试后生成报告,列出发现的问题并提供修复建议。


案例分析:当数据长度超过100时,目标程序会发生缓冲区溢出,可能导致程序崩溃或其他未预期的行为。

#include <stdio.h>
#include <string.h>void vulnerable_function(char *input) {char buffer[100];strcpy(buffer, input);printf("Received: %s\n", buffer);
}int main() {char input[200];printf("Enter data: ");gets(input);vulnerable_function(input);return 0;
}

测试脚本:该脚本的目的是通过随机生成不同长度的字符串并不断发送到易受攻击的目标程序,测试程序如何响应这些异常数据。这种方法可以帮助发现潜在的内存溢出、缓冲区溢出等漏洞,或者其他没有预期的行为。

import subprocess
import random
import stringdef random_string(length):return "".join(random.choice(string.ascii_letters) for i in range(length))# Fuzzing loop
for _ in range(1000):data = random_string(random.randint(1, 200))process = subprocess.Popen(['./vulnerable_program'], stdin=subprocess.PIPE)process.communicate(data.encode())

定向模糊测试(Directed Fuzz Testing):是一种更加精确的模糊测试方法,它通过特定的输入策略和目标导向来提高测试效率,旨在发现特定类型的漏洞,如缓冲区溢出、内存泄漏等。

与传统的模糊测试相比,定向模糊测试并不完全依赖于随机生成数据,而是基于某些程序特性或漏洞模式的知识来生成更具针对性的输入数据。这种方法通过向程序输入特定类型的数据(例如,有意造成溢出的数据),来测试程序在特定情况下的行为。

相关文章:

  • Python+大模型 day01
  • Maven 下载安装与配置教程
  • 为什么go语言中返回的指针类型,不需要用*取值(解引用),就可以直接赋值呢?
  • Python调用SQLite及pandas相关API详解
  • Profibus DP主站转Modbus RTU/TCP网关接艾默生流量计与上位机通讯
  • ajax提交form表单数据举例
  • Ubuntu24.04编译ORB_SLAM的一系列报错解决
  • LeetCode 热题 100 105. 从前序与中序遍历序列构造二叉树
  • 季报中的FPGA行业:U型反转,春江水暖
  • Cursor 0.5版本发布,新功能介绍
  • SQL看最多的数据,但想从小到大排列看趋势
  • 家庭宽带的内网穿透实践
  • PyQt5完整指南:从入门到实践
  • 三维CAD皇冠CAD(CrownCAD)建模教程:工程图模块二
  • QT+opencv实现卡尺工具找圆、拟合圆
  • 虚幻引擎5-Unreal Engine笔记之Qt与UE中的Meta和Property
  • uniapp -- 验证码倒计时按钮组件
  • 【starrocks】StarRocks 常见 HTTP 操作与导入错误排查指南
  • 使用Qt操作SQLite数据库
  • 《Effective Python》第2章 字符串和切片操作——Python 字符串格式化的现代选择f-strings
  • 秘鲁总理辞职
  • 秦洪看盘|交易新逻辑,银行股成A股稳定器
  • 西北大学副校长范代娣成陕西首富?系家庭财富,本人已从上市公司退出
  • 复旦大学与上海杨浦共建市东医院
  • 第12届警博会在即:一批便民利企装备亮相,规模创历史新高
  • 俄总统新闻秘书:普京提议谈判表明俄寻求和平解决方案意愿