盲注查詢
盲注其實就是沒有回顯,不能直觀地得到結果來調整注入數據,只能通過其他方式來得到是否注入成功,主要是利用了一些數據庫內置函數來達到的
布爾盲注
布爾很明顯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的語法格式則會報錯,報錯信息會提示這個數據錯誤
所以我們就在這個參數里注入我們的返回數據結果