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
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и ОбразованиеРазработка Полезной Нагрузки
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)

Это PoC для 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 и установить phar.readonly = Off в для запуска эксплойта.

php.ini
root@kitploit:~
# Download repository
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

# Run the exploit
# Usage: php exploit.php back-office-url email password func param
php exploit.php http://127.0.0.1/admin-dev/ [email protected] 54l35m4n123 system 'cat /etc/passwd'

Обратите внимание, что каталог загрузки будет переименован, и вы не сможете загрузить вредоносный phar-файл снова, если имя папки не будет восстановлено. Возможно, вы захотите выполнить reverse shell для получения постоянного RCE или включить команду для повторного переименования папки в вашу полезную нагрузку (вам нужно знать путь к каталогу загрузки).

Объяснение

Мы можем добиться неявной десериализации с помощью phar-обертки через функцию getimagesize() в [back-office-path]/filemanager/ajax_calls.php.

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() вызывалась с URL-адресом phar-обертки в качестве параметра, обходя определенные проверки.

Первая проверка с помощью 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/';. Мы не можем использовать phar://[string] в $_POST['path'], потому что 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 позволяет параметру path в вызове действия delete_folder или rename_folder в execute.php быть пустым, так что приложение вместо этого удалит/переименует $upload_dir.

Вторая проверка проста, $_POST['path'] должен содержать $upload_dir.

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

Мы можем просто добавить /img/cms/ в URL-адрес phar после пути к phar-файлу, потому что если каталог не существует внутри phar-архива, десериализация все равно произойдет. substr_replace($_POST['path'], $current_path, $pos, strlen($upload_dir)) заменит только /img/cms/ на абсолютный путь ($current_path) этой папки (например, /var/www/html/img/cms/, если приложение установлено в /var/www/html/).

Поскольку мы можем контролировать функцию getimagesize() для обработки URL-адреса phar-обертки, нам нужно загрузить вредоносный phar-файл на сервер. По умолчанию FileManager в PrestaShop допускает только расширения 'jpg', 'jpeg', 'png', 'gif', 'bmp', 'tiff', 'svg', 'pdf', 'mov', 'mpeg', 'mp4', 'avi', 'mpg', 'wma', 'flv' и 'webm'. Мы можем просто создать полезную нагрузку и сохранить ее с допустимым расширением. Мы можем использовать цепочки гаджетов Monolog из PHPGGC (https://github.com/ambionics/phpggc/blob/master/gadgetchains/Monolog/RCE/1/), так как они используются в 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 будет выполнена.

Скрипт exploit.php автоматически выполнит все шаги.

Помните, что каталог загрузки переименовывается на шаге 3, и вы не сможете загрузить вредоносный phar-файл снова, если имя папки не будет восстановлено. Возможно, вы захотите использовать reverse shell в качестве полезной нагрузки или включить команду для повторного переименования папки в полезную нагрузку (вам нужно знать путь к каталогу загрузки).

Скачать инструмент