![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=1739224813-Y1NnKiGmedZdqjjhCl0sgaCoOAPJtVb9-0-7ce85dbaeed9cce8bb7bd039aeb2089e)
图1-9 URL Scheme调用流程链
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/36_02.jpg?sign=1739224813-FSZ6zIOqVgs6jJc3qgZpohLtkfph0ofv-0-9b0aa6f0a43a50a09c80ce0f72ae3385)
使用IE浏览器访问该链接,最终生成的启动参数如下:
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/36_03.jpg?sign=1739224813-PPr8kB7b0ZJAupaYazeBWLLH4QONEkHV-0-9270bd9ad2ec3b435c9779520aeee3c9)
通过参数注入,调用Electron支持的--gpu-launcher参数,设置该参数的值为cmd命令,并最终执行该cmd命令,启动计算器,如图1-10所示。
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/36_04.jpg?sign=1739224813-BffI1t4mBYGPMauCf5H0CZaQgKWkDo5n-0-955932da7fbbe4749747f1629adb644e)
图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=1739224813-Mx3gYFt8i1fBjHJWUCepyNKhzpqWUwFx-0-3a05382c704e225f7032342a2ba00585)
图1-11 Edge浏览器通过URL Scheme调用wshfile
漏洞作者最终找到了以下解决方案:
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/37_02.jpg?sign=1739224813-t2ycprG3rR80b2NKwp8LPiAS1DgHUm6G-0-79c9b4199f870bb230e7ffdb086048f3)
该脚本文件支持接收参数,并且会将命令直接拼接到字符串中,然后通过PowerShell执行。
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/37_03.jpg?sign=1739224813-A4F1uBY4Rhn2qDKAMdg5Zf78rVqBirXw-0-38ebeb31a826e8580e0abbbe3c5e687c)
最终构造的PoC如下:
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/37_04.jpg?sign=1739224813-IlraWDn0NnfOBKKpgPKVpJFdfuHP2kPh-0-a300451079a918b627434ee089ebb58c)
执行后触发的效果如图1-12所示。
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/37_05.jpg?sign=1739224813-5REmr7NJos1kiX3eSXfTehvgX5QOt8Yn-0-f377017fe356cb9cdf4fc50705e0eb67)
图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=1739224813-uprjSzTvbY8kk0HmnfZ0JDPrYEmrXWVy-0-503a08d3eda5e9d587018bf68c69fb5a)
在C:\Windows\System32\目录下,我们还发现了SyncAppvPublishingServer.vbs文件。该文件同样可被用于触发远程代码执行,并且相较于漏洞作者所提供的方法,这种方式更为可靠。
除了SyncAppvPublishingServer.vbs文件外,位于C:\Windows\System32\Printing_Admin_Scripts\zh-CN目录中的pubprn.vbs文件也具备触发远程代码执行的能力。
需要补充的是,在Windows 7操作系统中,Chrome和Edge浏览器都存在打开非法URL Scheme的问题,但由于Chrome并未出现参数注入问题,因此可以暂时认为它是安全的。