1. 程式人生 > >【19】WEB安全學習----MySQL注入-4

【19】WEB安全學習----MySQL注入-4

一、盲注介紹

開發人員一般禁用了所有的詳細錯誤訊息,如果發現了一個SQL注入點,但應用只提供了一個通用的錯誤頁面;或者返回正常頁面但沒有我們需要的內容在上面。這些都屬於SQL盲注,沒有錯誤訊息或反饋內容就不能使用之前的注入方法,而是採用SQL邏輯操作以位元組方式推斷資料來修改頁面中的內容。

二、盲注基礎知識

1、強制產生通用錯誤

可以通過輸入正常資料與非法資料(如加個單引號),判斷網頁資料正常與錯誤的狀態,錯誤狀態一般是一個通用的錯誤頁面或空資料等。

2、進一步測試注入點

可以提交包含副作用(攻擊者可觀察到)的查詢,如延遲函式sleep()、邏輯語句and or等、運算子+-*/、字串連線符等。

3、推斷攻擊技術

推斷攻擊技術均可通過觀察指定請求的響應來提取至少一位資訊(輸入正常的語句返回正常,輸入錯誤的語句返回錯誤頁面)。

既然網頁無法返回我們直接注入查詢的結果,那麼我們可以向資料庫進行判斷詢問,如當前資料庫使用者是否是root等。

如通過MySQL條件判斷函式進行推斷。

4、二分搜尋法

二分搜尋(分半演算法)法主要用於推斷單個位元組的值,不需要搜尋整張字母表,通過不斷拆分平均值來縮小查詢範圍。

如:猜一個數字(1-256)

1、該數字是否<127

2、該數字是否<63

3、該數字是否<31

4、該數字是否<15

5、該數字是否<7

6、......

通過不斷分半猜,能搜小查詢的次數。

任何ASCII字元都可以用1位元組或8位表示,也稱為八位位元組,並非所有字元在資料庫中都是有效的或允許的,所以我們只關注ASCII範圍32 - 126,它給我們留下了一組94個字元。該範圍只能用7位表示,最高有效位為0,這個可以減少我們猜解的範圍。

但是,這種二分搜尋法有個明顯的缺點,那就是猜測每一位需要傳送8次請求,每次傳送的請求需要上一次請求返回結果判斷才能繼續傳送,也就是說只有傳送了第一次請求,且返回了結果,在進行結果判斷,然後在傳送第二次請求......,這種每次需要等待上一次結果返回,花費的時間較長。

5、按位方法

用按位方法法不需要像二分搜尋法那樣只能單次單次傳送,可以並行同時傳送7

次請求,使得能快速得到一位值。

位操作法使用位操作符 & | ^來實現,具體的原理涉及到二進位制的運算。

演示:這裡隨意出一個ascii字元,比如字元 'g',g的ascii碼錶數字為103。

select 103 & 128;    結果為 0 =》0

select 103 & 64;    結果為 61=》1

select 103 & 32;    結果為 32=》1

select 103 & 16;    結果為 0=》0

select 103 & 8;    結果為 0=》0

select 103 & 4;    結果為 4=》1

select 103 & 2;    結果為 2=》1

select 103 & 1;    結果為 1=》1

結果非0 的都為1,那麼集合起來就是 01100111,轉換到十進位制為103,而ascii碼錶113對應字元‘g’,而ascii碼錶可見字元為1-128,故不需要& 128,所以用此方法猜解一個位元組只需要7次查詢。

實現原理:就是把字元轉化成二進位制,逐位判斷。

128二進位制   10000000

64二進位制    01000000

32二進位制    00100000

16二進位制   00010000

8二進位制     00001000

4二進位制    00000110

2二進位制    00000010

1二進位制    00000001

6、正則表示式法

正則表示式法是二分搜尋法的一種變體,使用正則表示式進行匹配字串。

正則表示式基礎:

正則表示式匹配列表
選項 說明
^ 匹配以什麼字元開頭
$ 匹配以什麼字元結尾
. 匹配任意一個字元
* 匹配任意多個字元
+ 匹配任意至少一個字元
[a-z] 匹配[]裡面的任意一個字元
[^a-z] 匹配不在[]裡面的任意一個字元
{n,} 匹配前面的字串至少n次
{n,m} 匹配前面的字串至少n次,最多m次

7、非主流通道技術

提取SQL盲注漏洞中的資料時,使用第二類方法是藉助非主流通道。區別在於推斷技術依靠的是頁面傳送的響應,而非主流通道技術使用的是傳輸通道而非頁面響應,傳輸通道包括DNS、E-MAIL、HTTP請求。好處是可以一次檢索多塊資料,而不是推斷單個或單個位元組的值。

不過很遺憾,MySQL預設配置的資料庫並不支援這個非主流通道。