移动安全基础 —— 使用 drozer 对 Android 组件进行检测 06 Jan 2019 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 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
即可,如果提示安装失败可以使用
sudo apt install -f
来尝试修复依赖
Android 端也在该网址上下载 apk 包,在连接设备成功的情况(可以参考 0x03 节手机端的部分)下直接
adb install
即可。
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
再使用
dz> run app.package.info -a
来列出应用的一些基本信息,也可以使用
dz> run app.package.attacksurface
来获取攻击面
Activity 测试该组件前先关闭待测试 app
dz> run app.activity.info -a
得到回显,其中会列出使用组件名,再使用命令
dz> run app.activity.start --component
执行完毕后手机自动启动该软件,说明 Activity 组件 exported=”true”,如果 app 打开后未响应或出现严重错误,则存在拒绝服务漏洞,也可能可以调起第三方接口。同样的,也可能会产生越权,绕过登录调用的 Activity。
Service 测试前打开app
dz> run app.service.info -a
命令和上面差不多~
dz> run app.service.start --component
若执行命令后 app 崩溃关闭即可证明 Service 存在问题
Broadcast Reciever 测试前先打开待测试 app
dz> run app.broadcast.info -a
dz> run app.broadcast.send --component
Content Provider 检测是否存在 SQL 注入
dz> run scanner.provider.injection -a
检测是否存在目录遍历
dz> run scanner.provider.traversal -a
这两个只要根据回显就能判断是否有漏洞。
0x06 彩蛋! WebView 代码执行检测 进行这项检测之前得先安装 checkjavascriptbridge 模块
dz> module repository create
P.S.
dz> module install jubax.javascript
drozer 会回显
这样就安装完成了,之后就可以使用
dz> run scanner.misc.checkjavascriptbridge -a
进行检测,再根据回显判断是否有漏洞。
0x07 参考 drozer模块的编写及模块动态加载问题研究 - thor 利用Drozer进行Android渗透 - zgjx6 Android项目入门篇 - 红日俱乐部 从零开始学Android应用安全测试(Part4) - 鸢尾 Mobie Seurity Base Share Tweet +1