Sql注入分類:數值型or字符型

一、萬能密碼
在說sql注入分類之前,先來看一下萬能密碼的構成原理。萬能密碼是由於某些程序,通過採用判斷sql語句查詢結果的值是否大於0,來判斷用戶輸入數據的正確性造成的。當查詢之大於0時,代表用戶存在,返回true,代表登錄成功,否則返回false 代表登錄失敗。由於 'or 1=1--' 在執行後,結果始終爲1,所以可以登錄成功。因此,被稱爲萬能密碼。

二、注入的分類
注入的分類:數字型和字符型。攻擊者目的只有一點,那就是繞過程序的限制,使用戶輸入的數據帶入數據庫執行,利用數據庫的特殊性獲取更多的信息或者更大的權限。

1、數字型注入
當輸入的參數爲整形時,如果存在注入漏洞,可以認爲是數字型注入。
測試步驟:
(1) 加單引號,URL:www.text.com/text.php?id=3'
對應的sql:select * from table where id=3' 這時sql語句出錯,程序無法正常從數據庫中查詢出數據,就會拋出異常;
(2) 加and 1=1 ,URL:www.text.com/text.php?id=3 and 1=1
對應的sql:select * from table where id=3’ and 1=1 語句執行正常,與原始頁面如任何差異;
(3) 加and 1=2,URL:www.text.com/text.php?id=3 and 1=2
對應的sql:select * from table where id=3 and 1=2 語句可以正常執行,但是無法查詢出結果,所以返回數據與原始網頁存在差異
如果滿足以上三點,則可以判斷該URL存在數字型注入。

2、字符型注入
當輸入的參數爲字符串時,稱爲字符型。字符型和數字型最大的一個區別在於,數字型不需要單引號來閉合,而字符串一般需要通過單引號來閉合的。
例如數字型語句:select * from table where id =3
則字符型如下:select * from table where name= 'admin'
因此,在構造payload時通過閉合單引號可以成功執行語句:
測試步驟:
(1) 加單引號:select * from table where name='admin''
由於加單引號後變成三個單引號,則無法執行,程序會報錯;
(2) 加 'and 1=1 此時sql 語句爲:select * from table where name='admin' and 1=1' ,也無法進行注入,還需要通過註釋符號將其繞過;
Mysql 有三種常用註釋符:
-- 注意,這種註釋符後邊有一個空格
# 通過#進行註釋
/* */ 註釋掉符號內的內容
因此,構造語句爲:select * from table where name ='admin' and 1=1-- ' 可成功執行返回結果正確;
(3) 加and 1=2-- 此時sql語句爲:select * from table where name='admin' and 1=2-- '則會報錯
如果滿足以上三點,可以判斷該url爲字符型注入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章