目录

一、Drozer 简介

1.1 特点

二、环境部署

2.1 环境要求

2.2 安装 drozer

2..3 安装依赖库

2.4 设备安装

2.5 连接设备

三、安全测试

App攻击面分析

四、Activity 组件暴露

Activity 简介

Activity 组件暴露概述

危害描述

修复建议

项目实操

第一步先查看对外的 activity 组件信息

第二步越权漏洞检测

五、BroadcastReceiver 组件暴露

Broadcast 简介

BroadcastReceiver 漏洞概况

风险描述

危害描述

修复建议

项目实操

获取 Broadcast 信息

执行 broadcast 攻击

六、Service 组件

service 简介

Service 组件暴露

风险描述

危害描述

修复建议

AndroidManifest 检测

项目实操

七、ContentProvider 组件

ContentProvider 简介

ContentProvider 组件暴露

风险描述

危害描述

修复建议

项目实操

获取 Content Provider 与 URI

执行攻击

检查是否有 sql 注入

检查是否存在遍历文件的漏洞


一、Drozer 简介

Drozer是MWR Labs开发的一款Android安全测试框架。是目前最好的Android安全测试工具之一。其官方文档说道:“Drozer允许你一一个普通android应用的身份与其他应用和操作系统交互。”在Web世界已经有了许多安全测试工具了,我们只需要给出一个目标,这些工具就会自动为我们安全测试报告。但Drozer与这样的自动化扫描器不同,Drozer是一种交互式的安全测试工具。使用Drozer进行安全测试,用户在自己的工作站上输入命令,Drozer会将命令发送到Android设备上的代理程序执行。其官方文档说道:“Drozer允许你一个普通android应用的身份与其他应用和操作系统交互。

1.1 

*更快的 Android安全评估:drozer 可以大大缩减 Android 安全评估的耗时,通过攻击测试暴露 Android APP 的漏洞。

*支持真机模拟器:drozer 运行在Android 模拟器和真实设备上。

* 自动化和扩展: drozer 有很多扩展模块,可以发现更多Android 安全问题。

二、环境部署

2.1 环境要求

dk1.8

python2.7

Android SDK环境

*Genymotion模拟器

2.2 安装 drozer

1、下载地址:Drozer下载对应的系统版 本即可Drozer

2、装时 Python 依赖路径选择,如果安装了 python3 需要切换到 Python2 路径

2..3 安装依赖库

1. 安装 VCForPython27.msi                                              https://www.microsoft.com/en-us/download/details.aspx?id=44266 由于 Twisted 此文件有依赖,所以需要安装。

2. 安装 protobuf pyOpenSSL Twisted service_ identity 需要使用 Python2 pip 安装。

C:\Python27\Scripts

pip2 instal l protobuf pyOpenSSL  Twisted service_ identity

3. 如果安装上述的包出现超时报错,如下所示,可以切换到国内源如中科大源。

ReadTimeoutError: HTTPSConnectionPool (host='fi les.pythonhosted.org', port=443) : Read t imed out.

4. 替换源之后的命令如下:

pip2 instal l protobuf pyOpenSSL Twisted service_ identity- i

https:/pypi.mirors.ustc.edu.cn/simple/

5. 打开 cmd 进入 Python2 的目录,输入命令 drozer 看到如下命令说明安装成功。

2.4 设备安装

1、下载安装 agent:

链接:https://pan.baidu.com/s/1MA1LYn5iXP3hfAWdBNCaHw?pwd=abcd 
提取码:abcd

2、到手机打开启 agent,如下图右下角按钮显示为开启状态 (如果显示为关闭,在其上

击将其切换为开启即可),

3、点击底部 Embedded Server 然后点击顶部开关 Disabled 使其变为 Enabled

2.5 连接设备

1、打开 cmd 命令窗口,依次执行如下命令

* 设置端口转发:adb forward tcp:31415 tcp:31415

*连接设备 :drozer console connect

看到如上显示,说明启动成功,下一步则可以进行测试。如果想提出drozer 命令模式,则 入指令 exit 即可退出。

三、安全测试

App攻击面分析

分析 Android 四大组件是否能被其他的的应用程序调用。

dz> run app.package.attacksurface+包名

【这里用这个包做示范com.android.insecurebankv2

结果显示了潜在可以利用的组件个数:exported 表示组件可以被其他 App使用is debuggable 我们可以用adb 绑定一个调试器到进程。

四、Activity 组件暴露

Activity 简介

用程序(就是我们手机上运行的app)中,一个 Activity 通常就是一个单独的界面,它上面可以显示一些控件也可以监听 并处理用户的事做出响应。 Activity 之间通过 Intent 进行通信。在 Intent 的描述结构中, 两个最重要的部分:action  action 对应的数据

Activity 组件暴露概述

Activity 组件的属性 exported 被设置为 true 或是未设置 exported 值但 Intent-filter 不为空时, activity 被认是导出的,可通过设置相应的 Intent 唤起 activity查看下反编译出的 AndroidManifest.xml 文件,可看到将 activity  exported 设置为 true 明存在被导出的分险

危害描

黑客可能构造恶意数据针对导出activity 组件实施越权攻击

复建议

如果组不需要与其他 app 共享数据或交互,请将 AndroidManifest.xml 配置文件中设置该组 件为 exported=  “False 。如果组件需要与其他 app 共享数据或交互,  请对组件进行权限 控制和参数校验

项目实操

我们挑选一个apk测试应用:InsecureBankv2

下载地址:https://pan.baidu.com/s/1d4jJG58aTk9xnsiizvTFzw?pwd=abcd 
提取码:abcd

供安全爱好者和开发人员 过测试此易受攻击的应用程序来学习Android 不安全性。它的后端服务器组件是用 python 编写的。它与 Python2 兼容。

注意:电脑上安装了杀毒软件,会将该 apk 视为病毒,忽略就好。

https://github.com/dineshshetty/Android-InsecureBankv2/releases选择最新版本安 下载即可。

第一步先查看对外的 activity 组件信息

使用命令:runapp.activity. info-a+包名可以查看对外的 activity组件信息。

操作 命令:run app.activity.info -a com.android.insecurebankv2

Package: com.android.insecurebankv2

com.android.insecurebankv2.LoginActivity

Permiss ion: nul l

com.android.insecurebankv2.PostLogin

Permiss ion: nul l

com.android.insecurebankv2.DoTransfer

Permiss ion: nul l

com.android.insecurebankv2.ViewStatement

Permiss ion: nul l

com.android.insecurebankv2.ChangePassword

Permiss ion: nul l

第二步权漏洞检测

通过命令 run app.activity.start 调用 activity 组件

命令:run app.activity.start--component 包名 Activity 

命令:run app.activity.start--component com.xxxx.sample com.xxx.xxxxx.WXEntryActivity

我们如果绕过登录界面导致可直接访问,说明存在越权漏洞。

操作命令:run app.activity.start--component com.android. insecurebankv2 com.android.insecurebankv2.PostLogin

这里很显然直接跳过了登录界面进入到该页面

五、BroadcastReceiver 组件暴露

Broadcast 简介

BroadcastReceiver 息组件,应用可以使用它对外部事件进行过滤,只对特定的外部事件(如 当电话呼入时,或者数据网络可用时)进行接收并做出响应。消息组件没有用户界面。然 可以启动一个 activity  serice 来响应它们收到的信息,或者用 NotificationManager 通知用户。

通知以用很多种方式来吸引用户的注意力──闪动呼吸灯、震动、播放声音等。一般来说 在状态栏上放一个持久的图标,用户可以打开它并获取消息。

BroadcastReceiver 漏洞概

风险描述

BroadcastReceiver 组件的属性 exported 被设置为 true 或是未设置 exported 值但 intent-filter 不为空时,BroadcastReceiver 被认为是导出的

危害描

导出的消息组件可以导致数据泄漏或者是越权。

复建议

如果组件不需要与其他 app 共享数据或交互,请将 AndroidManifest.xml 配置文件中设置该组 件为 exported=  “False 。如果组件需要与其他 app 共享数据或交互,  请对组件进行权限 控制和参数校验

项目实操

拒绝服务攻击检测测试包 FourGoats  OWASP的项目,集成了一堆漏洞的 APK,代码未经过混 淆与密,可以反编译后看到比较清晰的逻辑,分析漏洞成因。虽然是许多年前的项目,很 洞也早已消失,但对于入门的新手来说还是有一定的价值的。

Apk 下载地址:https://pan.baidu.com/s/1DuDGn04nMu3hUXacGFTwVQ?pwd=abcd 
提取码:abcd

获取 Broadcast 信息

5.1查看 Broadcast 具体信息,找到广播的类名,以及注册的 Intent 的动作。

命令:run app.broadcast.info -a org.owasp.goatdroid.fourgoats -i

Package: org.owasp.goatdroid.fourgoats
  org.owasp.goatdroid.fourgoats.broadcastreceivers.SendSMSNowReceiver
    Intent Filter:
      Actions:
        - org.owasp.goatdroid.fourgoats.SOCIAL_SMS
    Permission: null

5.2查看编译的 AndroidManifest.xml 文件,可看到将 receiver  exported 设置未进行设 。说明存在越权问题,可发送恶意广播,伪造消息等等。

5.3反编译 apk 文件,然后查看 broadcast 的源代码,从中可以看到短信发送需要的关键 字:phoneNumber  message

以上三步我们获取到的信息有:

action 动作名称为:org.owasp.goatdroid.fourgoats.SOCIAL_SMS

*component 组件名称为:org.owasp.goatdroid.fourgoats.broadcastreceivers.SendSMSNowReceiver

*intent 意图传递的参数为:phoneNumber  message

执行 broadcast 攻击

1. 根据上面掌握的信息,就可以构造短信发送的广播,在 drozer 中使用如下命令

run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --extra string phoneNumber 8618144775569 --extra string message hacked!

2. 面命令表示向手机号为 10010 的用户发送短信,内容为:hacked!,同时在 App界面 可以 Toast 提示 :Your text message has been send!

3. 尝试拒绝服务攻击检测,向广播组件发送不完整 intent 使用空 extras,可看到应用 止运行。

命令:run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS

六、Service 组件

service 简介

Service 是一段生命周期的没有用户界面的程序,可以用来开发如监控类程序。  比如一个 正在播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中有多个 activity,让 使用可以选择歌曲并播放歌曲。然而音乐续播这个功能并没有对应的 activity,因为用户 然会认为在切换到其它界面时音乐应该还在后台播放的。

在这个例子中,媒体播放器这个 activity 会使用 Context.startService()来启动一个 service 而可以在后台保持音乐的播放。同时,系统也将保持这个 service 一直执行,直到这个  service 运行结束。

另外,们还可以通过使用 Context.bindService()方法,连接到一个 service 上 (如果这个 service 还没有运行将启动它) 。当连接到一个 service 之后,我们还可以使用 service 提供的 接口它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、切换等操作。

Service 组件暴

风险描述

Service 组件的属性 exported 被设置为 true 或是未设置 exported 值但 Intent-Filter 不为空时, Service 认为是导出的,可通过设置相应的 Intent 唤起 Service

危害描

可能构造恶意数据针对导出Service 组件实施越权攻击。

复建议

如果组件不需要与其他 app 共享数据或交互,请将 AndroidManifest.xml 配置文件中设置该组 件为 exported=  “False 。如果组件需要与其他 app享数据或交互,  请对组件进行权限 控制和参数校验

AndroidManifest 检测

我们使用之前的测试应用 FourGoats.apk, 查看反编译的 AndroidManifest.xml 文件,可以看出 : intent-filter 不为空且未将 exported 设置为 false,所以 services 默认是导出 ,org.owasp.fourgoats.goatdroid.LocationService 服务被导出,不需要任何权限。 这意味着恶意应用程序可以通过FourGoats 应用程序访问设备的位置

指令:run app.service.info-a[pkg]可以查看对外暴露的 service 组件。

dz> run app.service.info -a org.owasp.goatdroid.fourgoats
Package: org.owasp.goatdroid.fourgoats
  org.owasp.goatdroid.fourgoats.services.LocationService
    Permission: null

项目实操

调用服务组件进行拒绝服务攻击

使命令 run app.service.start--action服务名 --component包名 服务名

我们可以对被导出的  org.owasp.goatdroid.fourgoats.services.LocationService 执行攻击。

命令:run app.service.start --action org.owasp.goatdroid.fourgoats.services.LocationService --component org.owasp.goatdroid.fourgoats org.owasp.goatdroid.fourgoats.services.LocationService

执行完成之后,可以看到App 直接崩溃。Android 应用使用 Intent 机制在组件之间传递数据 应用在使用 getIntent(),getAction(),Intent.getXXXExtra()获取到空数据、异常或者畸形 数据时没有进行异常捕获,应用就会发生 Crash,应用不可使用 (本地拒绝服务) 。恶意应用 通过向受害者应用发送此类空数据、异常或者畸形数据从而使应用产生本地拒绝服务。  当应被恶意应用攻击时,本地拒绝服务一般会导致正在运行的应用崩溃,首先影响用户体 其次影响到后台的Crash统计数据,另外比较严重的后果是应用如果是系统级的软件, 可能导致手机重启

七、ContentProvider 组件

ContentProvider 简介

Android 平台提供了 Content Provider 使一个应用程序的指定数据集提供给其他应用程序。这 些数据以存储在文件系统中或存在一个 SQLite 数据库。

其他应用可以通过ContentResolver 类从ContentProvider 中获取或存入数据, 只有需要在多 程序间共享数据是才需要 ContentResolver

例如:通讯录数据被多个应用程序使用,必须存储在一个 ContentResolver 中它的好处就是统 数据访问方式。

ContentProvider 组件暴

风险描述

Content Provider 组件的属性 exported 被设置为 true  Android API<=16 时,Content Provider 被认为是导出的

危害描

客可能访问到应用本身不想共享的数据或文件。

复建议

如果组件不要与其他 app共享数据或交互,请将 AndroidManifest.xml 配置文件中设置该组 件为 exported=  “False 。如果组件需要与其他 app享数据或交互,  请对组件进行权限 制和参数校验。

项目实操

这里我们使用 drozer 官方提供的测试应用 sieve 进行测试,这是一个密码管理工具,是官 展示常见安卓应用漏洞的应用。

载地址:sieve.apk

https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk

获取 Content Provider  URI

1.首先获取 Content Provider 信息,命令如下:

run app.provider.info -a com.mwr.example.sieve

z> run app.provider.info -a com.mwr.example.sieve
ackage: com.mwr.example.sieve
 Authority: com.mwr.example.sieve.DBContentProvider
   Read Permission: null
   Write Permission: null
   Content Provider: com.mwr.example.sieve.DBContentProvider
   Multiprocess Allowed: True
   Grant Uri Permissions: False
   Path Permissions:
     Path: /Keys
       Type: PATTERN_LITERAL
       Read Permission: com.mwr.example.sieve.READ_KEYS
       Write Permission: com.mwr.example.sieve.WRITE_KEYS
 Authority: com.mwr.example.sieve.FileBackupProvider
   Read Permission: null
   Write Permission: null
   Content Provider: com.mwr.example.sieve.FileBackupProvider
   Multiprocess Allowed: True
   Grant Uri Permissions: False

2. 从上面扫描可以看到有 2 Content Provider

com.mwr.examp le.s ieve.DBContentProvider

*com.mwr.examp le.s ieve.Fi leBackupProvider

一个是数据库相关,第二个是文件备份数据相关。

3.获取 URI (统一资源标识符)列表,命令如下:

run scanner.provider.finduris -a com.mwr.example.sieve

dz> run scanner.provider.finduris -a com.mwr.example.sieve
Scanning com.mwr.example.sieve...
Unable to Query  content://com.mwr.example.sieve.DBContentProvider/
Unable to Query  content://com.mwr.example.sieve.FileBackupProvider/
Unable to Query  content://com.mwr.example.sieve.DBContentProvider
Able to Query    content://com.mwr.example.sieve.DBContentProvider/Passwords/
Able to Query    content://com.mwr.example.sieve.DBContentProvider/Keys/
Unable to Query  content://com.mwr.example.sieve.FileBackupProvider
Able to Query    content://com.mwr.example.sieve.DBContentProvider/Passwords
Unable to Query  content://com.mwr.example.sieve.DBContentProvider/Keys

Accessible content URIs:
  content://com.mwr.example.sieve.DBContentProvider/Keys/
  content://com.mwr.example.sieve.DBContentProvider/Passwords
  content://com.mwr.example.sieve.DBContentProvider/Passwords/

4. 根据上面的扫描结果,存在 Accessible content URIs 说明存在注入风险。

行攻击

1. 打开 sieve 应用,输入 password(至少 16 位)和 pin

 2. 我们获取 URI 数据如下所示,即可查到我们输入的 password  pin 的具体值

命令:run app.provider.query  content://com.mwr.example.sieve.DBContentProvider/Keys/

 3. Password 更改时有长度限制,至少 16 位,看起来似乎是比较安全的,可这只是 面上的。

可以使用命令直接修改 password 数据,运行:

命令:

run app.provider.update content://com.mwr.example.sieve.DBContentProvider/Keys/ --selection pin=1234567891234567  --string Password 1234

4. 再次查询时发现密码已经被更改了,并且也不会限制密码的长度为至少 16 位了。

是否有 sql 注入

SQL 注入比较常见的网络攻击方式之一,它不是利用操作系统的 BUG 来实现攻击,而是针 程序员编写时的疏忽,通过 SQL 语句,实现无账号登录甚至篡改数据库等非法操作。

可以使如下命令扫描查询是否存在 SQL 注入

命令:run scanner.provider.injection -a com.mwr.example.sieve

查是否存在遍历文件的漏洞

命令:run scanner.provider.traversal -a com.mwr.example.sieve

安全测试-Drozer安全测试框架实践记录篇相关推荐

  1. MFQPPDCS测试分析和测试设计框架l学习记录

    这几天在学习邰晓梅老师提出的MTQ-PPDCS测试框架,作为嵌入式软件测试从业人员,在测试框架学习过程中结合个人经历过的嵌入式软件测试项目,以思维导图形式梳理邰晓梅老师的框架理论,整理如下,希望通过进 ...

  2. 探索式测试--第六章(实践中的探索式测试)--读书笔记

    本书为James Whittaker编写.本书写的是一种比其他任何缺陷都重要的特殊缺陷:即逃过所有各种检测手段而最终存在于发布产品中的缺陷.本书是作者设计"漫游"这个隐喻来指导软件 ...

  3. Kail Linux渗透测试教程之Recon-NG框架

    Kail Linux渗透测试教程之Recon-NG框架 信息收集 信息收集是网络攻击最重要的阶段之一.要想进行渗透攻击,就需要收集目标的各类信息.收集到的信息越多,攻击成功的概率也就越大.本章将介绍信 ...

  4. 一文知晓浪潮云海OS在SPEC Cloud测试中的调优实践!

    日前,SPEC(Standard Performance Evaluation Corporation,即国际标准性能评测组织)公布了最新 Cloud IaaS 2018 Benchmark 测试成绩 ...

  5. 什么是数据驱动测试?学习创建框架

    数据驱动测试 数据驱动测试是一种软件测试方法,其中测试数据以表或电子表格格式存储.数据驱动的测试允许测试人员输入单个测试脚本,该脚本可以对表中的所有测试数据执行测试,并期望测试输出在同一表中.也称为表 ...

  6. Testin云测试在智能测试领域的探索实践

    现如今,人工智能已无处不在,而随着人工智能的不断发展,各行各业与人工智能的融合也越来越多,智能测试就是其中之一.所谓智能测试,主要是指人工智能相关技术在测试领域的应用,是伴随着人工智能领域的技术突破而 ...

  7. 自动测试如何选择自动化测试框架_机器擅长回归测试,人类善于寻找Bug _Pekka Klärck

    Robot Framework作者建议自动测试如何选择自动化测试框架.软件自动化测试,作为手工测试的替代,越来越受到关注.Pekka Klrck,作为Robot Framework的创建者和核心开发者 ...

  8. 高效的敏捷测试第十课 BDD实践和深化

    第24讲:BDD 及其自动化实践 在第 20 讲,我介绍了 TDD.UTDD 和 ATDD,主要讨论了需求的可测试性,通过测试先行的敏捷开发理念,比如先建立用户故事的验收标准,来提升需求的质量.今天在 ...

  9. 软件中的易用性设计及测试(三)之实践

    易用性测试 在<软件工程产品质量>质量模型中,提出易用性包含易理解性.易学习性和易操作性:即易用性是指在指定条件下使用时,软件产品被理解.学习.使用和吸引用户的能力.易用性测试包括针对应用 ...

  10. ubuntu下安装PCL并测试(含视频安装过程记录)

    ☛☛ 视频安装过程记录 ☚☚ 原文章的标题为Ubuntu16.04下安装PCL1.7并测试(含视频安装过程记录),但我觉得随着时间的推移,版本会发生改变 1.更新源 sudo apt-get upda ...

最新文章

  1. PHP导入excel到mysql数据库完整代码附效果图
  2. Spring自学教程-ssh整合(六)
  3. 老平台已死,整理个文档留下做纪念
  4. Java黑皮书课后题第7章:*7.1(指定等级)编写一个程序读入学生成绩,得到最高分best,然后根据下面的规则给出等级值。程序提示用户输入学生总数,然后提示用户输入所有的分数,最后显示等级给出结论
  5. token 案例,只是测试,功能并不完善(只是看看token 到底是何方神圣)
  6. python comprehension_python list comprehension在一次迭代中产生两个值
  7. Tips--解决BeatsX开机白灯闪三下无法连接问题(附拆机教程)
  8. (43)生成时钟Generated Clock简介
  9. 使用Anaconda3配置多版本Python虚拟开发环境详细步骤
  10. windows上cppcheck检查不出任何错误解决
  11. FoundationDB 开源文档数据库模型 Document Layer​​​​​​​
  12. Mapoutputcollector的几个方法
  13. 微服务架构实战篇(五):Spring boot2.x + Guava 并使用RateLimiter实现秒杀限流demo
  14. pytorch minist
  15. linux刷新解析,如何在Linux(和FreeBSD)上刷新DNS解析器缓存
  16. jav中什么是组织java程序_在Java中,开发图形用户界面的程序需要使用一个系统提供的类库,这个类库就是以下的______包。A.jav...
  17. win10系统可以登录微信,但浏览器不能打开网页
  18. yourshelf是什么意思中文_英语shelf的中文是什么意思
  19. python中encode用法_Python中encode()方法的使用简介
  20. CSS3简明教程-1.1.CSS3是什么

热门文章

  1. SQL删除重复数据,仅保留(最新/有效的)一条数据
  2. 用python爬取微信公众号文章
  3. ABBYY最新版本OCR文字图像识别软件v16
  4. python中pip下载过慢问题
  5. 目标检测经典算法集锦
  6. Modbus 调试工具: Modbus poll与Modbus slave下载与使用(上)
  7. mac 安装淘宝镜像 cnpm
  8. 走近openGauss数据库
  9. docker部署java项目_JAVA项目如何通过Docker实现持续部署
  10. vue css下载字体并引入使用