1. 程式人生 > >【32】WEB安全學習----Json注入

【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語句的要進行轉義,如雙引號、花括號等。