Android APP-四大组件安全测试
字数 3247 2025-08-25 22:58:29

Android APP四大组件安全测试指南

一、前言

Android四大组件是Android应用开发的核心组成部分,也是安全测试的重点对象。四大组件包括:

组件名称 具体用途
Activity 展示组件,用于向用户直接展示一个界面,而且可以接受用户的输入信息从而进行交互
Content Provider 数据共享组件,用于向其他组件乃至其他应用共享数据
Broadcast Receiver 通讯组件,用于在不同组件甚至不同应用中传递消息
Service 能在后台执行长期运行操作的组件,它没有UI界面,运行在宿主进程的主线程中

二、环境搭建

drozer安装

  1. 安装Python 2.7

    • 必须使用Python 2.7版本
    • 安装时选择自动添加环境变量
    • 验证安装:python --version
  2. 安装drozer

    • 下载地址:Github官网
    • 安装时指定Python 2.7路径
  3. 手机端安装

    • 安装drozer-agent-2.3.4.apk
    • 开启端口转发功能
  4. ADB配置

    • 下载ADB工具
    • 执行端口转发:adb forward tcp:31415 tcp:31415
    • 若出现error: no devices/emulators found,需开启手机开发者模式和USB调试
  5. 启动drozer

    • 进入Python27\Scripts目录
    • 执行:drozer.bat console connect
  6. 解决中文乱码

    • 修改package.py文件,添加编码设置
    • 在360、362行添加字母u

三、四大组件测试

Activity组件测试

1. 越权绕过

测试步骤

  1. 列出所有APP包名:run app.package.list
  2. 获取目标APP包名(可使用GetAPKInfo工具)
  3. 查询攻击面:run app.package.attacksurface <package_name>
  4. 查看可导出的Activity:run app.activity.info -a <package_name>
  5. 调用组件绕过登录:run app.activity.start --component <package_name> <component_name>

漏洞原理

  • Activity组件默认不导出
  • 若AndroidManifest.xml中设置exported="true"或添加<intent-filter>属性,则组件可被外部调用

2. Activity劫持

测试方法

  1. 安装劫持测试APP(如uihijackv2.0_sign.apk)
  2. 通过drozer调用劫持组件:run app.activity.start --component <劫持app包名> <劫持组件名>
  3. 观察被测APP界面是否被覆盖

3. 拒绝服务攻击

测试方法

  1. 查找暴露的Activity组件
  2. 直接调用组件,观察是否导致程序崩溃
  3. 典型表现:程序崩溃、已停止运行等

Content Provider组件测试

1. 信息泄露

测试步骤

  1. 查询Provider攻击面:run app.provider.info -a <package_name>
  2. 查找URI:run app.provider.finduri <package_name>
  3. 扫描可访问URI:run scanner.provider.finduris -a <package_name>
  4. 访问URI获取数据:run app.provider.query <uri> --vertical

2. SQL注入

测试方法

  1. 测试URI是否存在注入:run app.provider.query <uri> --projection "'"
  2. 使用扫描模块:run scanner.provider.injection -a <package_name>
  3. 利用注入列出数据表:run app.provider.query <uri> --projection "* FROM SQLITE_MASTER WHERE type='table';--"
  4. 查询特定表数据:run app.provider.query <uri> --projection "* FROM <table_name>;--"

3. 目录遍历

测试方法

  1. 扫描目录遍历漏洞:run scanner.provider.traversal -a <package_name>
  2. 读取文件:run app.provider.read <uri>/etc/hosts
  3. 下载文件:run app.provider.download <uri> <本地保存路径>

Broadcast Receiver组件测试

1. 拒绝服务

测试步骤

  1. 查看Broadcast攻击面:run app.service.info -a <package_name>
  2. 通过jadx反编译查找action名
  3. 发送恶意广播:run app.broadcast.send --action <action_name>
  4. 观察APP是否崩溃

2. 消息伪造

测试方法

  1. 反编译APK分析Broadcast Receiver代码
  2. 确定所需参数
  3. 构造恶意广播:run app.broadcast.send --action <action_name> --extra <参数类型> <参数名> <参数值>

Service组件测试

主要漏洞类型

  1. 权限提升
  2. Service劫持
  3. 消息伪造
  4. 拒绝服务

测试方法

  • 通过drozer查看Service信息:run app.service.info -a <package_name>
  • 启动/停止Service:run app.service.start/stop <参数>
  • 发送恶意消息攻击Service

四、扩展知识点

ADB常用命令

# 查看默认日志
adb logcat

# 带时间的日志
adb logcat -v time

# 按级别过滤日志
adb logcat *:E

# 保存日志到文件
adb logcat -v time > D:\log.txt

# 监听特定包名日志
adb logcat | grep <package_name>

drozer常用模块

模块名 功能
app.activity.forintent 通过intent查找activity
app.activity.info 获取activities信息
app.activity.start 开启Activity
app.broadcast.info 获取broadcast receivers信息
app.broadcast.send 发送广播
app.package.attacksurface 确定包的可攻击面
app.package.info 获取已安装包信息
app.package.list 列出已安装程序包
app.provider.columns 展示content provider列
app.provider.delete 删除content provider内容
app.provider.download 下载content provider内容
app.provider.query 查询content provider
app.service.info 获取services信息

五、参考资源

  1. Android组件安全知识
  2. Activity组件安全测试
  3. Service组件安全测试
  4. Broadcast Receiver安全测试
  5. Content Provider安全测试
  6. ADB工具下载

六、测试样本

  1. sieve.apk:下载链接
  2. OWASP GoatDroid:下载链接
  3. UI劫持测试APP:下载链接
Android APP四大组件安全测试指南 一、前言 Android四大组件是Android应用开发的核心组成部分,也是安全测试的重点对象。四大组件包括: | 组件名称 | 具体用途 | |---------|---------| | Activity | 展示组件,用于向用户直接展示一个界面,而且可以接受用户的输入信息从而进行交互 | | Content Provider | 数据共享组件,用于向其他组件乃至其他应用共享数据 | | Broadcast Receiver | 通讯组件,用于在不同组件甚至不同应用中传递消息 | | Service | 能在后台执行长期运行操作的组件,它没有UI界面,运行在宿主进程的主线程中 | 二、环境搭建 drozer安装 安装Python 2.7 : 必须使用Python 2.7版本 安装时选择自动添加环境变量 验证安装: python --version 安装drozer : 下载地址: Github 、 官网 安装时指定Python 2.7路径 手机端安装 : 安装drozer-agent-2.3.4.apk 开启端口转发功能 ADB配置 : 下载ADB工具 执行端口转发: adb forward tcp:31415 tcp:31415 若出现 error: no devices/emulators found ,需开启手机开发者模式和USB调试 启动drozer : 进入Python27\Scripts目录 执行: drozer.bat console connect 解决中文乱码 : 修改package.py文件,添加编码设置 在360、362行添加字母u 三、四大组件测试 Activity组件测试 1. 越权绕过 测试步骤 : 列出所有APP包名: run app.package.list 获取目标APP包名(可使用GetAPKInfo工具) 查询攻击面: run app.package.attacksurface <package_name> 查看可导出的Activity: run app.activity.info -a <package_name> 调用组件绕过登录: run app.activity.start --component <package_name> <component_name> 漏洞原理 : Activity组件默认不导出 若AndroidManifest.xml中设置 exported="true" 或添加 <intent-filter> 属性,则组件可被外部调用 2. Activity劫持 测试方法 : 安装劫持测试APP(如uihijackv2.0_ sign.apk) 通过drozer调用劫持组件: run app.activity.start --component <劫持app包名> <劫持组件名> 观察被测APP界面是否被覆盖 3. 拒绝服务攻击 测试方法 : 查找暴露的Activity组件 直接调用组件,观察是否导致程序崩溃 典型表现:程序崩溃、已停止运行等 Content Provider组件测试 1. 信息泄露 测试步骤 : 查询Provider攻击面: run app.provider.info -a <package_name> 查找URI: run app.provider.finduri <package_name> 扫描可访问URI: run scanner.provider.finduris -a <package_name> 访问URI获取数据: run app.provider.query <uri> --vertical 2. SQL注入 测试方法 : 测试URI是否存在注入: run app.provider.query <uri> --projection "'" 使用扫描模块: run scanner.provider.injection -a <package_name> 利用注入列出数据表: run app.provider.query <uri> --projection "* FROM SQLITE_MASTER WHERE type='table';--" 查询特定表数据: run app.provider.query <uri> --projection "* FROM <table_name>;--" 3. 目录遍历 测试方法 : 扫描目录遍历漏洞: run scanner.provider.traversal -a <package_name> 读取文件: run app.provider.read <uri>/etc/hosts 下载文件: run app.provider.download <uri> <本地保存路径> Broadcast Receiver组件测试 1. 拒绝服务 测试步骤 : 查看Broadcast攻击面: run app.service.info -a <package_name> 通过jadx反编译查找action名 发送恶意广播: run app.broadcast.send --action <action_name> 观察APP是否崩溃 2. 消息伪造 测试方法 : 反编译APK分析Broadcast Receiver代码 确定所需参数 构造恶意广播: run app.broadcast.send --action <action_name> --extra <参数类型> <参数名> <参数值> Service组件测试 主要漏洞类型 权限提升 Service劫持 消息伪造 拒绝服务 测试方法 : 通过drozer查看Service信息: run app.service.info -a <package_name> 启动/停止Service: run app.service.start/stop <参数> 发送恶意消息攻击Service 四、扩展知识点 ADB常用命令 drozer常用模块 | 模块名 | 功能 | |-------|------| | app.activity.forintent | 通过intent查找activity | | app.activity.info | 获取activities信息 | | app.activity.start | 开启Activity | | app.broadcast.info | 获取broadcast receivers信息 | | app.broadcast.send | 发送广播 | | app.package.attacksurface | 确定包的可攻击面 | | app.package.info | 获取已安装包信息 | | app.package.list | 列出已安装程序包 | | app.provider.columns | 展示content provider列 | | app.provider.delete | 删除content provider内容 | | app.provider.download | 下载content provider内容 | | app.provider.query | 查询content provider | | app.service.info | 获取services信息 | 五、参考资源 Android组件安全知识 Activity组件安全测试 Service组件安全测试 Broadcast Receiver安全测试 Content Provider安全测试 ADB工具下载 六、测试样本 sieve.apk: 下载链接 OWASP GoatDroid: 下载链接 UI劫持测试APP: 下载链接