导语:前面的五篇文章啰嗦了这么多,讲了很多基础知识,现在,就让我们开始渗透的乐趣吧。
前面啰嗦了这么多,讲了很多基础知识,现在,就让我们开始渗透的乐趣吧。
根据Owasp,漏洞共分为十大类。
M1—平台使用不当
M2—不安全的数据存储
M3—不安全的通信
M4—不安全的身份验证
M5—不安全的密码
M6—不安全的授权
M7—客户端代码质量问题
M8—代码篡改
M9—逆向工程
M10—附加功能
漏洞应用程序实战合集:
https://pentestlab.blog/2016/11/07/list-of-vulnerable-android-applications/
本文中,我们将使用不安全的银行App来演示漏洞。
信息收集
我们可以使用Drozer来收集安卓APP的信息。
命令 – run app.package.info –a <.apk name>
详细信息:UID,GID,用户权限,数据目录,Apk路径,共享库,共享用户,版本和应用名称。
攻击安卓组件
我已经在安卓应用程序渗透测试(五)中介绍了所有的安卓组件,Activities(活动),Services(服务),Content Provider(内容提供商)和Broadcast Receiver(广播接收器)。现在我们就来找找它们的漏洞以及它们在应用程序是如何容易被攻击的。
攻击Activities
exported activities(导出活动)
导出活动(exported=true)是在同一台设备上可以被其他App访问的那些活动。绝大多数是在安卓上进行身份验证后。
用户都知道,当进行认证之后,应用程序会切换到另一个活动,例如,音乐播放器登陆后的播放列表。但是,开发者保留了这些导出活动,甚至没有进行自定义权限。
在安卓manifest文件中,活动可以通过导出值或者使用drozer命令来获取。
获取导出活动的相关信息:
命令– run App.activity.info –a <.apk name>
manifest文件
<activity android:label=”@7F070040″ android:name=”com.android.insecurebankv2.LoginActivity”><intent-filter><action android:name=”android.intent.action.MAIN”><activity android:label=”@7F070040″ android:name=”com.android.insecurebankv2.LoginActivity”><intent-filter><action android:name=”android.intent.action.MAIN”> </action><category android:name=”android.intent.category.LAUNCHER”> </category></intent-filter></activity><activity android:label=”@7F070057″ android:name=”com.android.insecurebankv2.FilePrefActivity” android:windowSoftInputMode=”0x00000034″> </activity><activity android:label=”@7F070054″ android:name=”com.android.insecurebankv2.DoLogin”> </activity><activity android:label=”@7F07005B” android:name=”com.android.insecurebankv2.PostLogin” android:exported=”true”> </activity><activity android:label=”@7F07005E” android:name=”com.android.insecurebankv2.WrongLogin”> </activity><activity android:label=”@7F070055″ android:name=”com.android.insecurebankv2.DoTransfer” android:exported=”true”> </activity><activity android:label=”@7F07005D” android:name=”com.android.insecurebankv2.ViewStatement” android:exported=”true”> </activity>
Drozer:
由于权限未定义或登录后的活动的导出值为true,我们可以使用它来绕过身份验证。
我们尝试使用Drozer在没有凭证的情况下来调用登陆后的活动。
比如:Dotransfer(转账),Viewstatement(查看状态),Changepassword(修改密码)。
drozer命令 –run app.activity.start –component <.apkname>< activityname>
run app.activity.start –component com.android.insecurebankv2 com.android.insecurebankv2.DoTransfer
之前:
之后:
使用恶意App调用其他应用程序的活动
调用其他应用程序活动的另一种方法是编写恶意应用程序并为它提供你想要启动的安装包的名字和活动。在我们的案例中,恶意应用程序不需要任何权限来启动存在漏洞应用程序的“登录后”活动。
保护活动组件
设置Android:exported属性值为false。
在我们的应用程序的AndroidManifest.XML文件中,我们应该将以下属性添加到要保护的应用程序组件中。在我们的案例中,应该保护登录后的活动不被任意调用。
<activity android: label=”@7F070055″ android: name=”com.android.insecurebankv2.DoTransfer” android: exported=”false“></activity>
True:provider可供其他应用程序使用。任何应用程序都可以使用provider的内容URI来访问它,具体取决于为provider指定的权限。
False:provider不可用于其他应用程序。设置android:exported =“false”以限制对应用程序provider的访问。只有与provider具有相同用户ID(UID)的应用程序才能访问它。
上面的代码严格限制了除了当前App之外的其他App或任何系统组件来访问这个activities。只有与当前App具有相同用户ID(uid)的App才能访问这个活动。
自定义权限来限制访问
android:exported属性值并不是限制activities暴露给其他App的唯一方法。我们还可以通过为activities设置自定义权限来强制实施基于权限的限制。如果开发人员想要对他的App组件设置权限,只允许那些具有权限的App才能访问,这种自定义权限的方法是非常奏效的。
敬请期待安卓应用程序渗透测试七
其他部分的链接如下: