youporn_logo.png

由于我个人时间的限制,因此我很少或者说是几乎不参加赏金计划任务。虽然我早早的就注册了HackerOne,但你们可以到我的主页并没有任何的记录。在这里我不得不提及我的同事,他与我截然相反,可以说他把大部分时间都花在了研究赏金计划上。就在上个月的一个傍晚,当我们连接到我们的工作Jabber server时,他告诉我成人网站YouPorn也已在HackerOne上,启动了他们的bug奖励计划

他:今天youporn加入了bug赏金计划

我:在hacker one?

他:是的

我:没时间,我正在迁移我的DNS服务器

当我正在阅读关于绑定的文档时,他回复了我:

他: oh shit,不敢相信,搜索栏中存在可利用的XSS

事情开始变得有趣起来,使我不得不停下手中的工作。我很惊讶,这个问题之前竟然没有人能发现它。搜做表单中的XSS是最基本的情况之一,我和我的朋友都经常逛YouPorn,但从来没有发现过这个问题。

时间对我们来说是非常宝贵的,我们必须要在其他人之前利用并报告该漏洞。

从缺少过滤到开放重定向

我启动了浏览器和Burp,并在搜索表单上发送了一个请求。我搜索了foobar”。正如你在下面的截图中看到的那样,搜索词是在meta标签中,以没有任何过滤(大写字母除外)的形式输出的:

first_payload.png

但当我们尝试写入关闭标签,并添加了Javascript payload,我们发现我们的payload并未被执行:

first_fail.png

虽然如此,但我们仍然决定利用meta HTML标签。这是一个非常强大的标签,因为它包含有http-equiv指令。该指令相当于http的文件头作用。

http-equiv指令将值设为refresh,可用于将用户重定向到其他页面。如果发生网络钓鱼攻击,这种开放重定向漏洞是非常有用的:

您向有人发送链接到http://youporn.com的链接, 
您的有效载荷将它们重定向到您控制的网站,模仿YouPorn的CSS; 
你问他们的凭据,他们的信用卡号码等。

  1. 向目标发送带有你的有效载荷的http://youporn.com链接;
  2. 有效载荷将目标用户重定向到你控制的高仿YouPorn钓鱼网站;
  3. 向目标用户询问凭据,信用卡号等请求。

我们输入了以下payload来进行漏洞测试:

second_fail.png

正如你所看到的,这里有一个小问题:http-equiv中的破折号,并未被插入到源代码中。我决定使用双重编码尝试绕过。首先我对破折号做了HTML编码,然后又对其进行了URL编码。

破折号, – ,HTML编码后为&#45 ,URL编码后为%26%2345%3b:

first_success.png

bingo!现在我们已经成功获取到了一个可以重定向用户URL的有效载荷。

标记为重复

与此同时,我那发现并第一时间通知YouPorn的同时,收到了来自YouPorn的以下答复:

实际上你报告的这个漏洞,在你之前已被人提交过。但那位提交者并未能提供有效的利用证明,因此我当前只能将其标记为重复。但机会的大门会向你们敞开,如果你们能提供有效载荷,我们将很乐意接收并为你们提供相应的奖励!

感谢你们!

从开放重定向到反射型XSS

现在我们手中已经有了一个,可以重定向用户URL的有效载荷。

我的脑海中突然灵光一现,那么我们是否可以使用相同的技巧将破折号替换为>和<呢?

事实上这是可行的,使用“HTML-encode-then-URL-encode”技巧,我们可以插入任意的Javascript:

second_success.png

成功弹框:

w00t.png

之后我们继续做了一些测试,我们发现了YouPorn HTML渲染的一些奇怪的地方:无论我们在有效载荷上做了多少次HTML编码递归,服务器端仍然会完全的解码。这意味着:

  • &lt; 会被解码为 <
  • &amp;lt; 也会被解码为 <
  • &amp;amp;lt; 还是会被解码为 <
  • 等。

结语

最后,我们将有效载荷发送给了YouPorn,并最终获取到了YouPorn发放的250美金的奖励!

总之这个过程非常的有趣,哦!我突然想起来我手头的工作,好了回归原点继续迁移我的DNS服务器!

*参考来源:allyourbase,FB小编 secist 编译