作者:Thomas Stern
日期:26/01-2023
通过导入语言功能,可以上传任意文件。该文件可以是 WebShell,从而允许在服务器上执行代码。
为了测试此漏洞,我们通过 Docker 在本地机器上启动了一个 Sitecore 10.3 实例。 此漏洞尚未在旧版 Sitecore 上测试,但早期版本可能也存在同样的漏洞。
主机:Windows 11 运行 Docker for Desktop Sitecore 10.3
由于这是一个已认证漏洞,需要一组有效凭据。本次测试实例使用了 admin/b
工具箱位于 Sitecore 的控制面板下
现在选择语言导入
首先选择"浏览"
接下来选择 temp 文件夹'这里也将是 Shell 的存放位置。
用于测试的代码是一个简单的 WebShell,下载自 https://github.com/tennc/webshell/blob/master/fuzzdb-webshell/asp/cmdasp.aspx,注意,我们做了一处小修改,使其运行 PowerShell 而不是默认的 cmd。
选择"上传"按钮,选中你的 Shell,然后点击"下一步"
你的 Shell 现在应该已上传成功
首先导航到已上传的 Shell"https://sitename/temp/shell.aspx" 上传 Shell 后,就可以在系统上实现完整的代码执行
上传语言文件的代码应验证所上传的文件,并且只允许上传可执行文件(如 aspx、exe 等)。此外,语言文件应只上传到不允许执行代码的目录。一种实现方式是在 web.config 中添加如下阻止规则。请注意,这将阻止对这两个文件的所有请求。
<rule name="BlockFileUpload" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions logicalGrouping="MatchAny">
<add input="{URL}" pattern="*sitecore/shell/Applications/Files/FileBrowser.aspx" />
<add input="{URL}" pattern="*sitecore/shell/Applications/Dialogs/Upload/Upload2.aspx" />
</conditions>
<action type="CustomResponse" statusCode="404" statusReason="File or directory not found." statusDescription="The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable." />
</rule>