【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預設配置的資料庫並不支援這個非主流通道。