漏洞学习|Deep Link:开放重定向

admin 2023年9月5日11:41:49评论57 views字数 3129阅读10分25秒阅读模式

-014-


DeepLink是可以访问特定内容的链接。大多数网络链接都是深层链接。如图所示:


漏洞学习|Deep Link:开放重定向

image by branch.io

在 Android 中,deeplink是直接带到应用程序内的特定位置的链接。


Android 中的Deep Link类型

Android 中有两种类型的Deep Link,分为显式Deep Link和隐式Deep Link。

显式Deep Link

显式Deep Link是Deep Link的单个实例,它使用PendingIntent将用户带到应用程序中的特定位置。显式深层链接是由同一应用程序创建的深层链接,单击后会直接带到应用程序内的内容。

例如:通知或应用程序小部件

漏洞学习|Deep Link:开放重定向

漏洞学习|Deep Link:开放重定向


隐式Deep Link

隐式Deep Link是指调用Deep Link时应用程序中的特定目标。

隐式Deep Link是 URI 形式的深层链接,单击后会将您直接带到相关应用程序中的内容。

例如:当用户单击链接时,Android 可以将您的应用程序打开到相应的目的地(Play 商店链接)。


漏洞学习|Deep Link:开放重定向


Android 中的深层链接

所有与 android 相关的深层链接都存储在AndroidManifest.xml文件中。

要创建指向应用内容的深层链接,需要将包含元素和属性值的意图过滤器添加到 AndroidManifest.xml 文件中。

在讨论元素和属性之前,让我们先看看什么是Intent 过滤器。

Intent是一个传递来启动活动或让现有活动做一些新事情的对象。

Intent filter过滤器描述组件的功能(如活动、服务和广播接收器)

Intent 是一个消息传递对象,可以使用它从一个应用程序组件向另一应用程序组件请求操作。尽管意图以多种方式促进组件之间的通信,但有三种基本用例:

  • 开始活动

“Activity”表示应用程序中的单个屏幕。您可以通过向startActivity()传递Intent来启动一个新的Activity实例。intent描述了要启动的活动,并携带了任何必要的数据。

  • 启动服务

服务是在没有用户界面的情况下在后台执行操作的组件。使用Android5.0(API 21级)及更高版本,您可以使用JobScheduler启动服务。

对于Android5.0(API 21级)之前的版本,您可以使用service类的方法启动服务。您可以通过传递Intent to startService()来启动服务以执行一次性操作(例如下载文件)。

  • 传送广播

广播是任何应用程序都可以接收的消息。系统为系统事件提供各种广播,例如当系统启动或设备开始充电时。您可以通过将Intent传递给sendBroadcast()或sendOrderedBroadcast.()将广播传递给其他应用程序。

下面的XML片段显示了如何在清单中为深度链接指定意向过滤器。URI“example://gizmos“和”http://www.example.com/gizmos

漏洞学习|Deep Link:开放重定向

在上图中,我们可以看到活动的deep link。

  1. URI“example://gizmos”和“http://www.example.com/gizmos”都解析为”com.example.android.GizmosActivity”的活动。

  2. Intent-filter根据URI的类型定义活动组件的能力。

  3. <action>指定ACTION_VIEW意图操作,以便可以从 Google、DuckDuckGo 或任何其他搜索引擎访问意图过滤器。

  4. <category>包括BROWSABLE类别。为了能够从 Web 浏览器访问意图过滤器,这是必要的。如果没有它,单击浏览器中的链接将无法解析到您的应用程序。

还包括DEFAULT类别。这允许您的应用程序响应隐式意图。如果没有这个,只有当意图指定您的应用程序组件名称时才能启动活动。

  1. 添加一个或多个<data>标签,每个标签代表解析为活动的 URI 格式。标签至少<data>必须包含该android:scheme属性。

    您可以添加更多属性来进一步细化活动接受的URI类型。例如,您可能有多个活动接受相似的URI,但仅根据路径名而有所不同。在这种情况下,使用android:path属性或其pathPattern或pathPrefix变体来区分系统应该为不同的URI路径打开哪个活动。


DeepLink:开放/未经验证的重定向

演示时间

在本演示中,我们将使用名为InsecureShop的故意存在漏洞的 Android 应用程序。

由于我们了解到 Android 中并非所有深层链接都存储在 AndroidManifest.xml 文件中,因此让我们首先在jadx-gui中打开 apk来读取Manifest.xml。

从上图中,我们现在知道 DeepLink 将根据意图过滤器中定义的数据标签进行处理,即android:scheme必须存在。

android:scheme因此,让我们在清单文件中搜索,可以看到我们只找到了 1 个deeplink。

漏洞学习|Deep Link:开放重定向

从上图中我们可以webview通过查看活动名称来了解深层链接的调用。如果您不记得 webview 是什么,请查看此处

上面的 uri 将类似于insecureshop://com.insecureshop 调用 webview 活动的 uri。在 Jadx 中,按住ctrl并单击活动名称以在新选项卡中打开代码。


漏洞学习|Deep Link:开放重定向

  1. onCreate()是Android中的一个生命周期事件。Android 的 Activity 生命周期中有 6 个核心生命周期事件集onCreate()onStart()onResume()onPause()onStop()、 ,onDestroy()它们是不言自明的。

  2. 已经定义的Webview Activity的webview设置。

  3. getIntent()获取意图并存储在intent object.

  4. intent.getData()获取 uri 并存储uri object并检查 uri 是否为空

漏洞学习|Deep Link:开放重定向

  1. 检查路径(如果有/web)并执行相应的代码。

  2. 检查路径(如果有/webview)并执行相应的代码。

  3. 如果两次检查都失败且 webview 不会被加载,则完成检查。

如果 1 或 2 通过,它将获取 uri 并从查询中提取url的值并将其存储在data变量中,并通过 webview 加载。

从上图中,我们将尝试完成uri以在webview中加载任意网页。insecureshop://com.insecureshop/web?url=https://3kal.medium.com(或者)

insecureshop://com.insecureshop/webview?url=https://3kal.medium.com

我们将使用ADB我们的 uri 来启动 webview,并且我们需要登录到insecureshop应用程序。如果您找不到凭据,那么就是这里shopuser:!ns3csh0p,需要登录后,页面如下所示。

漏洞学习|Deep Link:开放重定向

使用 ADB,我们通过将 uri 作为数据传递给它来启动 webview 活动。adb shell am start -W -a android.intent.action.VIEW -d "insecureshop://com.insecureshop/web?url=https://3kal.medium.com"

Webview加载任意uri如下所示:

漏洞学习|Deep Link:开放重定向

有很多问题可以通过深层链接来利用,我们将在以后的文章中看到。

LINK

https://medium.com/mobis3c/deep-link-exploitation-introduction-open-unvalidated-redirection-b8344f00b17b


---

#END#


漏洞学习|Deep Link:开放重定向


原文始发于微信公众号(一盅清茶):漏洞学习|Deep Link:开放重定向

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年9月5日11:41:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   漏洞学习|Deep Link:开放重定向http://cn-sec.com/archives/2007002.html

发表评论

匿名网友 填写信息