1. 程式人生 > 其它 >如何理解MySQL注入中extractvalue()報錯注入中的0x7e

如何理解MySQL注入中extractvalue()報錯注入中的0x7e

在學習報錯注入的過程中,對於extractvalue()這個函式的報錯注入始終抱有一個疑問,為什麼再concat連線語句時始終要有個0x7e在前面呢?

extractvalue(null, concat(0x7e, database()));

上面這個語句為什麼會報錯?首先講下extractvalue()這個函式的作用。

ExtractValue(xml_frag, xpath_expr)

ExtractValue()接受兩個字串引數,一個XML標記片段xml_frag和一個XPath表示式xpath_expr(也稱為 定位器); 它返回CDATA第一個文字節點的text(),該節點是XPath表示式匹配的元素的子元素。

第一個引數可以傳入目標xml文件,第二個引數是用Xpath路徑法表示的查詢路徑

如何讓extractvalue()這個函式產設錯誤並報告?那麼自然需要在使用過程中有語法錯誤,怎麼去創造這個語法錯誤使得這個錯誤變得萬能呢?就是使用這個語法中本身不含有或者不支援的字元。

例如:SELECT ExtractValue('<a><b><b/></a>', '/a/b');就是尋找前一段xml文件內容中的a節點下的b節點,這裡如果Xpath格式語法書寫錯誤的話,就會報錯。這裡就是利用這個特性來獲得我們想要知道的內容。

在ASCII碼錶中,0x7e這個十六進位制數代表符號~,~這個符號在xpath語法中是不存在的,因此總能報錯。同理,肯定也有其他字元是XPATH語法不支援的。 ! 也是不支援的,因此也可以使用。