1. 程式人生 > >如何判斷是字符型註入還是整形註入

如何判斷是字符型註入還是整形註入

測試 www 參數 無法執行 lec ble -c where 最大

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為字符型註入。

如何判斷是字符型註入還是整形註入