pornhub打不开
老司机们对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版本。
希望此文对您有所帮助,如果纰漏欢迎指错^ ^
*参考来源:evonide,编译/banish,有删改,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)
- 上一篇:使用免费http代理IP进行内网扫描
- 下一篇:大量无线键盘存在KeySniffer漏洞,可嗅探用户输入
-
甲鱼(2级)回复最后洞主精尽而亡……)12(亮了
-
jimmyc回复看不懂,如果有偶pornhub的图文就更好明白了)9(亮了
-
素还真(1级)半神半圣亦半仙,全儒全道是全贤。 脑中真书藏万卷,掌握文武...回复这翻译太划水了)8(亮了
-
DavidHu(1级)回复@ 我叫扛把子 要不要截个首页给你看看哇)7(亮了
-
红茶(1级)回复@ jimmyc 这种文字,就是赚分的,没打算让你看懂。要让你看懂的,类似的文章应该说明几个问题:
1、fuzzing脚步设计的时候,从那个方面开始攻击的;
2、攻击结果看php在反序列化和垃圾搜集方面有哪些特点;
3、可以说明反序列化和垃圾搜集算法的一些东西,也可以制定连接给出一个参考 ;
4、在编写基于PHP的ROP时候,注意的问题。)6(亮了
0daybank
已有 12 条评论
niu
@ Scales 这个头像不是蛋黄吗?
最后洞主精尽而亡……
banish,想不到你是这样的人
@ 曾老师 宝宝还是个宝宝
这是个啥网站呀,打不开呀
@ 我叫扛把子 要不要截个首页给你看看哇
这翻译太划水了
默默的还是看原文吧
看不懂,如果有偶pornhub的图文就更好明白了
@ jimmyc 这种文字,就是赚分的,没打算让你看懂。要让你看懂的,类似的文章应该说明几个问题:
1、fuzzing脚步设计的时候,从那个方面开始攻击的;
2、攻击结果看php在反序列化和垃圾搜集方面有哪些特点;
3、可以说明反序列化和垃圾搜集算法的一些东西,也可以制定连接给出一个参考 ;
4、在编写基于PHP的ROP时候,注意的问题。