SQL報錯注入
阿新 • • 發佈:2021-11-04
報錯注入在沒法用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位