【安全测试工具】Drozer介绍及使用

14 篇文章 3 订阅
12 篇文章 1 订阅
本文详细介绍了使用Drozer进行Android安全测试的过程,包括Drozer的安装、连接设备、常见命令的使用,以及针对活动(Activities)、广播接收器(Broadcast Receivers)、内容提供者(Content Providers)和服务(Services)的攻击面分析。通过Drozer,作者发现了多个未校验组件参数的安全漏洞,并进行了修复。
摘要由CSDN通过智能技术生成

一、前言:

    项目测试间隙调研了下移动APP安全测试,发现不少文档都提到了Drozer这款安全测试工具,遂拿来学习并投入项目中实践下。

二、Drozer介绍:

    Drozer是一款针对Android的安全测试框架,分为安装在PC端的控制台、安装在终端上的代理APP两部分。可以利用APP的IPC通信,动态的发现被测试APP的安全风险。

三、安装

1、官方下载地址

https://labs.mwrinfosecurity.com/tools/drozer/

2、安装比较简单,不介绍了。

    中间有个java环境变量的小插曲说明下,如果运行drozer console connect后,报“ Could not find java. Please ensure that it is install ed and on your PATH. ”检查下自己本地的java环境变量是否有问题,如果设置正确,但是drozer还是找不到的话,Windows用户在“c:\users\用户名”文件夹下新建.drozer_config文件,文件内容为:

[executables]

java=C:\Program Files\Java\jdk1.7.0_79\bin\java.exe

javac=C:\Program Files\Java\jdk1.7.0_79\bin\javac.exe

(路径为自己的jdk目录)

    Windows文件名不能为空,导致不能新建.drozer_config文件的话,cmd下用命令rename 1.drozer_config .drozer_config改文件名为空。

四、界面介绍及连接设备

1、页面展示:

PC上的控制台,用的是免费社区版,所以控制台没有UI界面。

手机上的代理APP页面展示:

2、连接设备:

首先运行设备上的Drozer代理并启动守护服务,然后运行下面的命令做端口转发:

adb forward tcp:31415 tcp:31415

使用下面的命令建立链接:

drozer console connect

连接成功后,控制台显示dz>

五、常用命令介绍:

1、查找所有的攻击面:

dz> run app.package.attacksurface com.example

输出结果:

Attack Surface:

  6 activities exported  暴露的控件接口

  17 broadcast receivers exported     暴露的广播接收器

  0 content providers exported  数据提供接口,数据泄漏

  3 services exported  service服务接口

    is debuggable

解释:

  • 应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信。在Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据
  • BroadcastReceive广播接收器:应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息,或者用NotificationManager 来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
  • content providers exported:android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。这些数据可以存储在文件系统中、在一个SQLite数据库、或以任何其他合理的方式, 其他应用可以通过ContentResolver类(见ContentProviderAccessApp例子)从该内容提供者中获取或存入数据.(相当于在应用外包了一层壳), 只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处:统一数据访问方式。
  • service服务接口,一般常驻,连接上公开的service后,可通过service提供的接口调起其他activity等。

检测到攻击面,可进行的攻击:

  • activities exported  越权攻击,发送伪造消息等;
  • broadcast receivers exported 发送恶意广播,伪造广播消息,越权攻击等;
  • content providers exported 数据泄漏,SQL注入等;
  • services exported 越权攻击,服务拒绝,权限提升等;

2.1、intent介绍:

  • 可以将Intent理解为不同组件之间通信的“媒介”专门提供组件互相调用的相关信息。Intent可以启动一个Activity,也可以启动一个Service,还可以发起一个广播Broadcasts。
  • Intent有以下几个属性: 动作(Action),数据(Data),分类(Category),类型(Type),组件(Compent)以及扩展信(Extra)。其中最常用的是Action属性和Data属性。通过Drozer完整的发送intent消息命令格式为:

run app.activity.start [-h] [–action ACTION] [–category CATEGORY [CATEGORY …]] [–component PACKAGE COMPONENT] [–data-uri DATA_URI][–extra TYPE KEY VALUE] [–flags FLAGS [FLAGS …]] [–mimetype MIMETYPE]

2.2、对activity尝试进行攻击:

  • 来一把越权攻击:绕过登录页直接拉activity,看到有activity启动不需要权限,尝试用drozer直接拉起这些activity看看。

    run  app.activity.start  --component  com.example   com.example.activity.WelcomeActivity  

  • 发送伪造的残缺消息,刻意制造不完整的intent,发送给对应的activity。

run app.activity.start --action android.intent.action.SEND --component com.example com.example.activity.share.ShareToSessionActivity

intent中缺少extra部分

3、查看暴露的广播组件接口

run app.broadcast.info -a   com.example  -i  获取暴露的广播组件信息

尝试拒绝服务攻击,向广播组件发送不完整intent(空action或空extras)

run app.broadcast.send --component com.example com.example.sdk.communication.AppRegisterReceiver --extra string TEXT "hahahaha"

传递空的action

4、查看数据接口

如果有暴露的content组件接口,可能存在:

数据泄漏问题;

--直接访问URI获取敏感信息;--目录遍历;

构造特殊的URI进行SQL注入;

获取content provider的信息

dz> run app.provider.info -a  com.example  -i

使用drozer的scanner模块去猜测可能存在的URIs

dz> run scanner.provider.finduris -a  com.example

检测可注入的URI的注入点

dz> run scanner.provider.injection  -a  com.example

SQL注入的方式,如果上一步有拿到可注入的URI

获取某个表(如Key)中的数据:run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM Key;--"

5、查找service服务接口

获取公开的service服务接口信息

dz> run app.service.info -a  com.example -i

直接启动服务看下

run app.service.start --action com.example.plugin.game.service.GameDownloadService --component  com.example com.example.plugin.game.service.GameDownloadService

 

6、文件操作

  • 安装minimal来可以获取暂时的root权限
  • run tools.setup.minimalsu

  • 进入shell模式,查看/data/data/com.example下是否有明文存储敏感信息
  • 在AndroidManifest.xml中android:allowBackup字段是否为true。当这个标志被设置为true或不设置该标志时应用程序数据可以备份和恢复,adb调试备份允许恶意攻击者复制应用程序数据。有名的栗子新浪微博android客户端越权泄密事件。

六、总结:

    使用Drozer在项目中实践后,有发现多处不校验导出组件(activity,broadcast,service等)传递参数导致的安全漏洞,反馈给开发后进行排查,现已经全部修复。

drozer是一款针对Android平台开发的安全工具,旨在帮助开发者和安全研究人员发现并解决安卓应用中的安全漏洞。 首先,drozer可以扫描目标应用程序中的漏洞。它能够自动化地检测存在的漏洞,并提供详细的报告,包含可导致应用程序被攻击的风险点。这可以帮助开发者及时修复漏洞,增强应用程序的安全性。 其次,drozer还能够帮助用户进行应用程序的渗透测试。用户可以利用drozer中提供的各种模块,对目标应用程序进行漏洞攻击,以测试其安全性。例如,用户可以使用drozer模块对应用程序进行身份验证绕过攻击、文件包含攻击、SQL注入攻击等。这有助于评估应用程序的安全性能,并提供修补建议。 此外,drozer还提供了RPC通信机制,使得用户可以在PC端远程操控通过drozer安装在目标设备上的agent应用程序。用户可以通过drozer的命令行界面,实时监控目标设备的应用程序,进行更全面的安全测试和漏洞挖掘。 需要注意的是,drozer是一个强大而复杂的安全工具,使用时需要谨慎。如果使用不当,可能会导致目标设备或应用程序出现问题。因此,在使用之前,建议用户仔细阅读drozer的文档和教程,并遵循正确的操作指南。 总而言之,drozer是一款非常有用的安全工具,可以帮助用户发现和解决Android应用程序中的安全漏洞。无论是开发者还是安全研究人员,都可以借助drozer提高Android应用程序的安全性,并保护用户的数据和隐私。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值