内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

我是如何黑进Pornhub拿到2万美元赏金的

2016-07-28 11:04 出处:清屏网 人气: 评论(0

老司机们对Pornhub也不会陌生了(////)\,此处略去一万字…作者是如何黑进pornhub的呢?这一切都要从那日作者打开pornhub说起…

概要:

笔者获取了pornhub.com的远程执行代码,并且在Hackone上赚取了2万美元的漏洞赏金。
笔者在PHP的垃圾回收算法中发现了UAF漏洞
此漏洞均可以通过利用PHP的反序列化功能进行远程利用
笔者还获取了互联网漏洞悬赏协会的2000美元赏金

0×01 漏洞发掘

大体“分析”了平台之后,笔者快速检测了该网站的反序列化使用情况,发现多种路径受到影响(比如你上传性感图片的路径):

http://www.pornhub.com/album_upload/create 

http://www.pornhub.com/uploading/photo

在这套程序中,当你post数据中包含名为cookie的参数时,会将cookie参数的值进行反序列化操作,并且其相关的数据会在Set-cookie头中有所体现。

这可以通过发送包含一个对象的特定数组来进一步验证:

响应布局:

第一眼看上去可能会觉得它只是造成信息泄露危害,但一般情况下大家都清楚反序列化用户输入是不明智的:

ROP in PHP applications

Shocking News in PHP Exploitation

开发技术标准中要求所谓合适的面向对象的编程(Property-Oriented-Programming )意味着可能会因为滥用已经存在的类而触发不必要的恶意代码。但不幸的是,笔者很难收集到总体上pornhub使用的所有框架和PHP对象,对多个类别的框架进行了测试之后都无功而返。

0×02 漏洞描述

反序列化的核心相对来说比较复杂,涉及到了PHP5.6 1200多行的代码,此外,许多PHP类有自己的反序列化的方法。为了支持像对象,数组,整型,字符串,甚至是引用这样的数据类型,PHP的记录中显示了一些bug和内存损坏的漏洞。目前PHP的新版本中(PHP5.6或者PHP7)并没有发现类似的漏洞,特别是现在反序列化受到了更多的关注,好比再去榨已经榨干的柠檬,已经没有太多的漏洞可以被挖掘了。

fuzzing 反序列化

为了找到最终的答案笔者的基友Dario针对传递给反序列化的序列串“特制”了一个fuzzer工具,在PHP7上运行这个fuzzer工具将会得到不可预料的结果,而且这种结果在测试pornhub的网站时是不可复制的。因此笔者 把目标放在了PHP5的版本上,然而在PHP5的版本中这个fuzzer生成了1TB的日志还是没有什么结果。当笔者把越来越多的精力放在fuzzing上并且毫无收获之后,笔者开始质疑自己了:这是一个安全相关问题吗?如果是的话是只能本地利用还是可以远程利用呢? 为了深入调查笔者又用fuzzer工具收集了超过200kb的非打印blobs数据。

分析意外结果

接下来笔者用了大量时间来分析症结所在。笔者已经提取了工作内存损坏漏洞的简略证据,最终发现了一个UAF漏洞!经过进一步调查,笔者发现根本源头来自PHP的垃圾回收算法,与反序列化根本毫无关系,这个PHP的两个组成部件在解序列化后才相互作用, 因此,不是很适用于远程利用。经过进一步的分析后,笔者对问题的根源有了更深的理解,并且发现了更多的UAF漏洞,而且是可以用来远程利用的。 漏洞链接:

PHP Bug – ID 72433 -- CVE-2016-5771

PHP Bug – ID 72434 --  CVE-2016-5773

0×03 远程利用

即便是这个让人充满“希望”的UAF漏洞也是非常难以远程利用的,特别是它涉及到了多个开发平台。 明确了我们的目标是能够远程执行任意代码后,我们需要找到控制CPU指令指针到RIP寄存器的方法,通常会有以下障碍:

1.栈和堆以及任何其他的可写入段被标记为不可执行(可执行空间保护)
2.即使你能够控制指令指针,你也需要有一个可执行内存段的有效地址。之后调用libc函数系统执行一个shell命令行。在PHP中,通常是很容易执行zend_eval_string的,例如你在一个PHP脚本中写上“eval(‘echo 1337;’);”时,它可以让我们无需转换而执行任意代码。

第一个问题可以通过使用返回导向编程(ROP)利用现有的可执行记忆片段来解决。第二个问题需要找到zend_eval_string的正确地址。通常当一个动态链接程序被执行时加载程序将会映射此过程到0×400000 (x86_64标准负载地址),如果你已经以其他方式获取了执行权限,你可以本地查找你想要的任何功能。笔者发现了pornhub使用的是PHP5-CGI的编译版本,因此难以确定确切的PHP版本。

具体的利用过程因为比较繁杂小编在这并不赘述,笔者利用漏洞具体能实现的是:

1.下载pornhub.com的完整数据库(包括敏感数据)
2. 可在平台上跟踪用户操作行为
3.网站托管在服务器上的所有代码皆可被泄露
4.深入内网

0×04 规避建议

笔者给出的建议是:

即使是在不同类型的PHP环境中,仍然可以利用反序列化实现远程代码执行,因此不要在反序列化中涉及使用用户数据,少用复杂的序列化方法例如json。

最新的PHP版本已经修复了漏洞,因此读者们需尽快更新PHP版本。

希望此文对您有所帮助,如果纰漏欢迎指错^ ^


分享给小伙伴们:
本文标签: PHPPornhub

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号