Sql注入的分類:數字型+字符型


Sql注入:

就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。通過構造惡意的輸入,使數據庫執行惡意命令,造成數據泄露或者修改內容等,以達到攻擊的目的。主要是由於應用程序對用戶的輸入沒有進行嚴格的過濾而造成的。

一、萬能密碼

在說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為字符型注入。

Sql注入分類可以按照參數類型分為數字型和字符型。還有一些常見的注入分類,例如:

(1)POST:注入字段位於POST數據中;

(2)Cookie:注入字段位於Cookie數據中;

(3)延時注入:根據數據庫延時特性的注入

(4)搜索注入:注入字段在搜索的位置;

(5)base64注入:注入字符經過base64編碼后注入;

(7)錯誤注入:基於數據庫錯誤信息的響應注入;

等等…

注:以上內容為作者自己原創,錯誤之處還望指出,謝謝大家!!!


免責聲明!

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



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