SQL注入漏洞基礎拓展

2021-10-14 12:12:29 字數 2689 閱讀 3167

二、sql漏洞基礎 防範措施

在有些情況下,應用查詢後台使用了錯誤訊息遮蔽方法(比如@)遮蔽了報錯,

此時無法再根據報錯資訊來進行注入的判斷。

這種情況下的注入,稱為「盲注」

根據表現形式的不同,盲注又分為based boolean和based time兩種型別。

主要表現:

手動測試:

測試環境:sqlilabs注入練習靶場,kali,firefox

sql小知識展示:

length():獲取字串長度,通常用於獲取資料庫名的長度。

database(); //得到資料庫名稱

substr(database(),1,1);//使用substr函式擷取結果中的值,從第乙個字元開始,擷取1個字元。

ascii(substr(database(),1,1)); 將擷取出來的字元,轉換成acsii碼,以便於後面做運算。

ascii(substr(database(),1,1))>97; //結果會為1或者0,也就是true or false

所以根據以上知識,我們在不能根據錯誤資訊進行判斷的時候,就可以理由這種方式來猜解資料庫的名字等。

首先通過length函式獲取資料庫名的長度。當猜測的資料庫名長度為8時,頁面返回正常資訊(true)。測試語法如下:

然後更具substr和ascii兩個函式來依次猜解資料庫名中的每乙個字母。語法如下:

猜解第乙個:

),1,1))

>115--+

猜解第二個:

),2,1))

<115--+

.....

20table_name%

20from%

20information_schema.tables%

20where%

20table_schema=database()%

20limit%

200,1)

,1,1

))%3e100--+

利用同樣的方法可以依次列名甚至字段值等。但過程繁瑣,猜解費時費力,所以一般使用工具進行探測。

如果說基於boolean的盲注在頁面上還可以看到0 or 1的回顯的話

那麼基於time的盲注完全就啥都看不到了!

但還有乙個條件,就是「時間」,通過特定的輸入,判斷後台執行的時間,從而確認注入!

注入思路解析:

通過substr對database()的結果擷取第一位,然後判斷是否等於x,如果等於則為真,然後執行sleep(5),如果不等於則為假,則null, 然後通過sleep的現象來確認,依次類推,遍歷出所有的值。

測試步驟解析:

測試環境:sqlilabs注入練習靶場,kali,firefox

測試第一步,輸入任意id,發現頁面結果沒有任何變化,然後輸入id=1 和 id=1』 and sleep(3)–+,對比兩次的時間差別,發現差別在3秒左右,說明sleep(3)這個函式已經被執行了,說明存在此漏洞。

基礎資訊獲取息test payload:

1' and if ((substr((select database(

)),1,1))='a',sleep(5),null)--+ //注:mysql中if的用法:

if(條件,true返回,false返回)

通過不斷猜解,然後根據後台的響應時間來判斷對應的語句是否判斷成功。

對輸入進行嚴格的過濾和轉義

過濾:使用白名單或黑名單進行過濾

eg:str_replace(

"%","",$_post

['username'

]) //把post裡面的資料裡面含有%的替換成空

轉義:將一些特殊字元轉義為安全字元

eg:

function

escape

($link

,$data)if

(is_array

($data))

}return

$data

;}

使用預處理和引數化一般做法:使用pdo的prepare預處理(預處理+引數化)

eg:

$username

=$_get

['username'];

$password

=$_get

['password'];

trycatch

(pdoexception$e)

?>

SQL注入漏洞

sql注入漏洞曾經是web應用程式的噩夢,cms bbs blog無一不曾受其害。sql注入的原理 以往在web應用程式訪問資料庫時一般是採取拼接字串的形式,比如登入的時候就是根據使用者名稱和密碼去查詢 string sql select top 1 from user where username...

SQL注入漏洞

sql注入,就是通過把sql命令插入到web表單遞交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令,比如先前的很多影視 洩露vip會員密碼大多就是通過web表單遞交查詢字元暴出的,這類表單特別容易受到sql注入式攻擊 sql注入的發生 當應用程式使用輸入內容來構造動態sq...

sql注入漏洞

什麼是sql注入 通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。通俗地講,它是利用現有應用程式,將 惡意 的sql命令注入到後台資料庫引擎執行的能力,它可以通過在web表單中輸入 惡意 sql語句得到乙個存在安全漏洞的 上的資料庫,而...