0x00 drozer 简介
drozer,是一款面向 Android 的综合安全评估和攻击框架
drozer (formerly Mercury) is the leading security testing framework for Android.
drozer allows you to search for security vulnerabilities in apps and devices by assuming the role of an app and interacting with the Dalvik VM, other apps’ IPC endpoints and the underlying OS.
drozer provides tools to help you use, share and understand public Android exploits. It helps you to deploy a drozer Agent to a device through exploitation or social engineering. Using weasel (MWR’s advanced exploitation payload) drozer is able to maximise the permissions available to it by installing a full agent, injecting a limited agent into a running process, or connecting a reverse shell to act as a Remote Access Tool (RAT).
drozer is open source software, maintained by MWR InfoSecurity, and can be downloaded from: mwr.to/drozer
以上摘自 drozer 的 README.md —— drozer 的 GitHub 项目页
0x01 下载 SDK Platform-Tools
Platform-Tools 是 Android SDK 的一个组件,里面包含了一些 Android 工具,在本文中我们只需要使用其中的 adb。
有兴趣的同学可以自己去官网看一下adb 介绍
Platform-Tools 下载(安装 Android studio 的时候会默认安装,所以安装过 Android studio 的同学就可以不用安装了。另外,这个网址似乎不能在国内访问~ 所以~ 出国吧~)
本来想在 WSL 中使用 adb 的,但是 WSL 识别 USB 似乎很麻烦,所以我还是选择下载 Windows 版,然后在 WSL 里面多加一条 alias 就一样用了hhhhhh
2019.09.25 更新:WSL2 识别不了 USB,WSL1 之前偶尔能识别来着,但是最近试了好像不行,也不知道是什么原因
0x02 下载及安装 drozer
2019.09.25 更新:发现上面的网站似乎不能用了,不过 GitHub 上还可以下载
我是选择装在我的 Kali WSL 里面了(要是装在 Windows 上貌似不支持自动补全~)
2019.11.23 更新: WSL内直接 apt install 安装的 drozer 在使用 checkjavascriptbridge 模块会出现问题,报错:
global name ‘java_path’ is not defined
按照GitHub上提供的解决方法还是得安装 deb 包
选择下载 deb 包,下载完成后使用命令
dpkg -i <deb_Path>
即可,如果提示安装失败可以使用
sudo apt install -f
来尝试修复依赖
Android 端也在该网址上下载 apk 包,在连接设备成功的情况(可以参考 0x03 节手机端的部分)下直接
adb install <apk_Path>
即可。
P.S. 如果你和我一样是在 WSL 中使用 windows 版的 adb 的话,一定不要忘记你是在使用一个 exe,所以后面得加上 windows 的路径,即把 WSL 自动生成路径前面的/mnt/
删掉,然后再盘符后面加上:
。
0x03 连接前的准备工作
电脑端
我们只需要用 adb 进行端口转发即可
adb forward tcp:31415 tcp:31415
手机端
Android 设备要在开发者模式中打开 Android 调试以启用 ADB 接口
打开后在电脑上使用命令
adb devices
来检测设备是否连接成功,成功的话就会出现下图一样的情况。
连接成功后我们进入 drozer Agent
点击左下角的 “Embedded Server” 即可进入 drozer Server,再点左上角的按钮就可以打开了,效果如下
0x04 使用 drozer 连接测试机
在上一节的准备工作全部完成后我们就能开始进行正式连接了,使用命令
drozer console connect
连接成功的话会出现一个 Android logo
而测试机上的 drozer 会变成这样
0x05 使用 drozer 对组件进行测试
所有的准备工作都结束了,终于可以开始我们的测试了。
P.S. drozer 的提示符为 dz>
所以接下来的命令里面都会出现 dz>
先查看待检测程序的包名
dz> run app.package.list -f <app_name>
再使用
dz> run app.package.info -a <package_name>
来列出应用的一些基本信息,也可以使用
dz> run app.package.attacksurface <package_name>
来获取攻击面
Activity
测试该组件前先关闭待测试 app
dz> run app.activity.info -a <package_name>
得到回显,其中会列出使用组件名,再使用命令
dz> run app.activity.start --component <package_name> <component_name>
执行完毕后手机自动启动该软件,说明 Activity 组件 exported=”true”,如果 app 打开后未响应或出现严重错误,则存在拒绝服务漏洞,也可能可以调起第三方接口。同样的,也可能会产生越权,绕过登录调用的 Activity。
Service
测试前打开app
dz> run app.service.info -a <package_name>
命令和上面差不多~
dz> run app.service.start --component <package_name> <component_name>
若执行命令后 app 崩溃关闭即可证明 Service 存在问题
Broadcast Reciever
测试前先打开待测试 app
dz> run app.broadcast.info -a <package_name>
dz> run app.broadcast.send --component <package_name> --action <action_name>
Content Provider
检测是否存在 SQL 注入
dz> run scanner.provider.injection -a <package_name>
检测是否存在目录遍历
dz> run scanner.provider.traversal -a <package_name>
这两个只要根据回显就能判断是否有漏洞。
0x06 彩蛋! WebView 代码执行检测
进行这项检测之前得先安装 checkjavascriptbridge 模块
dz> module repository create <repository_name>
P.S. <repository_name>
是库的本地路径+库名。
dz> module install jubax.javascript
drozer 会回显
这样就安装完成了,之后就可以使用
dz> run scanner.misc.checkjavascriptbridge -a <package_name>
进行检测,再根据回显判断是否有漏洞。
0x07 参考
- drozer模块的编写及模块动态加载问题研究 - thor
- 利用Drozer进行Android渗透 - zgjx6
- Android项目入门篇 - 红日俱乐部
- 从零开始学Android应用安全测试(Part4) - 鸢尾