1. 程式人生 > 其它 >SQL報錯注入

SQL報錯注入

報錯注入在沒法用union聯合查詢時用,但前提還是不能過濾一些關鍵的函式。

報錯注入就是利用了資料庫的某些機制,人為地製造錯誤條件,使得查詢結果能夠出現在錯誤資訊中。這裡主要記錄一下xpath語法錯誤concat+rand()+group_by()導致主鍵重複

  • 通過floor報錯
and (select 1 from (select count(*),concat(( payload),floor (rand(0)*2))x from information_schema.tables group by x)a)

其中payload為你要插入的SQL語句
需要注意的是該語句將 輸出字元長度限制為64個字元

超過64個字元可以使用limit不使用concat

  • 通過updatexml報錯,xpath語法錯誤
and updatexml(1, payload,1)

函式原型:updatexml(xml_document,xpath_string,new_value)
正常語法:updatexml(xml_document,xpath_string,new_value)
第一個引數:xml_document是string格式,為xml文件物件的名稱 第二個引數:xpath_string是xpath格式的字串
第三個引數:new_value是string格式,替換查詢到的負荷條件的資料 作用:改變文件中符合條件的節點的值

同樣該語句對輸出的字元長度也做了限制,其最長輸出32位
並且該語句對payload的反悔型別也做了限制,只有在payload返回的不是xml格式才會生效

0x7e為 ASCII 編碼,解析結果為 ~,使用concat 把payload`前後圈住

  • 通過ExtractValue報錯,xpath語法錯誤
and extractvalue(1, payload)

函式原型:extractvalue(xml_document,Xpath_string)
正常語法:extractvalue(xml_document,Xpath_string);
第一個引數:xml_document是string格式,為xml文件物件的名稱
第二個引數:Xpath_string是xpath格式的字串
作用:從目標xml中返回包含所查詢值的字串

輸出字元有長度限制,最長32位,payload即我們要輸入的sql查詢語句

0x7e為 ASCII 編碼,解析結果為 ~,使用concat 把payload`前後圈住

注:

 ① 0x7e=’~’
 ② concat(‘a’,‘b’)=“ab”
 ③ version()=@@version
 ④ ‘~‘可以換成’#’、’$'等不滿足xpath格式的字元
 ⑤ extractvalue()能查詢字串的最大長度為32,如果我們想要的結果超過32,就要用substring()函式擷取或limit分頁,一次檢視最多32位