我是如何百分之百答对110万用户出的所有问答题的

iso60001  2151天前

22.png

大家好!在这篇文章我将介绍一个在社交问答网站weequizz发现的数据泄露漏洞。本来这篇文章很早就该发出来的,但因为weequizz迟迟不回复的我的漏洞报告,所以一直拖到现在。

温馨提示:这些漏洞似乎仍然存在。

童话的开端

33.jpg

当我身边朋友都在玩一个网址为en.weequezz.com的答题网站时,我便开始对它产生了兴趣。

顾名思义,它能创建随机或用户自制的趣味测验题,并邀请你所有的Facebook好友来回答这些问题。

我一开始也很兴奋,进行了很多小测验,但总是达不到第一。

于是我不是很开心,我开始想对其做点什么。

这个应用有超过110万用户,值得我动手。

侦察

所以,我开始点击测试,摸索它的后台逻辑。

大约1小时之后,我就发现了一些非常有趣的地方。

Chapter 0:有些不对劲

当我用Chrome检测它的源代码时,问题和选项ID的部分引起了我的注意,好像有什么不对劲。

44.png

让我们再仔细看看:

55.png

从上图中的红线框中我们可以看出:

问题是预先加载的,不会和后台实时交互,动态变化。

  1. 一旦加载了测验ID(例如etswuypxf),服务器就会立即将所有问题以及相应的选项发送到客户端。

  2. 还有一个很有趣的on click=”cAnswer(…)”代码。

Chapter 1:开始挖洞

我很快就发现了这段代码的不合理之处,让我们仔细看看cAnswer(…)这块代码

66.png

我们可以看到它的具体构成为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!

开始利用

77.png

哇!我现在已经天下无敌了!

利用1:自动答题

从上述可知网页开发者时如何荒谬地编写了代码,随意将他人的编写的题目的答案对外泄露。

现在,你可以按照上面的方法其成为答题小王子,让别人爱上你。

但是等等!!

你真的要手动么?

让我们自动化!

我们是黑客,我们是程序员,以及自动答题机?

88.png

什么?你想要一份这个程序的开源代码?

OK!我这就给你们!

99.png

我知道你们看不清。我只能告诉你代码总共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

最新评论

昵称
邮箱
提交评论