为了能够从我们的应用程序打开另一个应用程序,我们通常通过声明我们想要访问的 Activity 类的名称来实现这一功能。但是,如果我们要打开的 Activity 在其清单文件中设置了android:exported="false" ,则无法使用此方法。而其中一种替代方法是使用深层链接。
深层链接是我们可以用来直接转到应用程序中的某些功能的另一种方式,即使该应用程序不在我们的控制范围内。
了解深层链接及其漏洞
深层链接是专门设计用于打开应用程序中的某些活动的 URL。这可以从各种来源触发,例如网页、推送通知或其他应用程序。在Android中,深层链接可以分为Scheme URL、App Links和Intent URL。其中Scheme URL 允许任何应用程序注册自定义方案、主机和路径。但其中缺乏验证容易导致链接劫持,恶意应用程序会插入本应用于另一个应用程序的链接。错误配置和不正确的验证过程可能使应用程序容易受到链接劫持和数据盗窃。
深层链接的风险和利用
如果没有适当保护,深层链接可能会给应用程序带来各种风险和漏洞。常见和潜在的漏洞包括:
1.**网络钓鱼攻击:**攻击者可以利用未经正确身份验证的深层链接将用户重定向到模仿真实网站外观的虚假网站。这可能会导致用户在虚假网站中输入密码或信用卡信息等敏感信息,然后这些信息可能会被攻击者滥用。
2.**恶意软件分发:**攻击者可以使用深层链接将用户引导至包含恶意软件的网站或自动将恶意文件下载到用户的设备。这可能会导致设备感染和潜在的数据丢失或系统损坏。
3.**数据拦截(数据盗窃):**未加密或不安全的深层链接可能会导致通过该链接发送的敏感数据被攻击者拦截。通过易受攻击的深层链接发送的个人或机密信息可能会被滥用于身份盗窃或其他目的。
4.**中间人攻击:**攻击者可以尝试将自己插入用户和服务器之间,以窃取或操纵通过深层链接发送的数据。如果深层链接未加密或连接不安全,则可能会发生这种情况。
5.**链接劫持:**攻击者可以尝试将针对特定应用程序的深层链接重定向到另一个应用程序或恶意网站。这可能会迷惑用户并允许攻击者窃取信息或访问不适当的应用程序功能。
6.**身份盗窃:**攻击者可以利用脆弱的深层链接来窃取用户的个人信息,例如姓名、地址或信用卡号。然后,该信息可用于实施身份盗窃或其他在线欺诈。
7.**未经授权的访问:**未得到适当保护的深层链接可能会在未经适当授权的情况下提供对应用程序中敏感功能或数据的访问。这可能会导致数据泄露或未经授权使用应用程序。
深层链接利用
作为练习,我将使用 AllSafe 应用程序。源代码可以在这里下载:https://github.com/t0thkr1s/allsafe。
使用 Jadx 打开 .apk 文件。然后进入到 AndroidManifest.xml 文件
按 Ctrl + F 打开搜索框并搜索"android:scheme"。我们寻找"android:scheme"的原因是, 标签至少应该包含 android:scheme 属性。
如上图所示,该应用程序有两种不同的方案( allsafe://和https:// )。
了解代码
双击"infosecadventures.allsafe.challenges.DeepLinkTask"。
导航到深层链接文件。检查代码后,很明显,进行数据的验证取决于" key "的参数的存在以及与strings.xml中存储的值(也标记为" key ")进行比较。我们的目标是确保这个" if"条件产生正确的结果。因此,在开始任何利用之前,我们的第一步是获取" key "值,很显然该值存储在strings.xml中。
现在,通过单击值进入到res下的resources.arsc文件夹并打开*strings.xml 文件。然后搜索"key"
在第一种方案中,scheme是"allsafe",host是"Infosecadventures",前缀路径是"/congrats"。
- allsafe://infosecadeventures/congrats?key=ebfb7ff0-b2f6--41c8-bef3--4fba17be410c
在第二种方案中,只有一个属性称为scheme,这意味着在 Allsafe 应用程序中打开深层链接对host或路径没有限制。
- https://<any URL>?key=ebfb7ff0-b2f6--41c8-bef3--4fba17be410c
漏洞利用
我们可以使用adb(Android Debug Bridge)来利用这个漏洞:
-- 打开终端并写入以下命令。
- adb shell am start -a "android.intent.action.VIEW" -d "allsafe://infosecadventures/congrats?key=ebfb7ff0-b2f6-41c8-bef3-4fba17be410c"
•am start :这部分命令调用am (活动管理器)。
•-a :该参数指定启动活动时要执行的操作。在本例中,它设置为"android.intent.action.VIEW" 。
•-d :该参数用于指定与Intent相关的数据。设置为" allsafe://infosecadventures/congrats?key=ebfb7ff0-b2f6-41c8-bef3-4fba17be410c "
-- 执行命令后,看起来漏洞已成功执行。
-- 第二个利用方案,
- https://<any URL>?key=ebfb7ff0-b2f6--41c8-bef3--4fba17be410c
-- 这里我将 URL 更改为 evil.com,完整命令如下所示:
- adb shell am start -a "android.intent.action.VIEW" -d https://facebook.com?key=ebfb7ff0-b2f6--41c8-bef3--4fba17be410c
保护深层链接
应用程序可以采取多种做法来避免深层链接漏洞的风险,包括:
1.正确的验证和验证:实施正确的验证流程以防止链接黑客攻击,使用应用程序链接关联等验证机制。
2.Intent URL :考虑使用Intent URL 来提高安全性,而不是Scheme URL 或App Links。
3.输入验证:确保正确的输入验证,以防止任意组件访问和不安全的参数处理。
4.应用程序特定的身份验证:确保在应用程序特定的身份验证后处理深层链接,以避免未经授权访问敏感功能。
5.加密和保护敏感数据:加密通过深度链接传输的敏感数据并使用安全通信协议。
6.漏洞测试:定期执行安全测试,以识别应用程序深层链接实现中的弱点。
7.安全培训:让用户了解深层链接的风险以及如何识别合法链接以避免攻击。
参考 :
•https://wisnukurniawan.medium.com/tutorial-android-deep-link-2490241196e9
•https://community.algostudio.net/implementasi-deep-link-di-flutter/
•https://github.com/t0thkr1s/allsafe
•https://www.hackingarticles.in/android-pentest-deep-link-exploitation/
•https://mas.owasp.org/MASTG/tests/android/MASVS-PLATFORM/MASTG-TEST-0028/
免费获取网络安全优质学习资料与干货教程
申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法。