【问题标题】:Starting Android Browsers' Private Activities using Intent URLs使用 Intent URL 启动 Android 浏览器的私有活动
【发布时间】:2017-01-26 13:20:40
【问题描述】:

首先我必须承认我是 Android 的新手,但我们知道在 android 中我们不能通过另一个应用程序启动应用程序的私有活动。除非它们在 intent-filter 中设置为 android:exported=true 或者它们是为 implicit 调用而制作的。 但是我们应该能够从应用程序中启动私有活动。而对于浏览器(特别是在 android 中),我们可以使用Intent URLs 来启动浏览器的私有 Activity。

我在 Opera Mobile 中发现了一些活动,问题是我无法使用 Intent URL 运行它们,而且我不知道我在这方面做错了什么。

例如,歌剧中有一个名为OperaMainActivity(或另一个名为OperaStartActivity)的活动,我试图像这样启动它们:

intent:#Intent;component=com.opera.browser/com.opera.android.OperaMainActivity;end

intent:#Intent;component=com.opera.browser/com.opera.android.OperaStartActivity;end

但这些都不会启动被调用的活动。

虽然我仍然可以启动 AdMarvelActivity,这也是私人的:

"intent:#Intent;S.url=https://google.com;component=com.opera.browser/com.admarvel.android.ads.AdMarvelActivity;end";

这是AndroidManifest中定义的OperaMain Activity:

<activity ns0:label="@string/app_name_title" ns0:name="com.opera.android.OperaMainActivity" ns0:launchMode="singleTask" ns0:configChanges="keyboard|keyboardHidden|orientation|screenSize" ns0:windowSoftInputMode="10" />

而且没有intent-filter

这就是AdMarvelActivityAndroidManifest中的定义:

<activity ns0:theme="@*ns0:style/Theme.NoTitleBar.Fullscreen" ns0:name="com.admarvel.android.ads.AdMarvelActivity" ns0:process=":helper" ns0:configChanges="keyboard|keyboardHidden|orientation" />

我认为这两者之间没有重大区别。我做错了什么?!

【问题讨论】:

  • 没有。它关于启动可以从其他应用程序调用的浏览器公共活动。我正在寻找从浏览器本身显式调用私人活动,当然使用 Intent URL Schemes

标签: android android-intent android-activity intentfilter android-browser


【解决方案1】:

Vulnerable Handling of Intent URL Scheme 早已为人所知,大多数流行的浏览器(如 chrome、opera)都已修复此错误。但是其他安卓浏览器仍然存在这个漏洞。

我尝试在当前版本的 Opera Mobile (v37) 上进行攻击,幸好它不起作用。您必须在较旧的 apk 上运行它。

如果你有兴趣在其他浏览器上测试这种攻击,你可以关注这个话题:All Your Browsers Belong To Us;它演示了对 Dolphin Browser 和 Mercury Browser 的攻击。

【讨论】:

  • 感谢您的回答,我知道这次攻击。但我的问题有点不同。我问我是否可以开始私人活动,那么为什么我不能开始问题中提供的活动。我想知道如何运行它们。我的意思是如果我可以启动 AdMarvelActivity 那为什么我不能启动其他人?!我写的意图网址错了吗?!
  • 我同意如果AdMarvelActivity 可以运行,那么其他人也应该可以运行。可能是您遗漏了一些活动开始所必需的意图附加内容。您可以通过adb logcat | fgrep -i intent 拦截或记录所有意图,并检查问题是否与被触发或接收的意图有关。您正在尝试使用哪个版本的 Opera Mobile。请分享您尝试过的 apk 和 Intent url。
  • adb 命令非常适合监控。我发现问题出在某些版本的浏览器(特别是新版本的浏览器)中过滤了意图 url 中的组件。如果您在代码中有通知,他们会在 parseURI 之后立即设置 intent.setComponent(null)。所以我们不能使用组件调用私有活动。还有其他方法可以启动它们吗?
  • 不,我认为没有组件就不可能开始私人活动。 HOST/URI-path#Intent;package=[string];action=[string];category=[string];component=[string];scheme=[string];end;package,action,category 是不可利用的,除非目标代码明确错误地在某些action 上启动私人活动或在某些活动中添加了错误的category。 “你所有的浏览器都属于我们”的演讲讨论了利用 scheme 但它不是为了开始私人活动。
  • 非常感谢,然后我必须搜索 parseURL 发生的漏洞,看看他们是否犯了任何错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
  • 2015-05-30
相关资源
最近更新 更多