在管理面板中,参数如 _g 和 node 用于构建路径以包含 .inc.php 文件并执行 PHP 代码。具有在服务器任意位置上传 .inc.php 文件能力的恶意用户,可以利用路径遍历漏洞来包含并执行恶意代码。
.inc.php 扩展名的文件(例如,访问 FTP、同一服务器上允许文件上传的其他应用程序、CubeCart 上传功能中的新漏洞等)。假设在同一台安装了 CubeCart 的服务器上运行着一个 FTP 服务器,并且用户可以上传文件到特定位置。在我们的案例中,假设通过 FTP 上传的任何内容都会存放在 /opt/FTP_Example 中。
再假设该用户通过 FTP 上传了一个名为 path_traversal.inc.php 的文件,其内容为以下 PHP 代码:<?php system('whoami;id;hostname;ls') ?>。

最初,上传这样的文件并没有危险,因为它不会被执行,也不在 Web 服务器(如 Apache)能够执行的目录中。
同一用户在 CubeCart 管理面板上的权限可能非常有限,甚至没有任何权限,但他们仍然可以登录。例如,我们创建了一个名为 julio 的用户,该用户没有任何权限。

以 julio 身份登录应用程序后,我们开始测试 _g 和 node 参数。我们注意到这些参数会自动在路径末尾添加 .inc.php,并使用 include() 包含该文件以执行 PHP 代码。
如下所示,当文件未找到时,会返回以下错误信息。

我们开始思考是否可以通过遍历路径来访问服务器上其他目录中的 .inc.php 文件——比如我们的 FTP 文件夹。
由于我们在 /opt/FTP_Example 文件夹中有一个名为 path_traversal.inc.php 的文件,我们尝试添加许多 /../../../ 直到到达根目录,然后添加 /opt/FTP_Example/path_traversal,应用程序自动在路径末尾添加了 .inc.php。
如下所示,代码成功执行。

我们注意到 node 参数实际上会转义斜杠(/),但 _g 不会。所有用于构建路径的参数都应转义斜杠以防止路径遍历漏洞。
尽管成功利用此漏洞需要满足一些前提条件——这大大降低了风险——但它仍然需要补丁。你可以在参考资料中查看 CubeCart 的作者如何修复此漏洞,并在官方发布包含补丁的版本之前,将修复应用到你自己的 CubeCart 实例中。