InsecureShop 一个安卓渗透样本
2023-3-19 14:1:27 Author: Ots安全(查看原文) 阅读量:31 收藏

点击蓝字,关注我们

介绍

InsecureShop 是一个 Android 应用程序,旨在故意易受攻击。创建此应用程序的目的是向开发人员和安全专业人员介绍现代 Android 应用程序中存在的漏洞。这也可以作为测试您的 Android 渗透测试技能的平台。

此空间仅旨在指出 InsecureShop 应用程序中实现的漏洞以及使用的易受攻击的代码。此空间不会为您提供 InsecureShop 应用程序中实现的所有漏洞的完整解决方案。

InsecureShop 项目作为SourceZeroCon 2021的一部分发布。

漏洞:

  1. 硬编码凭据:凭据硬编码在可用于登录应用程序的某个位置

  2. 不充分的 URL 验证:可以通过 Deeplink 在 webview 中加载任意 URL。

  3. 弱主机验证检查:可以绕过主机验证检查以在 webview 中加载任意 URL。

  4. 任意代码执行:通过第三方包上下文执行任意代码。

  5. 访问受保护的组件:该应用采用嵌入式 Intent 并将其传递给 startActivity 等方法。这允许任何第三方应用程序启动任何受保护的组件。

  6. 不受保护的数据 URI:通过 loadUrl 方法传递的不受信任的 URI 允许攻击者在 webview 中传递任意 URL。

  7. 任意窃取:可以通过 ChooserActivity 从应用程序的本地存储中窃取文件。

  8. 使用具有已知漏洞的组件:确定应用程序中使用的易受攻击的组件或库,这些组件或库可以让您将本地文件泄露到远程域。

  9. 不安全的广播接收器:导出的活动在 onCreate 方法执行期间注册广播。攻击者可以触发此广播并在“web_url”参数中提供任意 URL。

  10. AWS Cognito 错误配置:错误配置的 AWS Cognito 实例可用于访问 AWS S3 存储桶。

  11. FileProvider 中 FilePaths 的不安全使用:使用广泛的文件共享声明可用于通过内容提供程序访问根目录。

  12. 使用隐式意图发送包含敏感数据的广播:使用隐式意图可以允许第三方应用程序窃取凭据。

  13. 拦截加载任意 URL 的隐式意图:使用隐式意图可以允许第三方应用程序在 webview 中加载任意 URL。

  14. 导出活动中 SetResult 的不安全实现: ResultActivity 中使用的不安全实现可用于访问任意内容提供程序。

  15. 不安全的内容提供者:任何第三方应用程序都可以访问内容提供者以窃取用户凭据。

  16. 缺少 SSL 证书验证: OnReceived SSL 错误的不安全实现可用于窃听 webview 中加载的所有流量。

  17. 启用不安全的 Webview 属性:启用不安全的 Webview 属性,允许第三方应用程序将本地数据泄露到远程域。

  18. 不安全的数据存储:该应用程序在本地存储用户凭据而不对其进行加密。

  19. 不安全的日志记录:用户凭据在 logcat 中泄露。只有对设备具有物理访问权限的攻击者才能访问此信息。

在项目地址中有直接APK样本提供

项目地址:https://github.com/optiv/InsecureShop

官方文档:https://docs.insecureshopapp.com/

官方地址:https://www.insecureshopapp.com/

漏洞参考:https://erev0s.com/blog/insecureshop-write-up-all-vulnerabilities-explained/

凑个字数,插个广告,其它文章不会插

漏洞解题:URL 验证不足

我们首先检查 AndroidManifest 文件,我们注意到该活动WebViewActivity具有以下内容:

<activity android:name=".WebViewActivity">    <intent-filter>        <action android:name="android.intent.action.VIEW" />        <category android:name="android.intent.category.DEFAULT" />        <category android:name="android.intent.category.BROWSABLE" />
<data android:host="com.insecureshop" android:scheme="insecureshop" /> </intent-filter></activity>

我们记下此处显示的主机和方案,然后继续查找位于此处的相应类com/insecureshop/WebViewActivity.kt。以下几行立即从 onCreate 函数中弹出:

if (uri.path.equals("/web")) {    data = intent.data?.getQueryParameter("url")
[...]
webview.loadUrl(data)

有一个检查来验证 URI 路径是否等于/web,然后将参数url从 intent 中提取到名为的参数data,稍后将在 webview 中加载该参数。这真的很有趣,因为我们可以构建这样一个 URI 并将任意参数作为 url 传递。我们将使用adb来做到这一点。


更具体地说,我们将使用指定的操作和意图 URI 从 adb 调用活动管理器。下面的命令就是这样做的。

adb shell am start -W -a android.intent.action.VIEW -d "insecureshop://com.insecureshop/web?url=https://erev0s.com"
- am = activity manager - start = Start an Activity specified by intent - -W = wait for launch to complete - -a = intent action - -d = intent URI

为上面使用的标志添加了一个简短的解释,因为这是我们第一次在本文中看到它们,这将有助于理解 adb 在这种情况下的使用方式。攻击完成后,应用程序加载了我们传递给它的任意 URL。


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMjYyMzkwOA==&mid=2247496845&idx=2&sn=dd472e348d9c8f3f473c09c74194a33e&chksm=9badbdc6acda34d0b18ee194a5453694d1c49a15c909a9622421c7a08d66f56f03abaa1f07a8#rd
如有侵权请联系:admin#unsafe.sh