盲注其實就是沒有回顯,不能直觀地獲得結果來調整注入數據,只能經過其餘方式來獲得是否注入成功,主要是利用了一些數據庫內置函數來達到的web
布爾很明顯Ture跟Fales,也就是說它只會根據你的注入信息返回Ture跟Falessql
其實登陸處的注入就是布爾型的,萬能密碼就是構造一個永真的查詢,好比下面的數據庫
select user from test where passwd=‘{injuct}’; #構造永真,即令where的條件用於爲真 select user from test where passwd=‘aa‘or’1’=‘1’; #注入的數據是aa‘or’1’=‘1
密碼輸入不管是否正確,查詢都成立。dom
布爾盲注其實就是利用了這種,咱們何時須要採用這種呢函數
1)當沒有數據輸出點時,咱們沒有辦法直觀的判斷注入的sql執行狀況,spa
2)有正確或者錯誤的兩種返回,好比查詢正確返回一個頁面,失敗返回另外一個頁面,可是沒有數據orm
界面返回值只有一種,true 不管輸入任何值 返回狀況都會按正常的來處理。加入特定的時間函數,經過查看web頁面返回的時間差來判斷注入的語句是否正確。xml
利用的內置函數對象
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))
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,就會致使插入時衝突而報錯。
即檢測時和插入時兩次計算了隨機數的值不一致,致使插入時與本來已存在的產生衝突的錯誤。
主要檢測時和插入時兩次計算的因此輸不一致就會報錯。
若是Xpath格式語法書寫錯誤的話,就會報錯。這裏就是利用這個特性來得到咱們想要知道的內容。
首先了解下updatexml()函數
UPDATEXML (XML_document, XPath_string, new_value); 第一個參數:XML_document是String格式,爲XML文檔對象的名稱,文中爲Doc 第二個參數:XPath_string (Xpath格式的字符串) ,若是不瞭解Xpath語法,能夠在網上查找教程。 第三個參數:new_value,String格式,替換查找到的符合條件的數據 函數做用:改變文檔中符合條件的節點的值
若是XPath_string的值不符合xpath的語法格式則會報錯,報錯信息會提示這個數據錯誤
因此咱們就在這個參數裏注入咱們的返回數據結果