SQL有很多方法,當一個方法想不通的時候就需要換一個方法,這裏主要介紹SQL的報錯型注入(大佬繞過)
使用場景
- 當進行對一個網站SQL注入的時候,發現頁面上沒有顯示位但是有sql語句執行錯誤信息輸出。
- 什麼是顯示位:在一個在一個網站的正常頁面,服務端執行SQL語句查詢數據庫中的數據,客戶端將數 據展示在頁面中,這個展示數據的位置就叫顯示位 。
構造payload
- 介紹函數
a. ExtractValue()
b. UpdateXml()
ExtractValue()函數:
ExtractValue(xml,xpath),它接受兩個字符串參數,第一個參數可以傳入目標xml文檔,第二個參數是用Xpath路徑法表示的查找路徑。這裏如果Xpath格式語法書寫錯誤的話,就會報錯。這裏就是利用這個特性來獲得我們想要知道的內容。
eg:select extractvalue('~','~');
報出來了後面的 ‘~’
eg:select extractvalue(' ',concat('<',(select database()),'>'))
報出來了database();
UpdateXml():
UpdateXML(xml_target, xpath_expr, new_xml)
xml_target:: 需要操作的xml片段
xpath_expr: 需要更新的xml路徑(Xpath格式)
new_xml: 更新後的內容
在SQL注入裏面這些參數不重要,只需要在更新的xml路徑的參數改成SQL語句。和上面的ExtractValue()函數一樣
可以這樣想:當執行updatexml()和extractvalue()函數的時候,需要路徑,但是路徑不正確就會報錯。當把路徑改成SQL注入語句,同樣,會報出錯誤(裏面內容卻是SQL注入執行的內容)
eg:select updatexml(1,concat('<',(select database()),'>'),1);
這樣就報出了database();
總結
- 根據以上的兩個函數可以進行報錯型注入。
- 根據自己的情況可以構造好多SQL注入。上面只是演示了獲得database()的
- SQL注入需要靈活掌握,所以就需要了解原理
以上都是自己的理解,如果有錯誤希望大家指出共同學習~
小白在進步~~