![Web漏洞分析与防范实战:卷1](https://wfqqreader-1252317822.image.myqcloud.com/cover/526/53252526/b_53252526.jpg)
1.3.5 浏览器参数注入
2018年,有两个明显的URL Scheme安全问题是由Windows下的IE和Edge参数注入引发的。其中一个是Electron自定义协议导致命令注入(CVE-2018-1000006),另一个是Edge远程代码执行漏洞(CVE-2018-8495)。
Windows下的IE和Edge对URL Scheme的处理方式存在差异。当浏览器接收到一个URL Scheme时,它会访问注册表以查询相应的应用程序路径,之后进行URL解码,并调用ShellExecute函数簇以启动应用程序,如图1-9所示。正是URL解码这一步导致双引号的闭合,从而引发了参数注入问题。
1.Electron自定义协议导致命令注入
2018年1月,Electron发布了自定义协议导致命令注入的安全公告(CVE-2018-1000006)。对于参数注入而引发的问题,构造的PoC如下:
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/36_01.jpg?sign=1739567492-ACtnxP4yvPajVhWrYu4ySKKSrPgddEu2-0-56694b72c3f51f6bfadc35bc2779d608)
图1-9 URL Scheme调用流程链
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/36_02.jpg?sign=1739567492-hXJwofAOOYY2XPimNL1pPk6dRnKbyozF-0-27fc1fab5584f50d3d8e529d5cb6ea38)
使用IE浏览器访问该链接,最终生成的启动参数如下:
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/36_03.jpg?sign=1739567492-JBFnKBiJhBKJk94IlUlNjPA5IW7UBbEU-0-d77ca5463a66f3a4c685dbc88fa81e76)
通过参数注入,调用Electron支持的--gpu-launcher参数,设置该参数的值为cmd命令,并最终执行该cmd命令,启动计算器,如图1-10所示。
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/36_04.jpg?sign=1739567492-HRCO5GNWrc9nYSxGmHOL2gQDnASpLZNF-0-f8d7e6c7f46bbf698a4347fcd9987d74)
图1-10 CVE-2018-1000006 PoC演示
2.Edge远程代码执行漏洞
2018年10月,Edge公开了远程代码执行安全漏洞(CVE-2018-8495)。该漏洞同样是利用参数注入,最终达到了远程代码执行的效果。整个漏洞利用过程非常巧妙,下面进行详细分析。
首先需要指出的是,在Edge浏览器中居然可以打开一些不合法的URL Scheme(没有包含URL Protocol字段),比如wshfile项,如图1-11所示。
当然,在Windows 7和Windows 8中不能打开不合法的URL Scheme。
wshfile项指向了wscript.exe,这是一个非常熟悉的Windows内置脚本解释器。那么,我们可以利用wshfile尝试去运行脚本。上文提到Edge浏览器中存在参数注入问题,那么是否有脚本可以接收参数并用于执行呢?
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/37_01.jpg?sign=1739567492-Bd0bh3xwk53kWBZe1JPiBpIP1l5dvTEf-0-4d54b959165cb1120ef72a1d0fa16a47)
图1-11 Edge浏览器通过URL Scheme调用wshfile
漏洞作者最终找到了以下解决方案:
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/37_02.jpg?sign=1739567492-S4mt72exoZ2AU0jLVF4sQSRMIZNAk0kt-0-12eb8030faf94031f5ff60aaeeb9573f)
该脚本文件支持接收参数,并且会将命令直接拼接到字符串中,然后通过PowerShell执行。
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/37_03.jpg?sign=1739567492-4ywv0J139X7XIsK4aCEFbylaBDS5c0dB-0-6d768ae66d6806c6c2a120f64dfd18a7)
最终构造的PoC如下:
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/37_04.jpg?sign=1739567492-Nu7uhtS48WyOLukYNWGiOiS0aURRHvxO-0-a6cfe93526934ba2e38acbc66ab97f07)
执行后触发的效果如图1-12所示。
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/37_05.jpg?sign=1739567492-wLEL8ZyrqmQQcqBVnhQBdYj6BYWQB2zc-0-c7434c30c0621bc556ad6402bc2b457f)
图1-12 利用wshfile项构造PoC来打开calc.exe
目前,Windows 10已经发布了修复补丁,Edge已经不能调用这类不合法的URL Scheme。
此外,在分析漏洞过程中,知道创宇404团队也有了一些额外的发现,例如,在注册表HKEY_CLASSES_ROOT下发现了类似wshfile的URL Scheme,这些URL Scheme都指向wscript.exe,同样有可能触发远程代码执行。这些URL Scheme包括:
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/38_01.jpg?sign=1739567492-qrqJ7KCA3ltZysZDvT0bq0FU1c8RqeXe-0-62963ea0a624e9d86ed437f508cdb247)
在C:\Windows\System32\目录下,我们还发现了SyncAppvPublishingServer.vbs文件。该文件同样可被用于触发远程代码执行,并且相较于漏洞作者所提供的方法,这种方式更为可靠。
除了SyncAppvPublishingServer.vbs文件外,位于C:\Windows\System32\Printing_Admin_Scripts\zh-CN目录中的pubprn.vbs文件也具备触发远程代码执行的能力。
需要补充的是,在Windows 7操作系统中,Chrome和Edge浏览器都存在打开非法URL Scheme的问题,但由于Chrome并未出现参数注入问题,因此可以暂时认为它是安全的。