我是如何百分之百答对110万用户出的所有问答题的
大家好!在这篇文章我将介绍一个在社交问答网站weequizz发现的数据泄露漏洞。本来这篇文章很早就该发出来的,但因为weequizz迟迟不回复的我的漏洞报告,所以一直拖到现在。
温馨提示:这些漏洞似乎仍然存在。
童话的开端
当我身边朋友都在玩一个网址为en.weequezz.com
的答题网站时,我便开始对它产生了兴趣。
顾名思义,它能创建随机或用户自制的趣味测验题,并邀请你所有的Facebook好友来回答这些问题。
我一开始也很兴奋,进行了很多小测验,但总是达不到第一。
于是我不是很开心,我开始想对其做点什么。
这个应用有超过110万用户,值得我动手。
侦察
所以,我开始点击测试,摸索它的后台逻辑。
大约1小时之后,我就发现了一些非常有趣的地方。
Chapter 0:有些不对劲
当我用Chrome检测它的源代码时,问题和选项ID
的部分引起了我的注意,好像有什么不对劲。
让我们再仔细看看:
从上图中的红线框中我们可以看出:
问题是预先加载的,不会和后台实时交互,动态变化。
一旦加载了测验ID(例如etswuypxf),服务器就会立即将所有问题以及相应的选项发送到客户端。
还有一个很有趣的
on click=”cAnswer(…)”
代码。
Chapter 1:开始挖洞
我很快就发现了这段代码的不合理之处,让我们仔细看看cAnswer(…)
这块代码
我们可以看到它的具体构成为cAnswer(1, 10, ‘b2b8x’, ‘p6lg8’, ‘exy5s’, ‘etsyuypdf’, ‘n08t3’, true)”
显然,第一个参数是“1”,它实际上是名为“m_question_q_list”类中的问题ID。
其中第一个,第二个和最后一个参数对我们来说没啥意义。而其他的参数就是有趣的部分了:
cAnswer(1, 10, 'b2b8x', 'p6lg8', 'exy5s', 'etsyuypdf', 'n08t3', true)
cAnswer(1, 10, 'b2b8x', 'p6lg8', 'z3jpz', 'etsyuypdf', 'n08t3', true)
cAnswer(1, 10, 'b2b8x', 'p6lg8', 'n08t3', 'etsyuypdf', 'n08t3', true)
cAnswer(1, 10, 'b2b8x', 'p6lg8', 'rxmj5', 'etsyuypdf', 'n08t3', true)
你发现了什么?没有?
好吧,我们再来一次!
cAnswer(bulls**t, bulls**t, ‘same’, ‘same’, ‘exy5s’, ‘same’, ‘same’, bullsh**t)
cAnswer(bulls**t, bulls**t, ‘same’, ‘same’, ‘z3jpz’, ‘same’, ‘same’, bullsh**t)
cAnswer(bulls**t, bulls**t, ‘same’, ‘same’, ‘n08t3’, ‘same’, ‘same’, bullsh**t)
cAnswer(bulls**t, bulls**t, ‘same’, ‘same’, ‘rxmj5’, ‘same’, ‘same’, bullsh**t)
看来出来了吧?
还没有?再来一次!
cAnswer(bulls**t, bulls**t, ‘same’, ‘same’, ‘exy5s’, ‘same’, ‘n08t3’, bullsh**t)
cAnswer(bulls**t, bulls**t, ‘same’, ‘same’, ‘z3jpz’, ‘same’, ‘n08t3’, bullsh**t)
cAnswer(bulls**t, bulls**t, ‘same’, ‘same’, ‘n08t3’, ‘same’, ‘n08t3’, bullsh**t)
cAnswer(bulls**t, bulls**t, ‘same’, ‘same’, ‘rxmj5’, ‘same’, ‘n08t3’, bullsh**t)
好像有行代码的两个参数相同?bingo!
开始利用
哇!我现在已经天下无敌了!
利用1:自动答题
从上述可知网页开发者时如何荒谬地编写了代码,随意将他人的编写的题目的答案对外泄露。
现在,你可以按照上面的方法其成为答题小王子,让别人爱上你。
但是等等!!
你真的要手动么?
让我们自动化!
我们是黑客,我们是程序员,以及自动答题机?
什么?你想要一份这个程序的开源代码?
OK!我这就给你们!
我知道你们看不清。我只能告诉你代码总共22行,在编写时要注意时间延迟,等待DOM对象加载。
在这个漏洞挖掘前,我正学习ja vasc ript,并尝试编写Chrome扩展。而我在尝试自动化答题这一过程中,学到了很多关于ja vasc ript的知识,我想你也应该试一下。
当然,如果你为这个漏洞的利用编写了一个插件或发现其他自动化的方法,可以和我交流一下!
利用2:无需代码
在仔细检查了这个应用的处理流程和HTTP响应后,我突然明白过来,其实我们无需敲任何代码,也不需要使用任何浏览器插件。只要一下三个简单的步骤,你就可以答对所有题。
第一步:生成测验ID,在你的浏览器中加载。
第二步:中断网络(切断网线或断开无线路由器?)然后,开始随机答题(显然是在选项上)。
第二步的1/2:写下或记住答案。
第三步:恢复联网并再次进行测试。
让WeeQuizz的服务器认为你能一次性答对所有题,迅速感动出题人。
后续
我是一个守法的公民,所以我决定给WeeQuizz写封信,提醒他们这个漏洞。
1、2、3……7天,一周即将结束,他们没有回应,也许他们正忙于处理其他事。
在4个星期后,我生气了,发了一封邮件说“如果你们不想改进你们的系统,那就这样吧。”
当我发送这封邮件后,我就再也没收到他们的任何消息。
最后,我想说,不要相信有人能满分答对你的题。
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://medium.com/@0x48piraj/how-i-hacked-a-website-integrated-w-facebook-having-1-1-mil-users-under-45-seconds-e4adcfe8ccd6
最新评论