sql報錯注入:extractvalue、updatexml報錯原理


報錯注入:extractvalue、updatexml報錯原理

MySQL 5.1.5版本中添加了對XML文檔進行查詢和修改的兩個函數:extractvalue、updatexml

名稱 描述
ExtractValue() 使用XPath表示法從XML字符串中提取值
UpdateXML() 返回替換的XML片段

通過這兩個函數可以完成報錯注入

一、extractvalue函數

ExtractValue(xml_frag, xpath_expr)

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

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

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

1551927935215
(這里我們是為了學習報錯注入,所以不需要太詳細的知道該函數具體原理)

利用concat函數將想要獲得的數據庫內容拼接到第二個參數中,報錯時作為內容輸出。
1551928141656

二、updatexml函數

UpdateXML(xml_target, xpath_expr, new_xml)

xml_target:: 需要操作的xml片段

xpath_expr: 需要更新的xml路徑(Xpath格式)

new_xml: 更新后的內容

此函數用來更新選定XML片段的內容,將XML標記的給定片段的單個部分替換為 xml_target 新的XML片段 new_xml ,然后返回更改的XML。xml_target替換的部分 與xpath_expr 用戶提供的XPath表達式匹配。

如果未xpath_expr找到表達式匹配 ,或者找到多個匹配項,則該函數返回原始 xml_targetXML片段。所有三個參數都應該是字符串。使用方式如下:

mysql> SELECT
    ->   UpdateXML('<a><b>ccc</b><d></d></a>', '/a', '<e>fff</e>') AS val1,
    ->   UpdateXML('<a><b>ccc</b><d></d></a>', '/b', '<e>fff</e>') AS val2,
    ->   UpdateXML('<a><b>ccc</b><d></d></a>', '//b', '<e>fff</e>') AS val3,
    ->   UpdateXML('<a><b>ccc</b><d></d></a>', '/a/d', '<e>fff</e>') AS val4,
    ->   UpdateXML('<a><d></d><b>ccc</b><d></d></a>', '/a/d', '<e>fff</e>') AS val5
    -> \G
***********結果**************
val1: <e>fff</e>
val2: <a><b>ccc</b><d></d></a>
val3: <a><e>fff</e><d></d></a>
val4: <a><b>ccc</b><e>fff</e></a>
val5: <a><d></d><b>ccc</b><d></d></a>

這里和上面的extractvalue函數一樣,當Xpath路徑語法錯誤時,就會報錯,報錯內容含有錯誤的路徑內容:

1551929714141

參考鏈接:
https://blog.csdn.net/zpy1998zpy/article/details/80631036
https://dev.mysql.com/doc/refman/5.7/en/xml-functions.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM