JSON注入

JSON注入原理:

JSON注入是指应用程序所解析的JSON数据来源于不可信赖的数据源,程序没有对这些不可信赖的数据进行验证、过滤,如果应用程序使用未经验证的输入构造 JSON,则可以更改 JSON 数据的语义。在相对理想的情况下,攻击者可能会插入无关的元素,导致应用程序在解析 JSON数据时抛出异常。

JSON是根据引号(")、冒号(😃、逗号(,)和花括号({})区分各字符的意义的。如果有恶意用户向JSON中注入恶意字符,那么JSON将解析失败。

Json注入危害:

攻击者可以利用JSON注入漏洞在JSON数据中插入元素,从而允许JSON数据对业务非常关键的值执行恶意操作,严重的可能导致XSS和动态解析代码。

例如,输入的PassWord值为:admin"888
那么组装成的JSON数据位如下:
"PassWord":" admin"888"

在PassWord中的引号将会破坏整个JSON的结构,导致JSON解析失败。JSON注入没有其他几种注入的危害性大,但依然不可小视。

@json也是传输数据的一种格式,增加一个用户的json结构如下:

{"adduser":[{"username":"admin1","password":"123456"}]},可以注入多增加一个 password=>123456"},{"username":"admin2","password":"123456
有的时候,可能是为了方便,有人会手动拼接下JSON,但是这种随手代码,却可能带来意想不到的安全隐患。

第一种方式,利用字符串拼接:

String user = "test01"; 
String password = "12345', admin:'true"; 
String json = "{user:'%s', password:'%s'}"; 
System.out.println(String.format(json, user, password)); 
//{user:'test01', password:'12345', admin:'true'},用户增加了管理员权限。

第二种,利用Parameter pollution, 类似http parameter pollution

String string = "{user:'test01',password:'hello', password:'world'}"; 
JSONObject parse = JSON.parseObject(string); 
String password = parse.getString("password"); 
posted @ 2023-02-26 22:34  cowpokee  阅读(236)  评论(0编辑  收藏  举报