SQL注入 寬位元組注入

2022-06-18 22:45:13 字數 1342 閱讀 4758

php測試**:

<?php 

// 物件導向寫法

$id=addslashes($_get[『id』]); //獲取id並轉義預定義字元

// /$id=$_get[『id』];

$mysqli=new mysqli(『localhost』,』root』,』root』,』test』); //連線資料庫 指定資料庫

if ($mysqli->connect_errno) else else

}?>

<?php 

// 面向過程寫法

// $con=mysql_connect(『localhost』,』root』,』root』) or die(『connect error:』.mysql_error()); //連線資料庫

// mysql_select_db(『test』,$con);//設定資料庫

// $id=addslashes($_get[『id』]);

// $sql=」select * from mysqli_test where id=』$id'」;

// echo $sql;

// $result=mysql_query($sql);

// $date=mysql_fetch_assoc($result);

// echo 「

username:」.$date[『username』];

// echo 「

password:」.$date[『password』];

// //var_dump($date);

?>

當php開啟magic_quotes_gpc   (魔術引號),或者使用addslashes、mysql_real_escape_string等函式進行過濾時,如果查詢語句中存在單引號,我們嘗試閉合單引號就會被過濾掉,如圖,通過新增\**義符)將單引號轉義

這種形式下,如果資料庫使用的是gb2312、gbk、gb18030等寬位元組的編碼時,就會造成寬位元組注入

當我們輸入%df』時經過addslashes轉義變成 %df%5c%27 在通過gbk編碼後變成 運』

在這裡我們發現他多出來了乙個單引號正好閉合了我們查詢語句中的單引號

構造語句: 1=2 union select 1,user(),database() — a(這裡要注意 在mysql注釋符後邊要加乙個空格符,由於瀏覽器在會刪去url末尾中的空格符 所以我們在後邊加乙個字串 中間加個空格)

修復:

mysql_real_escape_string轉義

引數化查詢(預編譯)

pdo查詢

SQL寬位元組注入

什麼是寬位元組注入?寬位元組注入就是因為gbk編碼方式需要兩個ascii碼組合來解碼,所以形象的叫做寬位元組,這個作為了解即可 寬位元組注入的條件 1 資料庫查詢設定為gbk編碼 2 使用了addslashes mysql real escape string mysql escape string...

sql注入之寬位元組注入

在介紹寬位元組注入之前,首先引入php的乙個防禦函式和一種編碼格式gbk 這是php自帶的一種防禦函式,該函式會解析使用者提交的資料,如post,cookie等提交過來的資料,並對這些資料中的特殊字元新增轉義符號 以確保資料不會出現致命錯誤。單引號,雙引號,反斜線等都會被加上反斜線。而對於sql注入...

mysql 寬位元組注入 SQL注入之寬位元組注入

簡介 寬位元組注入是相對於單位元組注入而言的。單位元組注入就是大家平時的直接在帶有引數id的url後面 追回sql語句進行注入。比如 1 1 1 2 這個經典的判斷目標是否存在注入的例子就是單位元組注入。理論上說,只要資料庫連線 設定了gbk編碼,或者是預設編碼就 是gbk,那現在的程式裡到處都是注...