天天看點

SQL注入--盲注及報錯注入

盲注查詢

盲注其實就是沒有回顯,不能直覺地得到結果來調整注入資料,隻能通過其他方式來得到是否注入成功,主要是利用了一些資料庫内置函數來達到的

布爾盲注

布爾很明顯Ture跟Fales,也就是說它隻會根據你的注入資訊傳回Ture跟Fales

其實登入處的注入就是布爾型的,萬能密碼就是構造一個永真的查詢,比如下面的

select user from test where passwd=‘{injuct}’;
#構造永真,即令where的條件用于為真
select user from test where passwd=‘aa‘or’1’=‘1’;
#注入的資料是aa‘or’1’=‘1      

密碼輸入無論是否正确,查詢都成立。

布爾盲注其實就是利用了這種,我們什麼時候需要采用這種呢

1)當沒有資料輸出點時,我們沒有辦法直覺的判斷注入的sql執行情況,

2)有正确或者錯誤的兩種傳回,比如查詢正确傳回一個頁面,失敗傳回另一個頁面,但是沒有資料

時間盲注

界面傳回值隻有一種,true 無論輸入任何值 傳回情況都會按正常的來處理。加入特定的時間函數,通過檢視web頁面傳回的時間差來判斷注入的語句是否正确。

利用的内置函數

sleep(n):将程式挂起一段時間 n為n秒
if(expr1,expr2,expr3):判斷語句 如果第一個語句正确就執行第二個語句如果錯誤執行第三個語句      

注入的語句

select user from test where passwd=‘aa‘and (if(ascii(substr(database(),1,1))>100,sleep(10),null));
#注入的資料是aa‘and (if(ascii(substr(database(),1,1))>100,sleep(10),null));--+      

我們什麼時候需要采用這種呢

2)無論查詢結果都傳回同一個資料,無法判斷SQL語句執行情況

基于錯誤查詢

有如下報錯注入方法

#報錯注入floor
(select 1 from (select count(*),concat((payload[]),floor(rand()*2))a from information_schema.columns group by a)b)limit 0,1
#報錯注入extractvalue
select extractvalue(1,concat(0x5c,([payload])))
#報錯注入updatexml
select 1=(updatexml(1,concat(0x3a,([payload])),1))      

floor報錯注入

floot是區鎮函數,傳回小于或等于 x 的最大整數

上面floor報錯例子中floor中傳入的是一個rand函數(傳回 0 到 1 的随機數)。

floor報錯注入主要利用的group by的機制,下面先來了解一下原理:

group by key的原理是循環讀取資料的每一行,将結果儲存于臨時表中。讀取每一行的key時,如果key存在于臨時表中,則不在臨時表中更新臨時表中的資料;如果該key不存在于臨時表中,則在臨時表中插入key所在行的資料。group by floor(random(0)2)出錯的原因是key是個随機數,檢測臨時表中key是否存在時計算了一下floor(random(0)2)可能為0,如果此時臨時表隻有key為1的行不存在key為0的行,那麼資料庫要将該條記錄插入臨時表,由于是随機數,插時又要計算一下随機值,此時 floor(random(0)*2)結果可能為1,就會導緻插入時沖突而報錯。即檢測時和插入時兩次計算了随機數的值不一緻,導緻插入時與原本已存在的産生沖突的錯誤。

主要檢測時和插入時兩次計算的是以輸不一緻就會報錯。

extractvalue報錯注入

ExtractValue(xml_frag, xpath_expr)

ExtractValue()

接受兩個字元串參數,

一個XML标記片段 xml_frag

一個XPath表達式 xpath_expr(也稱為 定位器);

第一個參數可以傳入目标xml文檔,第二個參數是用Xpath路徑法表示的查找路徑

原理

如果Xpath格式文法書寫錯誤的話,就會報錯。這裡就是利用這個特性來獲得我們想要知道的内容。

updatexml報錯注入

首先了解下updatexml()函數

UPDATEXML (XML_document, XPath_string, new_value);

第一個參數:XML_document是String格式,為XML文檔對象的名稱,文中為Doc 第二個參數:XPath_string (Xpath格式的字元串) ,如果不了解Xpath文法,可以在網上查找教程。 第三個參數:new_value,String格式,替換查找到的符合條件的資料 函數作用:改變文檔中符合條件的節點的值

原理

如果XPath_string的值不符合xpath的文法格式則會報錯,報錯資訊會提示這個資料錯誤

是以我們就在這個參數裡注入我們的傳回資料結果

繼續閱讀