小研究 - 基于解析树的 Java Web 灰盒模糊测试(二)

news2025/1/21 0:47:52

由于 Java Web 应用业务场景复杂, 且对输入数据的结构有效性要求较高, 现有的测试方法和工具在测试Java Web 时存在测试用例的有效率较低的问题. 为了解决上述问题, 本文提出了基于解析树的 Java Web 应用灰盒模糊测试方法. 首先为 Java Web 应用程序的输入数据包进行语法建模创建解析树, 区分分隔符和数据块, 并为解析树中每一个叶子结点挂接一个种子池, 隔离测试用例的单个数据块, 通过数据包拼接生成符合 Java Web 应用业务格式的输入, 从而提高测试用例的有效率; 为了保留高质量的数据块, 在测试期间根据测试程序的执行反馈信息, 为每个数据块种子单独赋予权值; 为了突破深度路径, 会在相应种子池中基于条件概率学习提取数据块种子特征. 本文实现了基于解析树的 Java Web 应用灰盒模糊测试系统 PTreeFuzz, 测试结果表明, 该系统相较于现有工具取得了更好的测试准确率.

目录

2 系统设计

2.1 基于语法解析树的 Java Web 测试方法

2.2 面向数据包拼接的种子调度权值分配算法


2 系统设计

2.1 基于语法解析树的 Java Web 测试方法

Java Web 现有的传输数据格式主要是两种: XML与 JSON, 以 JSON 格式为例, 进行具体的介绍: JSON数据的书写格式是键/值对; JSON 值可以是: 字符串、数字 (整数或浮点数)、逻辑值等; 它有两种结构, 对象和数组; 通过这两种结构可以表示各种复杂的数据. 从数据包中字段的角度来看, 包含了多个键值对, 其对应的数据类型也不尽相同, 在目标 Java Web 程序里面对这些不同的数据块大部分采用不同的处理方式, 触发不同的执行路径.

如图 2 中给出了一个程序对数据包处理的控制流图的例子. 不同类型, 不同内容的数据部分 (在图 2 中用 α, β, γ, δ 等表示) 会产生不同的执行路径 (用不同的英文字母以及不同的颜色表示), 这些执行路径也可能包含具有公共功能的共享代码块如 d、e. Java Web 程序在对报文进行处理的时候, 针对不同的数据部分给出不同的处理方式和代码逻辑, 如用户名查询、数据切片等操作. 虽然数据包的处理相互独立, 但数据块之间会相互影响, 如 d 代码块会同时处理 a 与 β, 因此即使 a 数据块具有很高的可用性和利用价值, 受 β 数据块影响可能会在后续的测试中受阻, 因此如果模糊测试器将输入报文数据部分视为一个整体, 将会影响变异数据的有效性.

根据上述分析可知, Java Web 应用程对于报文的不同数据部分, 采用的处理方式和执行路径并不相同, 通过解析树对不同类型, 不同功能的数据块设置对应的种子池, 并且通过变异组合成输入数据包, 可以更加有效地提升测试用例的整体质量, 测试到深层次的代码区域.

解析树与数据包拼接, 每一个 leaf 叶子节点为一个单独的结构体, 它挂载对应的种子池, 而种子池中存放的是该数据部分所对应的一些种子, 每一个种子都有一个记录自己相关信息的结构体, 以便后续进行种子权值计算. 其相关信息包括: 该种子的权值, 种子可以覆盖的代码块, 执行路径等. leaf 叶子节点中的节点数据块以及结构体信息通过数据包拼接算法产生测试用例, 设计的数据包拼接算法如算法 1:

生成数据包的过程中, 需要进行种子的变异. 本文针对不同数据类型的数据有不同的变异方式, 使得种子变异会更具针对性. 当有新路径产生的时候, 需要将数据块添加到对应的种子池中. 此时需要先创建一个该种子对应的结构体, 并修正其可以覆盖的代码块, 然后将它加入种子池中. 此处的种子记录下自己可以覆盖到的代码块便于后续的权值计算, 其主要的思想在于将各个数据块与程序中的代码块进行绑定, 理清数据部分与代码块之间的关系. 因此设计了种子添加算法, 如算法 2 所示:

2.2 面向数据包拼接的种子调度权值分配算法

模糊测试的种子调度权值分配是影响测试效果的关键, 代码覆盖率信息是一种被广泛应用于传统软件模糊测试的反馈信息, 并已被证实是有效的. 因此, 本文使用反馈循环来优化基于模糊测试, 并使用代码覆盖率以及执行路径作为反馈评估种子是否有价值, 通过在目标测试程序的分支点插桩来获取这一信息.

但仅考虑到代码的边缘覆盖不能满足解析树拼接实际情况. 图 4 代表了某个程序代码处理 JSON 格式数据流程, JSON_A 和 JSON_B 数据经过 FunC, 在FunD 中存在一个可能的漏洞点 leak, 且已存在执行路径: JSON_A→FunC→FunE, JSON_B→FunC→FunE,JSON_B→FunC→FunD:

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

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

相关文章

前端技术周刊 2023-07-30:Promise.withResolvers 进入 Stage3

项目地址:olivewind/weekly[1] 微信公众号:依赖注入 发布时间:2023.07.30 本周内容:资讯x2、开源x8、文章x4 动态 Promise.withResolvers 进入 Stage3 某些情况下需要在 Promise 外部获取 resolve 和 reject 句柄,我们…

【云原生】一文学会Docker存储所有特性

目录 1.Volumes 1.Volumes使用场景 2.持久将资源存放 3. 只读挂载 2.Bind mount Bind mounts使用场景 3.tmpfs mounts使用场景 4.Bind mounts和Volumes行为上的差异 5.docker file将存储内置到镜像中 6.volumes管理 1.查看存储卷 2.删除存储卷 3.查看存储卷的详细信息…

RWEQ模型参量提取

土壤风蚀是一个全球性的环境问题。中国是世界上受土壤风蚀危害最严重的国家之一,土壤风蚀是中国干旱、半干旱及部分湿润地区土地荒漠化的首要过程。中国风蚀荒漠化面积达160.74104km2,占国土总面积的16.7%,严重影响这些地区的资源开发和社会经…

机器学习深度学习——Dropout

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——权重衰减 📚订阅专栏:机器学习&&深度学习 希望文章对你们有所帮助 Drop…

【MTI 6.S081 Lab】traps

【MTI 6.S081 Lab】traps RISC-V assembly (easy)Backtrace (moderate)实验任务Hints解决方案backtracesys_sleep Alarm (hard)实验任务test0: invoke handlerHint test1()/test2()/test3(): resume interrupted codeHints 解决方案trap.c中的时钟中断处理程序sys_sigalarmsys_…

大促之前全链路压测监控

1. skywalking服务监控 1.1 skywalking简介 Skywalking 是一个APM系统,即应用性能监控系统,为微服务架构和云原生架构系统设计 它通过探针自动收集所需的指标,并进行分布式追踪,通过这些调用链路以及指标,Skywalking …

使用Postman如何在接口测试前将请求的参数进行自定义处理

1、前言 当我们使用 Postman 进行接口测试时,对于简单的不需要处理的接口,直接请求即可,但是对于需要处理的接口,如需要转码、替换值等,则就麻烦一些,一般我们都是先手动把修改好的值拷贝到请求里再进行请…

计算机的大小端模式

计算机的大小端模式 大端/小端字节序字节序转换函数判断Linux字节序的方法string有字节序的说法吗64位系统和32位系统的区别 大端/小端字节序 计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian…

MySQL数据库——DQL操作——基本查询

文章目录 前言事前准备——测试数据整表查询指定列查找别名查询MySQL运算符条件查询模糊查询排序查询聚合查询分组查询分组之后的条件筛选 分页查询将整张表的数据插入到另一张表中 前言 MySQL数据库常见的操作是增删查改,而其中数据的查询是使用最多,也…

玩转LaTeX(三)【数学公式(基础)、​矩阵、多行公式】

数学公式基础 导言区(引包) \usepackage{amsmath} %带星号的eqution 正文区 \begin{document}%数学公式初步 \section{简介} \LaTeX{}将排版内容分为文本模式和数学模式。文本模式用于普通文本排版,数学模式用于数学公式排版。 …

小白带你学习linux的mysql服务(主从mysql服务和读写分离三十一)

目录 二、MySQL Replication优点: 三、MySQL复制类型 1、异步复制(Asynchronous repication) 2、全同步复制(Fully synchronous replication) 3、半同步复制(Semisynchronous replication)…

用pip给python安装第三方包

2023年7月30日,周日晚上 目录 搜索包安装包升级包卸载包查看安装了哪些包查看指定的包的详细信息查看pip把某个包安装到了哪里 搜索包 现在只能去专门的网站搜索python的第三方包了 Search results PyPI 安装包 通过下面这条指令就可以安装包 pip install pac…

【数据分享】1999—2021年地级市工业企业资产情况和主要财务指标(Excel/Shp格式)

在之前的文章中,我们分享过基于2000-2022年《中国城市统计年鉴》整理的1999-2021年地级市的人口相关数据、各类用地面积数据、污染物排放和环境治理相关数据、房地产投资情况和商品房销售面积、社会消费品零售总额和年末金融机构存贷款余额、地方一般公共预算收支状…

Prometheus中的关键设计

1、标准先行,注重生态 Prometheus 最重要的规范就是指标命名方式,数据格式简单易读。比如,对于应用层面的监控,可以要求必须具备这几个信息。 指标名称 metric Prometheus 内置建立的规范就是叫 metric(即 __name__…

RedLock + Redisson

目录 2.9 RedLock2.9.1 上述实现的分布式锁在集群状态下失效的原因2.9.2 解决方式-RedLock 2.10 redisson中的分布式锁简单使用redisson中的锁Redisson常用配置2.10.1 Redisson可重入锁实现原理2.10.2 公平锁(Fair Lock) 2.9 RedLock 2.9.1 上述实现的分…

FLinkCDC读取MySQl时间戳时区相关问题解决汇总

FlinkCDC时间问题timestamp等https://blog.csdn.net/qq_30529079/article/details/127809317 FLinkCDC读取MySQl中的日期问题https://blog.csdn.net/YPeiQi/article/details/130265653 关于flink1.11 flink sql使用cdc时区差8小时问题https://blog.csdn.net/weixin_44762298/…

Redis以及Java使用Redis

一、Redis的安装 Redis是一个基于内存的 key-value 结构数据库。 基于内存存储,读写性能高 适合存储热点数据(热点商品、资讯、新闻) 企业应用广泛 官网:https://redis.io 中文网:https://www.redis.net.cn/ Redis…

vuejs源码阅读之代码生成器

代码生成器是模版编译的最后以后,它的作用是将AST转换成渲染函数中的内容,这个内容可以称为代码字符串。 代码字符串可以被包装在函数中执行,这个函数就是我们通常说的渲染函数。 渲染函数被执行之后,可以生成一份VNode&#xf…

kettle 学习笔记

kettle 学习笔记 个人理解下载 / 安装kettle及测试环境准备kattle下载安装JDK安装配置MySQL安装配置 使用练习创建数据库连接转换练习 个人理解 ETL工具的一种,作用是将数据进行抽取,转换,应该是数据中心类型的项目用的比较多,将…

在Word中快速输入方框对号

在Word中输入方框对号播报文章 先输入“2611”,然后同时按ALTX, 插入 符号 其他符号