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

attachments-2020-03-QWDASP6t5e7c42e7cf73e.jpg

盲注查詢

盲注其實就是沒有回顯,不能直觀地獲得結果來調整注入數據,只能經過其餘方式來獲得是否注入成功,主要是利用了一些數據庫內置函數來達到的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))

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報錯注入

  1. ExtractValue(xml_frag, xpath_expr)
  2. ExtractValue()接受兩個字符串參數,
  3. 一個XML標記片斷 xml_frag
  4. 一個XPath表達式 xpath_expr(也稱爲 定位器);
  5. 第一個參數能夠傳入目標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的語法格式則會報錯,報錯信息會提示這個數據錯誤

因此咱們就在這個參數裏注入咱們的返回數據結果

 

attachments-2020-03-DTsfN8eI5e7c422eed100.jpg

相關文章
相關標籤/搜索