导语:广播接收器是一个安卓组件,通过该组件,你可以注册系统事件或应用程序事件。
废话不多说,直奔主题。
攻击广播接收器(broadcst receiver)
广播接收器是一个安卓组件,通过该组件,你可以注册系统事件或应用程序事件。关于广播接收器的更多内容,你可以看看安卓应用程序渗透测试五。
我们先来检查一下安卓manifest文件
广播接收器通常都是以下列格式注册的,在安卓manifest文件中,我们可以看到broadcast的导出值为真,即 exported value=true。
因为接收器可以被导出,所以这段代码并不安全,如图:
传递给广播接收器的参数,在下图中我们可以很清楚的看到:
我们的目的是发送欺骗性广播intents,看看应用程序是不是会接受。如果会接受的话,我们将利用这个app使用虚假广播向任意手机号发送SMS消息。
攻击脆弱的广播接收器
现在我们就尝试着向上面的接收器发送欺骗性的广播。
使用安卓调试桥(adb)中的活动管理器(am)工具。
使用adb
1.进入设备的adb shell,并输入以下命令来发送欺骗性广播。
2.返回到“平台工具”(platform-tools)文件夹,然后输入以下命令
./adb shell
3.在shell中输入下列命令:
am broadcast -a theBroadcast -n com.android.insecurebankv2/com.android.insecurebankv2.MyBroadCastReceiver –es phonenumber 5554 –es newpass [email protected]!
4.回到模拟器,查看“messages”。上面输入的命令自动调用了前面提到的广播接收器并发送了一条信息,信息内容是密码,如图:
现在,一个广播事件已经在后台发送。由于应用程序并不检查输入源,所以在无需用户操作的情况下,就能发送一条SMS消息到模拟器5554。
接下来看看如何保护应用程序的安全。
保护应用程序的措施
设置Android:exported属性值为false。
在应用程序的androidmanifest.xml文件中,我们应该将以下属性添加到要保护的接收器中。
Limiting access to custom permissions
意思是限制对自定义权限的访问。
我们也可以为每个接收器定义自定义权限,并强制执行基于权限的限制。如果开发者想要限制哪些应用程序才有权限来访问他的app组件,这个方法会非常有效。
我们也需要在Androidmanifest.xml文件中设置“android.permission.RECEIVE_SMS”权限,因为如果不设置的话,那么任何其他app都可以使用“android.provider.Telephony.SMS_RECEIVED“这个action来监听Receive SMS event(接收SMS事件)。
安卓渗透测试系列其他文章如下: