- A+
已发表于去年7月的黑x,今天无意中看到,大家看看吧。
之前在某大牛的博客上闲逛的时候,看到国内某知名公司与一所大学联合举办了一次信息安全竞赛,好像很好玩呀,所以就去看了下。其他关卡按下不表,交流群里有很多人在问脚本关最后一题,这几天刚好竞赛结束,因此我来跟大家分享一下最后一关的解题过程。题目很简单,只有几句话
首先遇到的第一个问题就是介个图片显示不出来,我当时花了几乎快一天的时间来思考,也尝试着去猜是不是图片的路径不对,例如加入一些其他信息拼凑路径什么的。但是好像又不是路径之类的问题,那么到底是哪出了问题呢?
我看了下提示,提示里面是这样写的:北理极速之星是啥?不知道?你OUT了,赶快baidu一下吧~。我百度了一下,发现网址是http://bitpt.cn/,尝试在图片路径中加入相关的东西,还是不行。我又没有那个网站的会员账号,能看到的信息少得可怜。最后想到,难道给一个网址是为了我们用来写在refer中?前面已经有过一道这样的题,二话不说,打开FireFox,在RefControl插件中,选择添加站点,然后选择自定义,把http://bitpt.cn/填进去,把网址填为比赛的官网的地址,然后再打开,果然,图片出来了。
我们打开图片所在的地址,发现是一个bitptpicture.php?id=1这样结尾的地址,尝试变换id后面的数字,发现图片的内容也是不同的。我们的目标是找出数据库的表名,试了下加个单引号,报错了,看来很有戏呀。
可是无论怎样,这里爆出来的东西都无法显示,貌似只能分能不能显示出图片,而无法看到数据呀。仔细思考了一下,这是一个动态的个人签名图片,那么,这个图片应该是动态生成的,而非那种在数据库中存放图片地址的静态图片,其中的名字,上传流量以及下载流量应该都是从数据库中查出来然后拼接到图片中的。
我们结合上面的报错语句,猜想文件中的数据库查询SQL语句应该是类似这样的:
Select name,upload,download from xxx where id=’1’回车 limit 0,1
那么我们再匹配好单引号,查出表的名字应该是木有问题的。先来看下数据库的类型,在1后面加上个“–”,返回正常没有报错。
看来是MySQL没错了,我们看看能不能直接把版本也弄出来,如果是5以上,那就爽歪歪了,直接提交:
http://www.isclab.org:8080/10/bitptpicture.php?id=1' and 1=2 union select version(),2,3' --
返回来了,果然是把返回的信息拼到图片里面去了。
数据库版本是5.0.77,我们直接暴下数据库名,然后就可以直接搞出表来了,要注意的是由于这里后两个都是非字符串类型,因此只能靠第一个名字处把暴的东西都显示出来了,我们继续,提交:
http://www.isclab.org:8080/10/bitptpicture.php?id=1' and 1=2 union select database(),2,3' --
好了数据库的名字是interest,嘿嘿嘿,果然很有意思哈。
下面就是见证奇迹的时刻,我们先拿出多功能转换工具,把interest转成16进制,查出来是0x696E746572657374,提交:
http://www.isclab.org:8080/10/bitptpicture.php?id=1' and 1=2 union select table_name,1,2 from (select * from information_schema.tables where table_schema=0x696E746572657374 order by table_schema limit 0,1)t -- '
直接暴出表名,游戏结束。
至此,游戏结束,也让我对注入有了更深一层的理解,只要存在SQL并且能够看到返回的地方,就都可能存在SQL注入,就好像上面说的,图片也能来注入。
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫