通过暴露的组件攻击安卓应用

简介

在这个博客中,我们将介绍如何使用暴露的组件对android应用程序进行攻击。

第一件事,要注意什么是组件?组件是系统或用户可以通过其与应用程序交互的一个入口点,一些组件依赖于其他组件。

有四种不同类型的应用程序组件:

  • Activity:Activity是让用户与应用程序互动的第一件事。它表示具有用户界面的单个屏幕。例如,应用程序第一个Activity是登录页面的密码输入,第二个Activity显示已保存到应用程序中的密码列表。因此,如果应用允许,不同的应用可以启动任何一个Activity。例如,相机应用程序可以在组成新邮件的电子邮件应用程序中启动Activity,以允许用户共享照片。
  • Service:服务是一个通用的入口点,用于保持应用在后台运行的各种原因。它是在后台运行以执行长时间运行的操作或为远程进程执行工作的组件。例如音乐播放器。
  • Broadcast receivers :Broadcast receivers简单地响应来自其他应用或系统的消息。例如 ,应用程序还可以发起广播,让其他应用程序知道某些数据已被下载到设备上,并且可供他们使用,因此这是广播接收将拦截该通信并将启动适当的动作。许多广播源自该系统 – 例如,广播宣告屏幕已经关闭,电池电量不足或被捕获。
  • Content Providers:我们可以简单地理解为“内容提供商被用于在应用程序之间共享数据”。 通过内容提供商,如果内容提供商允许,其他应用程序可以查询或修改数据。例如,Android系统提供管理用户联系信息的内容提供商。因此,具有适当权限的任何应用程序都可以查询内容提供者,例如ContactsContract.Data, 读取和写入有关特定人员的信息。

Intents:Intent用于调用组件。主要用于:

  • 开始服务
  • 启动活动
  • 显示网页
  • 显示联系人列表
  • 广播消息
  • 拨打电话等

测试:

我正在使用易受攻击的应用程序来显示这些漏洞。

Sieve:

是一个“密码管理器”应用程序,展示了MWR实验室创建的一些常见的Android漏洞。

开始

我们将使用apktool获取清单文件:

1

2

现在,您可以分析清单文件并列出所有活动,以通过活动检查暴露的数据并探索应用程序功能。一些时间活动通过调用活动而不直接提供敏感数据的凭据来找出用户敏感数据。Activity Manager (am) : 在adb shell中,您可以使用活动管理器(am)工具发出命令,以执行各种系统操作,例如启动活动,强制停止进程,广播,修改设备屏幕属性,和更多。

$ adb shell am start -n <package_name>/<activity_name>

我们来调用.PWList / activity并检查保存到应用程序中的密码列表。

3

4

我们可以使用由MWR InfoSecurity开发的Drozer半自动框架帮助我们提取应用程序的暴露组件并对应用程序执行攻击。

Drozer使用安装在设备上的代理(APK),并提供一个用于执行命令的shell。首先,从

MWR Labs网站

下载drozer代理,并将其安装在经过测试的设备/模拟器上。安装代理后,启动应用程序并启动代理。

之后,设置端口转发,使您的PC可以连接到模拟器内或代理设备上,打开代理的TCP通道:

$ adb forward tcp:31415 tcp:31415

然后启动drozer控制台。

$ drozer console connect

5

使用drozer命令搜索目标应用程序包名称。

6

检查应用程序攻击面。

7

我们可以看到有3个活动,2个内容提供商和2个服务出口。另外,我们可以分析所有出口的攻击面。

让我们从活动开始:

8

有三个包被列出。让我们检查隐藏的活动

9

在图片中,我们可以看到一些可能会暴露用户敏感信息的隐藏活动。

执行以下命令将启动一个活动。

10

开发不安全的内容提供商

内容提供者问题的一个根本原因是它们在清单声明中没有被明确地标记为exported=”false”

因为它们遵循与其他组件相同的默认导出行为。

让浏览筛选应用程序的内容提供商尝试了解漏洞。

11

这表明两个内容提供商对于要

读取或写入的用户不需要任何权限。但是,DBContentProvider要求用户有权

读/写/ Keys路径。

让我们检查内容URI。

12

使用Drozer的URI列表

13

新发现的路径是/ Passwords。这没有任何保护它的权限,并且查询此URI会导致存储在此密码管理器中的所有帐户的披露。以下是查询此内容URI的命令:

14

内容提供商泄漏了所有存储的密码,但应用程序的开发人员对该密码字段进行了加密或模糊处理。

扫描SQL注入,并尝试找出是否可以从内容提供商中提取信息。

15

看起来像projection中的注入。我们可以通过在projection中提供单引号来确认sql注入,这会导致SQLite接收到的查询结构中的错误。

16

您现在可以使用此注入点通过使用来自sqlite_master其中type =’table’的*的投影来查找同一SQLite数据库中的所有表。

17

让我们从密钥表中提取数据

18

伟这里我们得到了应用程序的登录密码和pin。这显示了密码管理器的主密码和用于保护数据的pin。

结论:

在这篇文章中,我们将通过android应用程序组件和技术来利用它们。我们也了解了如何利用Drozer框架来执行Android应用程序的安全评估。

 

*参考来源:anandsecurity,转载请注明来自MottoIN

原创文章,作者:Jarry,如若转载,请注明出处:http://www.mottoin.com/article/terminal/101463.html

发表评论

登录后才能评论

联系我们

021-62666911

在线咨询:点击这里给我发消息

邮件:root@mottoin.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code