jsmug:一个针对JSON Smuggling技术的测试PoC环境

2024-05-31 12:52

本文主要是介绍jsmug:一个针对JSON Smuggling技术的测试PoC环境,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

关于jsmug

jsmug是一个代码简单但功能强大的JSON Smuggling技术环境PoC,该工具可以帮助广大研究人员深入学习和理解JSON Smuggling技术,并辅助提升Web应用程序的安全性。

背景内容

JSON Smuggling技术可以利用目标JSON文档中一些“不重要”的字节数据实现任意文件传输。根据JSON文档的官方定义,JSON文件中的某些位置允许使用被称为不重要字节的字节数据来传输内容。这些所谓不重要的字节在JSON文档中没有任何的意义,因此会被jq之类的JSON解析工具直接忽略。这种“不重要”的字节包括:

0x09(水平制表符)

0x0a(新行)

0x0d(回车)

0x20(空格)

这些字节本身就不起眼,甚至根本就不是肉眼可见的,而且JSON解析器也会直接忽略这些字节,因此这4个字节可以用来编码任意数据或文件。与我们使用Base2系统以二进制格式表示数据相同,我们可以使用Base4系统使用这4个字节来表示数据:

上图中的数据显示了原始字节是如何以Base4表示的,接下来这些Base4字节被映射到它们各自的“不重要字节”的部分。根据指定的bytes_per_pair,Base4符号字节会被成对划分,并存放到JSON文档中的指定位置。通过指定应该存放在一起的字节数据的数量,我们还可以用其来测试网络安全检测规则的有效性。

工具下载&编译

由于该工具基于纯C语言开发,因此我们首先需要在本地设备上暗安装并配置好C语言环境,或直接安装gcc编译器。

接下来,广大研究人员可以直接使用下列命令将该项目源码克隆至本地:

git clone https://github.com/xscorp/jsmug.git

然后切换到项目目录中,使用gcc编译器完成代码编译:

$ cd jsmug$ gcc jsmug.c -o ./jsmug

工具使用

编码文件

我们可以使用下列密令对一个输入文件进行编码,并将编码后的结果输出保存到另一个文件中:

$ ./jsmug encode <input_file_name> <output_file_name> <bytes_per_pair>

在下面的代码示例中,我们将naabu代码编码进了一个JSON文件中,输出文件名称为“sweet-document.json”:

解码文件

我们可以使用下列命令对一个已编码的文件进行解码,并将输出的结果保存到另一个文件中:

$ ./jsmug decode <encoded_file_name> <output_file_name>

使用演示:

$ ./jsmug decode ./encoded-binary.json decoded-binary

在下面的代码示例中,我们对之前生成的“sweet-document.json”JSON文件进行解码,并获取原始的naabu代码,然后将其标识为“decoded-binary”:

项目地址

jsmug:【GitHub传送门】

参考资料

RFC 8259 - The JavaScript Object Notation (JSON) Data Interchange Format

https://grimminck.medium.com/

https://grimminck.medium.com/json-smuggling-a-far-fetched-intrusion-detection-evasion-technique-51ed8f5ee05f

这篇关于jsmug:一个针对JSON Smuggling技术的测试PoC环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1017985

相关文章

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

java中判断json key是否存在的几种方法

《java中判断jsonkey是否存在的几种方法》在使用Java处理JSON数据时,如何判断某一个key是否存在?本文就来介绍三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目http://www.chinasem.cn录第一种方法是使用 jsONObject 的 has 方法

Go语言中json操作的实现

《Go语言中json操作的实现》本文主要介绍了Go语言中的json操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 一、jsOChina编程N 与 Go 类型对应关系️ 二、基本操作:编码与解码 三、结构体标签(Struc

Java中的Schema校验技术与实践示例详解

《Java中的Schema校验技术与实践示例详解》本主题详细介绍了在Java环境下进行XMLSchema和JSONSchema校验的方法,包括使用JAXP、JAXB以及专门的JSON校验库等技术,本文... 目录1. XML和jsON的Schema校验概念1.1 XML和JSON校验的必要性1.2 Sche

Vue3 如何通过json配置生成查询表单

《Vue3如何通过json配置生成查询表单》本文给大家介绍Vue3如何通过json配置生成查询表单,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录功能实现背景项目代码案例功能实现背景通过vue3实现后台管理项目一定含有表格功能,通常离不开表单

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本