[原创][新手向] CVE-2018-4233 safari webkit漏洞 不完全 复现笔记
发表于:
2019-1-29 10:48
8790
[原创][新手向] CVE-2018-4233 safari webkit漏洞 不完全 复现笔记
这是在safari上复现webkit漏洞时的一篇水文,最终在safari版本 12.0.1 (14606.2.104.1.1)
上复现,尝试修改shellcode RCE时,发现不行。最后调试了一下发现是由于safari的sandbox。顺带学习了websocket以及lldb的一些使用方法。
漏洞复现需要使用websocket协议,访问5000端口。websocked是一个websocket标准的开源实现。为什么要有websoket协议呢?因为HTTP是无状态协议,服务器不能主动向client推送信息。但是建立了websocket协议后,server就可以主动向client推消息了。
websocketed是websocket的一个实现,macOS上的安装方法很简单:
安装完成后,下载exp并运行:
更多websocket相关资料:
打开url后,我们发现漏洞复现了,泄漏了相关的地址,并且打印了Hello World from Assembly! 这个汇编中写的字符串。
其中shellcode似乎是放到0x115ee7e40这个地址去了,使用 vmmap <pid> 查看泄漏的地址信息:
如果需要修改make.py中的shellcode,需要修改汇编代码,需要安装gobjcoopy工具
编写macos 反弹shell的shellcode,测试通过后修改WebKit-RegEx-Exploit中的stage2/make.py尝试在其中增加自己的汇编代码。shellcode脚本如下:
其中执行的命令是用python脚本生成的:
但是编译之后,使用safari打开就crash了。
shellcode更多资料参考:
原始的exploit汇编没问题。但是我修改了exploit为反弹 shell的就不行了。因此尝试使用lldb挂上去看下原因(注意如果想要用lldb attach safari,需要先关闭SIP),但是不知道如何下断点,在shellcode中使用0xcc也无法断下。问了作者知道了原因:
Your shellcode won't work because Safari is sandboxed, you first need a Sandbox Escape to run shell commands. The reason why you get the crash is that the syscall fails and you're not returning a valid value from your shellcode. If you want to debug using lldb, you need to attach to WebContent, not Safari. WebContent is the Process that runs JavaScript and displays the website. Note that there will be one WebContent process for each open Tab.
后来我仔细看了代码,发现stage2种输出了相关字符串并不是调用syscall输出的,而是和pwn.html中的代码有关系。如果shellcode中增加了syscall会怎么样呢?用lldb attach webview,并在shellcode中增加execve的syscall后发现,确实是执行到syscall时就挂了。
由于这个没有sandbox escape,测试了一下saelo @cve-2018-4233的exp,同样也是没有sandbox escape的。后续安装macOS老版本,测试了一下他的pwn2own2018的exploit chain,也没有打成功。以后搞safari的时候再细细研究吧!
补充一下lldb常用的命令
lldb 更多资料参考:
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2019-1-29 10:49
被心许雪编辑
,原因: