![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=1739272762-cuSDEhi0mFe9mmJhEBYTpLzpx6HBifJP-0-3ee9eed0092b64032aa6aa3cfc84b22e)
图1-9 URL Scheme调用流程链
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/36_02.jpg?sign=1739272762-fUqn5atu54uWhAk00csEVcXEMMchBo2c-0-df9c0cc38631f2cc18989819e6e52d95)
使用IE浏览器访问该链接,最终生成的启动参数如下:
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/36_03.jpg?sign=1739272762-Qf7onvseH41uOpvu7WAgCc1yxDtoyXoi-0-578d4513f63a88456c2781fa1c581160)
通过参数注入,调用Electron支持的--gpu-launcher参数,设置该参数的值为cmd命令,并最终执行该cmd命令,启动计算器,如图1-10所示。
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/36_04.jpg?sign=1739272762-Jl4cABBZtjOOCCIgP5Mi5tTrfdPWES3T-0-3109d64592a0c7efe4de9518543fc0e0)
图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=1739272762-zYaSWpJ3e2ZyHLIUa1Ds9e9FWRB5vgBe-0-8037c823a110ddc0740770f81430f43a)
图1-11 Edge浏览器通过URL Scheme调用wshfile
漏洞作者最终找到了以下解决方案:
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/37_02.jpg?sign=1739272762-97SntUqFL5QC34qrID8B3OI0kk9mgiK3-0-015d8acab8a61574667546722e1e4c14)
该脚本文件支持接收参数,并且会将命令直接拼接到字符串中,然后通过PowerShell执行。
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/37_03.jpg?sign=1739272762-1nOU8modCo6sZ4Fwu1XVBpB0weNZb7yo-0-2b61510be5cfa48a96b7b847d4137fc6)
最终构造的PoC如下:
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/37_04.jpg?sign=1739272762-U2XQUi0HnvdqTWGciSUGdD0xYkJXGZaO-0-9ed52d12671c2a5e6ec84e428dd03f5a)
执行后触发的效果如图1-12所示。
![](https://epubservercos.yuewen.com/1C0144/31724658703268506/epubprivate/OEBPS/Images/37_05.jpg?sign=1739272762-2YklrWt1sigw5BuQOCVTk167jAIyWhQX-0-45fb98734fe64eeefbd1bff5177946fb)
图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=1739272762-xvnGC5nxLCVOX8vjmsjMJcWALDn6iD34-0-0542a72b5915c85b2b4a612a6d08fd6f)
在C:\Windows\System32\目录下,我们还发现了SyncAppvPublishingServer.vbs文件。该文件同样可被用于触发远程代码执行,并且相较于漏洞作者所提供的方法,这种方式更为可靠。
除了SyncAppvPublishingServer.vbs文件外,位于C:\Windows\System32\Printing_Admin_Scripts\zh-CN目录中的pubprn.vbs文件也具备触发远程代码执行的能力。
需要补充的是,在Windows 7操作系统中,Chrome和Edge浏览器都存在打开非法URL Scheme的问题,但由于Chrome并未出现参数注入问题,因此可以暂时认为它是安全的。