聯合查詢SQL注入

2021-10-01 12:14:24 字數 2931 閱讀 6637

sql注入介紹:sql注入介紹

注入產生原因:web應用程式對使用者輸入資料的合法性沒有判斷或過濾不嚴,導致惡意payload直接帶入sql語句執行,從而執行payload中非法操作!

新建php檔案,將下面**複製到php檔案中,在瀏覽器中訪問即可

<?php 

$host

='127.0.0.1'

;$dbuser

='root'

;$dbpass

='root'

;$dbname

='test'

;$con

=new

mysqli

($host

,$dbuser

,$dbpass

,$dbname);

if($con

->

connect_error)if

(isset

($_get

['id'])

&&!empty

($_get

['id'])

)else

$sql

="select id,title,content from t_feedback where id=$id";

$result

=$con

->

query

($sql)or

die();

if($result

->

num_rows

>0)

}else

echo

"your sql syntax: "

.$sql

;$con

->

close()

;

嘗試輸入特殊字元,sql返回錯誤,證明可能存在sql注入漏洞,聯合查詢注入前提:頁面回顯查詢內容

通過order by確定表字段數,order by 3頁面返回正確,order by 3頁面返回錯誤,確定資料表有3列欄位

通過聯合查詢語句,拼接查詢使用者、資料庫名及資料庫版本資訊,關鍵payload:

查詢資料庫中所有資料表,0x74657374為資料庫名二進位制編碼,關鍵payload:

查詢資料表所有列名,關鍵payload:

查詢使用者資料表所有使用者資訊,關鍵payload:

由於此處傳入 id 值為 int 型,此處可直接使用 intval() 函式將接收的引數值強制轉換為 int 型,防止注入。此指令碼中,$id = $_get['id'];改為$id = intval($_get['id']);即可。

修改後php**如下:

<?php 

$host

='127.0.0.1'

;$dbuser

='root'

;$dbpass

='root'

;$dbname

='test'

;$con

=new

mysqli

($host

,$dbuser

,$dbpass

,$dbname);

if($con

->

connect_error)if

(isset

($_get

['id'])

&&!empty

($_get

['id'])

)else

$sql

="select id,title,content from t_feedback where id=$id";

$result

=$con

->

query

($sql)or

die();

if($result

->

num_rows

>0)

}else

echo

"your sql syntax: "

.$sql

;$con

->

close()

;

——捨心

SQL注入 聯合查詢注入

注入條件 頁面有顯示位,即在乙個 的正常頁面,服務端執行sql語句查詢資料庫中的資料,客戶端將資料展示在頁面中,這個展示資料的位置就叫顯示位。找的注入點 查詢列數 找到顯示位 獲取列中的資訊 注入點 查詢列數 order by 猜測的列數 order by 11 返回正常,有11列 order by...

sql注入 union聯合查詢注入

目錄 一,sql注入必記的一庫三表 二,union聯合查詢注入 1,基本注入流程 1,判斷注入點 2,判斷多少列 3,判斷顯示位 4,顯示資料庫的基本資訊 5,顯示有哪些資料庫 6,顯示資料庫下有哪些表 7,判斷表裡有哪些字段 八,查詢資料表中有哪些資料 information schema 資料庫...

sql注入 sqlserver聯合查詢

實驗環境 sqlserver 2008 實驗步驟 一 判斷是否有注入 分別輸入ip 1.php?id 1 and 1 1和ip 1.php?id 1 and 1 2可判斷出該處存在注入 二 判斷顯示位 1.輸入 order by 3,顯示出第三列 2.輸入 order by 4,顯示下面情況,說明顯...