【32】WEB安全学习----Json注入

一、Json简介

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

json语法

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 大括号保存对象
  • 中括号保存数组

JSON 值

JSON 值可以是:

  • 数字(整数或浮点数)  {"age":30 }
  • 字符串(在双引号中)  {"uname":"yang"}
  • 逻辑值(true 或 false) {"flag":true }
  • 数组(在中括号中){"sites":[{"name":"yang"},{"name":"ming"}]}
  • 对象(在大括号中)JSON 对象在大括号({})中书写:
  • null    { "runoob":null }

Json-demo:

{
  "users": {
    "user": [
      {
        "id": "1",
        "username": "admin",
        "passwd": "admin888"
      },
      {
        "id": "2",
        "username": "root",
        "passwd": "root123"
      },
      {
        "id": "3",
        "username": "system",
        "passwd": "system456"
      }
    ]
  }
}

二、JSON注入

和xml注入一样,只是数据表现形式不同而已。

<?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;
    //$passwd=$json->passwd;
 
    $mysqli=new mysqli();
    $mysqli->connect('localhost','root','root');
    if($mysqli->connect_errno){
      die('数据库连接失败:'.$mysqli->connect_error);
    }
    $mysqli->select_db('user');
    if($mysqli->errno){
      dir('打开数据库失败:'.$mysqli->error);
    }
    $mysqli->set_charset('utf-8');
    $sql="SELECT username,paawd FROM users WHERE username='{$username}'";
    $result=$mysqli->query($sql);
    if(!$result){
      die('执行SQL语句失败:'.$mysqli->error);
    }else if($result->num_rows==0){
      die('查询结果为空');
    }else {
      $array1=$result->fetch_all(MYSQLI_ASSOC);
      echo "用户名:{$array1[0]['username']},密码:{$array1[0]['paawd']}";
    }
    $result->free();
    $mysqli->close();
  }
?>

和SQL注入一样,插入注入语句。但要注意一点是对影响json语句的要进行转义,如双引号、花括号等。

猜你喜欢

转载自blog.csdn.net/a15803617402/article/details/82939202