持续更新 | 模糊测试工具合集,附贴心教程(三)
qiyuwang 2024-10-25 16:41 16 浏览 0 评论
模糊测试
模糊测试是一个很重要的流程,有助于发现影响当今复杂应用程序的未知关键错误,有时候甚至能暴露出一些让人“脑洞大开”或者“七窍生烟”的奇葩问题。
文件Fuzzers
模糊测试应当用于测试每个需要接受某种形式输入的接口,起码要测试每个从潜在恶意来源获取输入的接口。除了前面提到的通信协议,文件也同样可能存在安全风险,尤其是我们熟知的二进制文件。
对于程序来说,少数字节错位都有可能使得整个应用程序毁于一旦。这些使程序崩溃的畸形文件通过损坏程序的字节,而使其破坏自己的栈、堆。在旧式、无内存的操作系统中,畸形文件通常能将整个计算机宕掉。此外,还有JS文件和HTML等Web相关的文件,这些文件都有可能引发安全问题。
文件类型模糊测试的通常做法是:先准备一份插入程序中的正确的文件,然后用随机数据替换该文件的某些部分,最后用程序打开经模糊后的文件,观察程序是否出现异常或出现了什么异常。
下面将介绍一款工具:Domato。
针对文件的开源的Fuzz工具——Domato
1、什么是Domato
Domato是由Ivan Fratric编写的DOM fuzzer,主要用来测试浏览器DOM引擎。从技术上讲,Domato并不是一个真正的fuzzer,而是一个测试用例生成器,它的基本思路和正常的fuzzer类似,也是根据给定的语法结构和属性来生成样本,这些语法可能来自是从各个地方抓取的HTML/JS/PHP/CSS等样本中所包含的,也可以是自定义的。
2、Domato的安装
在虚拟机上下载安装Domato非常简单,你只需要从Github上将源码下载下来即可。注意,Domato的主文件是用python写的,请确保在Python环境下运行。Domato源码链接:https://github.com/googleprojectzero/domato
在终端执行以下命令即可将Domato的源码克隆下来:
git clone git://github.com/googleprojectzero/domato.git
Domato的代码主要功能是根据语法生成测试样本,其主要代码文件是generator.py和grammar.py,其他的*.txt文件是语法文件。
generator.py是主文件,它将grammar.py作为库,包含了一些用于辅助生成样本的函数,是根据输入的语法来生成样本的引擎。
grammar.py实现了一个通用的语法库,用于解析参数,然后调用引擎来生成样本。
*.txt文件是语法文件,它包含了语法定义,在Domato中有三个主要的语法文件,分别是html.txt、css.txt和js.txt,它们分别包含了HTML,CSS和JavaScript的语法。这些语法文件可能包括来自其他文件的内容。此外,在php文件夹里也给出了PHP的语法文件(php.txt)。
除了以上几个文件外,还有一个被命名为template的文件,这是示例样本,Domato生成的测试样本就是基于这个文件进行变异的。
3、Domato的使用
3.1使用办法
Domato的使用方法非常简单,因为其本身给出了一些示例文件,你可以直接利用这些示例文件来生成样本。比如:
(1)当你想生成单个测试样本时,运行:pythongenerator.py <output file>
例如:生成单个.php样本,进入到php文件夹下,运行以下命令(事先创建一个output文件夹来存放生成的样本):python generator.pyoutput/test1.php
这样,我们就成功生成了一个命名为test1.php的样本,并保存到了刚刚创建的output文件夹下。对比基础样本文件template.php,我们发现Domato在该文件基础上进行了模糊处理。
(2)当你想通过单次调用生成多个测试样本时,运行:
python generator.py--output_dir <output directory> --no_of_files <number of outputfiles>
生成的样本将被放在指定的目录(<output directory>)下,并自动命名为fuzz-<number>.html,如fuzz-00001.html、fuzz-00002.html等。<number of outputfiles>指定你要生成的样本数。因为输入语法文件只需要加载和解析一次,所以你可以快速地生成多个样本。
例:生成10个.php样本。执行:python generator.py --output_dir output --no_of_files 10
可以看到,我们成功在output目录下生成了10个php测试样本,且按0到9编号。抽取两个样本进行比较,发现其从第171行开始模糊(变异)。
那么问题来了,我们生成的测试样本有什么用呢?前面说过,模糊测试是一个需要大量测试数据来进行测试的技术手段,如果使用人工构造,将耗费大量的人力物力。Domato在这里就充当了一个模糊测试样本生成器,它将与其他测试工具一起完成模糊测试。也就是说Domato负责生成测试样本,然后由其他测试工具来使用这些样本进行后续的测试工作。
3.2文件简析
前面我们讲到Domato本身包含了许多示例文件,我们可以直接使用这些文件来生成测试样本。但是当这些示例文件无法满足我的测试需求时,我能不能自己编写脚本文件呢?答案是可以的。
要编写合适的示例文件,你首先要清楚文件的关键代码和语法结构。
前面也说过Domato中比较重要的文件有generator.py、grammar.py和.txt文件。其中grammar.py文件是通用的语法库,里面包含了不同类型的语法,我们可以直接引用它,所以在此不关注它的代码。
(1)generator.py
以Domato的php示例文件为例,你可以使用文本查看/php/generator.py文件。
首先要使用具有自定义语法的生成引擎,你可以使用以下python代码:
from grammar import Grammar#导入语法库
该文件主要包含以下函数:main()主函数、get_option函数、generate_samples函数和generate_new_sample函数。它的工作流程大致是这样的:
在主函数中,先读取用户输入的命令,调用get_option函数来根据标志--output_dir和--no_of_files来识别、提取样本输出路径和生成样本数,为后续输出样本做准备。
接着调用generate_samples函数来生成一组示例并将其写入输出文件。在这部分,它先打开并读取示例样本(即template文件,也可以改成自己的);然后调用Grammar语法库中定义的parse_from_file函数来打开语法文件(即.txt文件),对其进行解析并加载其中的语法规则;最后调用generate_new_sample函数来解析语法规则,并将其返回的包含样本数据的字符串写入生成的测试样本文件中。在该函数中,主要关注以下两句代码:
my_grammar = Grammar()
my_grammar.parse_from_file('input_file.txt')
generate_new_sample函数遍历template文件,找到文件中需要进行模糊的部分(如<phpfuzzer>),然后将其替换为根据语法文件进行变异后的内容。该函数主要代码如下:
result_string = my_grammar.generate_code('symbol_name')
(2).txt文件
这是语法文件,这是Domato十分重要的部分。该工具的开发者自定义了一种语法格式,其基本的语法如下:
<symbol> = a mix of constants and<other_symbol>s
每个语法规则都包含一个左侧和右侧由相等字符分开。左侧包含符号,而右侧是符号/常量及其组合(包含如何扩展该符号的详细信息)。在扩展符号时,右侧的所有符号都会递归扩展,而所有不是符号的符号都只是复制到输出中。请注意,单个规则不能跨越输入文件的多个行。
Domato的说明文件中给出了这样的例子:
这里可能生成的样本内容就是:a { width:100% }或b{ width:100% }。注意,这里的<selector>可以定义一些附加属性,如使用“p”属性指定规则的概率:
这里表示字符a出现的概率是0.9,字符b出现的概率是0.1,也就是说字符a的输出概率会高于字符b。如果不特别声明,则概率是差不多的。
用于生成代码的语法和普通的语法是差不多的,但是这里引入了一些规则。以便灵活地生成样本。开发者举了这样一个例子:
其中,!varformat语句用来定义使用的变量的格式,!lineguard语句用于定义每个行周围插入的其他代码,以便捕捉异常或执行其他任务,这两个语句都是可选的。!begin lines和!end lines用于定义只有在生成其他行时才会使用的代码行,这里使用了<new element>,表示生成了一个变量,一般将fuzz部分置于这两行之间。
调用上述脚本将生成一个5行的样本,可能得到类似下面的结果:
下面我们尝试编写一个简单的语法文件。
首先要明确我们想输出的样本语言是什么形式的。比如我们希望输出的样本中的内容是由以下形式的句子组成的:
然后我们给这些变量赋值,如:
这样我们就可以将其按Domato指定的语法格式编写出来,如下:
Domato将根据此语法文件生成符合语言规则的随机组合,例如:
相关推荐
- 微软宣布将于10月份关闭OneDrive组功能
-
【巴士数码】微软已经宣布将在今年10月关闭OneDrive的组功能。一年多之前,微软已经关闭了用户在OneDrive当中创建组的功能。大大多数用户会发现共享文件夹是一种合适的替代品,而且由于这一点,O...
- 玩转Win10任务栏:从基础设置到效率神器的全攻略
-
一、基础操作:解锁任务栏的「隐藏布局」...
- 文档以只读模式打开的原因及解决方法
-
当文档以只读模式打开时,可能由多种原因导致。以下是详细的原因分析与对应解决方法,您可根据实际情况灵活选择操作。一、文件属性设置问题(一)Windows系统在Windows系统中,若文件属性被标记...
- Windows系统的优化(windows优化设置)
-
今天给大家讲一讲系统的图标和一些基本的优化。安装了原版系统之后有很多地方需要优化比如桌面图标小箭头,盾牌,休眠占用内存,关闭通知栏。首先我们打开软件这款软件以前就讲到过就是dism++软件,他可以清理...
- Win 10偷偷传送用户隐私至微软(win10设备隐私)
-
自推出以来Win10不断被揭发盗取用户带宽、泄漏WiFi密码等各式各样的私隐问题,令不少网络专家开始留意Win10还隐藏了多少类似的私隐漏洞。最近再有人发现Win10部分功能静静...
- OneDrive逆势下调存储空间,不限量存储被取消
-
日前,微软在周一晚发布的博客文章中表示,由于部分用户存滥用储存功能,所以该公司将取消不限量OneDrive存储服务。不限量用户的最大存储空间将被下调至1TB,定价为6.99美元,对于已存储较多文件和内...
- Win10中那些被微软取消的功能(微软公司从9日起停止对windows8的主流服务支持)
-
很多用户在使用Win10的时候,都会发现一些在Win7系统中的功能被取消了,有的时候想找也找不到。那么到底是那些过去的功能在Win10中被取消了呢?下面我们就简单梳理一下,并且告诉大家解决的办法。Wi...
- 微软推Win11 Dev 26200.5570预览版:语音打字上线脏话过滤选项
-
IT之家4月26日消息,微软公司昨日(4月25日)发布博文,邀请Dev频道的WindowsInsider项目成员,测试适用于Windows1124H2的KB50556...
- 微软VSCode商店发现9款挖矿恶意插件,已安装超30万次
-
IT之家4月8日消息,科技媒体bleepingcomputer昨日(4月7日)发布博文,报道称安全专家在微软VSCode扩展商店中,发现了9款伪装成开发工具的恶意插件。这些插...
- 微软Windows 11开始菜单大改版!(windows 11 开始菜单)
-
根据最新消息,微软正在对Windows11的开始菜单进行重大改版,这一更新将彻底改变其布局和功能。Windows11的开始菜单将从现有的多栏布局改为单栏可滚动视图,所有固定图标和已安装应用都将集中...
- OneDrive无限存储空间取消 免费降至5GB
-
2015-11-0313:35:06作者:徐鹏北京时间11月3日消息,微软在一篇博客文章中称,将取消OneDrive存储服务的不限量空间,原因是部分用户有滥用问题。OneDrive无限存储空间取消...
- 省出电脑C盘空间!微软悄悄更新:OneDrive终于能卸载了
-
快科技3月12日消息,近日,微软悄悄地在官方更新了关闭、禁用、卸载Windows自带软件OneDrive的方法。微软Windows系统自带了很多软件和功能,其中有很多我们可能永远都用不上。但这些软件还...
- 微软关闭OneDrive新建组群功能(windows关闭onedrive)
-
微软的OneDrive云端储存服务能够让你创建组群(Group),这样当你和团队成员共同从事一个项目的时候能够通过云端协作提升效率,并且组群的文档储存空间还将同你标准的OneDrive分割独立开来。不...
- 微软为何取消OneDrive无限制容量存储?被75TB占用吓坏
-
那么为什么微软会取消Office365的无限OneDrive存储呢?“自推出Office365订阅无限制存储服务以来,一小部分用户开始备份多台PC设备,存储众多电影收藏合集和DVR录像。在某些情况下...
- Win11必关的5个设置!关闭后电脑流畅到起飞,操作简单不藏私!
-
Windows11虽然界面炫酷,但默认设置中隐藏了不少“拖慢电脑”的坑!尤其是老电脑用户,用久了卡顿、开机慢、反应迟钝……其实只需关闭几个鸡肋功能,就能让电脑提速50%以上!...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 微软宣布将于10月份关闭OneDrive组功能
- 玩转Win10任务栏:从基础设置到效率神器的全攻略
- 文档以只读模式打开的原因及解决方法
- Windows系统的优化(windows优化设置)
- Win 10偷偷传送用户隐私至微软(win10设备隐私)
- OneDrive逆势下调存储空间,不限量存储被取消
- Win10中那些被微软取消的功能(微软公司从9日起停止对windows8的主流服务支持)
- 微软推Win11 Dev 26200.5570预览版:语音打字上线脏话过滤选项
- 微软VSCode商店发现9款挖矿恶意插件,已安装超30万次
- 微软Windows 11开始菜单大改版!(windows 11 开始菜单)
- 标签列表
-
- navicat无法连接mysql服务器 (65)
- 下横线怎么打 (71)
- flash插件怎么安装 (60)
- lol体验服怎么进 (66)
- ae插件怎么安装 (62)
- yum卸载 (75)
- .key文件 (63)
- cad一打开就致命错误是怎么回事 (61)
- rpm文件怎么安装 (66)
- linux取消挂载 (81)
- ie代理配置错误 (61)
- ajax error (67)
- centos7 重启网络 (67)
- centos6下载 (58)
- mysql 外网访问权限 (69)
- centos查看内核版本 (61)
- ps错误16 (66)
- nodejs读取json文件 (64)
- centos7 1810 (59)
- 加载com加载项时运行错误 (67)
- php打乱数组顺序 (68)
- cad安装失败怎么解决 (58)
- 因文件头错误而不能打开怎么解决 (68)
- js判断字符串为空 (62)
- centos查看端口 (64)