Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
PrestaShop-CVE-2018-19126 — PrestaShop (1.6.x <= 1.6.1.23 或 1.7.x <= 1.7.4.4) 后台远程代码执行 (CVE-2018-19126) | Kitploit
工具/GitHubGitHub/farisv/prestashop-cve-2018-19126
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育Payload 开发
GitHubfarisv/prestashop-cve-2018-19126

PrestaShop-CVE-2018-19126

PrestaShop (1.6.x <= 1.6.1.23 或 1.7.x <= 1.7.4.4) 后台远程代码执行 (CVE-2018-19126)

查看仓库
39107年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

PrestaShop 后台远程代码执行 (CVE-2018-19126)

这是 CVE-2018-19126 的概念验证代码,通过串联 PrestaShop 后台多个漏洞,利用 phar 触发反序列化实现远程代码执行。

前提条件:

  • PrestaShop 1.6.x 低于 1.6.1.23 或 1.7.x 低于 1.7.4.4。
  • 后台账户(物流员、翻译员、销售员等)。

PrestaShop 发布说明:http://build.prestashop.com/news/prestashop-1-7-4-4-1-6-1-23-maintenance-releases/

受影响包链接:https://assets.prestashop2.com/en/system/files/ps_releases/prestashop_1.7.4.3.zip

警告

仅供教育目的。请勿将此脚本用于非法活动。作者不承担任何滥用或损害的责任。

示例

你需要 php 并启用 curl 扩展,同时在 php.ini 中设置 phar.readonly = Off 才能运行此利用脚本。

root@kitploit:~
# 下载仓库
wget https://github.com/farisv/PrestaShop-CVE-2018-19126/archive/master.zip -O PrestaShop-CVE-2018-19126.zip
unzip PrestaShop-CVE-2018-19126.zip
cd PrestaShop-CVE-2018-19126-master

# 运行利用脚本
# 用法: php exploit.php 后台URL 邮箱 密码 函数 参数
php exploit.php http://127.0.0.1/admin-dev/ [email protected] 54l35m4n123 system 'cat /etc/passwd'

注意:上传目录会被重命名,如果文件夹名称没有恢复,你将无法再次上传恶意 phar 文件。你可能需要执行反弹 shell 以获得持久 RCE,或者在你的 payload 中包含重命名文件夹的命令(你需要知道上传目录的路径)。

解释

我们可以通过 [back-office-path]/filemanager/ajax_calls.php 中的 getimagesize() 函数实现 利用 phar 包装器的隐式反序列化。

https://github.com/PrestaShop/PrestaShop/commit/4c6958f40cf7faa58207a203f3a5523cc8015148#diff-0f03d65f71cdd8eeb12913a97a6b8945

root@kitploit:~
case 'image_size':
    if (realpath(dirname(_PS_ROOT_DIR_.$_POST['path'])) != realpath(_PS_ROOT_DIR_.$upload_dir)) {
        die();
    }
    $pos = strpos($_POST['path'], $upload_dir);
    if ($pos !== false) {
        $info = getimagesize(substr_replace($_POST['path'], $current_path, $pos, strlen($upload_dir)));
        echo json_encode($info);
    }

我们需要找到一种方法,通过绕过某些检查,使 getimagesize() 以 phar 包装器 URL 作为参数被调用。

第一个 realpath() 检查相当严格。

root@kitploit:~
if (realpath(dirname(_PS_ROOT_DIR_.$_POST['path'])) != realpath(_PS_ROOT_DIR_.$upload_dir)) {
    die();
}

$upload_dir 变量来自 config.php,默认设置为 $upload_dir = Context::getContext()->shop->getBaseURI().'img/cms/';。我们不能在 $_POST['path'] 中使用 phar://[string],因为 realpath(dirname(_PS_ROOT_DIR_.$_POST['path'])) 会返回 false(路径不存在)。

存在另一个漏洞(CVE-2018-19125),允许用户删除或重命名 $upload_dir。如果 $upload_dir 目录不存在,realpath(_PS_ROOT_DIR_.$upload_dir) 将返回 false,因此我们可以绕过该检查,因为 realpath(dirname(_PS_ROOT_DIR_.$_POST['path'])) 同样也是 false。这个漏洞是在代码审查中发现的,当时我们正在寻找绕过方法。

简而言之,CVE-2018-19125 允许调用 execute.php 中 delete_folder 或 rename_folder 动作时的 path 参数为空,从而应用程序会删除/重命名 $upload_dir。

第二个检查很简单:$_POST['path'] 必须包含 $upload_dir。

root@kitploit:~
$pos = strpos($_POST['path'], $upload_dir);
if ($pos !== false) {

我们只需在 phar URL 中 phar 文件的路径后面附加 /img/cms/,因为即使该目录在 phar 存档中不存在,反序列化仍然会发生。substr_replace($_POST['path'], $current_path, $pos, strlen($upload_dir)) 只会将 /img/cms/ 替换为该文件夹的绝对路径 $current_path(例如,如果应用程序安装在 /var/www/html/,则路径为 /var/www/html/img/cms/)。

由于我们可以控制 getimagesize() 函数处理 phar 包装器 URL,我们需要将恶意 phar 文件上传到服务器。默认情况下,PrestaShop 中的 FileManager 只允许 'jpg', 'jpeg', 'png', 'gif', 'bmp', 'tiff', 'svg', 'pdf', 'mov', 'mpeg', 'mp4', 'avi', 'mpg', 'wma', 'flv', 'webm' 作为扩展名。我们可以构造 payload 并以有效扩展名保存。我们可以使用来自 PHPGGC (https://github.com/ambionics/phpggc/blob/master/gadgetchains/Monolog/RCE/1/) 的 Monolog gadget 链,因为 PrestaShop 使用了它。

最终利用步骤:

  1. 构造恶意 phar 文件并以有效扩展名保存(例如 phar.pdf)。
  2. 将 phar.pdf 上传到 FileManager。
  3. 触发漏洞将上传目录重命名为其他名称(例如 renamed)。
  4. 调用 image_size 动作,path 参数设为 phar://../../img/renamed/phar.pdf/img/cms/。
  5. phar.pdf 中的反序列化 payload 将被执行。

exploit.php 脚本会自动完成所有步骤。

请记住,上传目录在第 3 步被重命名,如果文件夹名称没有恢复,你将无法再次上传恶意 phar 文件。你可能需要使用反弹 shell 作为 payload,或者在 payload 中包含重命名文件夹的命令(你需要知道上传目录的路径)。

下载工具