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));--+

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

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

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的語法格式則會報錯,報錯信息會提示這個數據錯誤

所以我們就在這個參數里注入我們的返回數據結果


免責聲明!

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



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