Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
PrestaShop-CVE-2018-19126 — PrestaShop (1.6.x <= 1.6.1.23 or 1.7.x <= 1.7.4.4) Ejecución Remota de Código en el Back Office (CVE-2018-19126) | Kitploit
Herramientas/GitHubGitHub/farisv/prestashop-cve-2018-19126
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y EducaciónDesarrollo de Payloads
GitHubfarisv/prestashop-cve-2018-19126

PrestaShop-CVE-2018-19126

PrestaShop (1.6.x <= 1.6.1.23 or 1.7.x <= 1.7.4.4) Ejecución Remota de Código en el Back Office (CVE-2018-19126)

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver Repositorio
3910hace 7 añosRevisado por Kitploit

Ejecución remota de código en el Back Office de PrestaShop (CVE-2018-19126)

Este es el PoC para CVE-2018-19126, que encadena múltiples vulnerabilidades en el Back Office de PrestaShop para provocar la deserialización a través de un phar y lograr la ejecución remota de código.

Prerrequisito:

  • PrestaShop 1.6.x anterior a 1.6.1.23 o 1.7.x anterior a 1.7.4.4.
  • Cuenta de Back Office (logístico, traductor, vendedor, etc.).

Nota de versión de PrestaShop: http://build.prestashop.com/news/prestashop-1-7-4-4-1-6-1-23-maintenance-releases/

Enlace del paquete vulnerable: https://assets.prestashop2.com/en/system/files/ps_releases/prestashop_1.7.4.3.zip

ADVERTENCIA

SOLO CON FINES EDUCATIVOS. NO UTILICE ESTE SCRIPT PARA ACTIVIDADES ILEGALES. EL AUTOR NO SE HACE RESPONSABLE DE NINGÚN USO INDEBIDO O DAÑO.

Ejemplo

Necesita php con la extensión curl y establecer phar.readonly = Off en php.ini para ejecutar el exploit.

root@kitploit:~
# Descargar el repositorio
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

# Ejecutar el exploit
# Uso: 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'

Tenga en cuenta que el directorio de subida será renombrado y no podrá subir el archivo phar malicioso nuevamente si el nombre de la carpeta no se revierte. Quizás desee ejecutar una reverse shell para obtener persistencia RCE o incluir el comando para renombrar la carpeta nuevamente en su payload (necesita conocer la ruta al directorio de subida).

Explicación

Podemos lograr deserialización implícita con envoltorio phar a través de la función getimagesize() en [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);
    }

Necesitamos encontrar la forma de que getimagesize() sea llamada con la URL del envoltorio phar como parámetro, eludiendo ciertas comprobaciones.

La primera comprobación con realpath() es bastante estricta.

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

La variable $upload_dir proviene de config.php, que se establece con $upload_dir = Context::getContext()->shop->getBaseURI().'img/cms/'; por defecto. No podemos usar phar://[string] en $_POST['path'] porque realpath(dirname(_PS_ROOT_DIR_.$_POST['path'])) devolverá false porque no existe.

Existe otra vulnerabilidad (CVE-2018-19125) que permite al usuario eliminar o renombrar $upload_dir. Si el directorio $upload_dir no existe, realpath(_PS_ROOT_DIR_.$upload_dir) devolverá false y podemos eludir esta comprobación porque realpath(dirname(_PS_ROOT_DIR_.$_POST['path'])) también es false. Esta vulnerabilidad se descubrió durante la revisión de código al intentar encontrar la manera de eludir :).

En resumen, CVE-2018-19125 permite que el parámetro path en la llamada a la acción delete_folder o rename_folder en execute.php esté vacío, por lo que la aplicación eliminará/renombrará el $upload_dir en su lugar.

La segunda comprobación es simple, $_POST['path'] debe contener $upload_dir.

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

Podemos simplemente añadir /img/cms/ en la URL phar después de la ruta del archivo phar porque si el directorio no existe dentro del archivo phar, la deserialización aún ocurre. substr_replace($_POST['path'], $current_path, $pos, strlen($upload_dir)) solo reemplazará /img/cms/ con la ruta absoluta ($current_path) de esa carpeta (por ejemplo, /var/www/html/img/cms/ si la aplicación está instalada en /var/www/html/).

Debido a que podemos controlar la función getimagesize() para procesar una URL de envoltorio phar, necesitamos subir el archivo phar malicioso al servidor. Por defecto, FileManager en PrestaShop solo permite las extensiones 'jpg', 'jpeg', 'png', 'gif', 'bmp', 'tiff', 'svg', 'pdf', 'mov', 'mpeg', 'mp4', 'avi', 'mpg', 'wma', 'flv' y 'webm'. Podemos simplemente crear el payload y guardarlo con una extensión válida. Podemos usar las cadenas de gadgets Monolog de PHPGGC (https://github.com/ambionics/phpggc/blob/master/gadgetchains/Monolog/RCE/1/) ya que PrestaShop las utiliza.

Pasos finales de explotación:

  1. Crear el archivo phar malicioso y guardarlo con una extensión válida (por ejemplo, phar.pdf).
  2. Subir el phar.pdf a FileManager.
  3. Provocar la vulnerabilidad para renombrar el directorio de subida a otro nombre (por ejemplo, renombrado).
  4. Llamar a la acción image_size con phar://../../img/renamed/phar.pdf/img/cms/ como parámetro path.
  5. El payload de deserialización en phar.pdf se ejecutará.

El script exploit.php realizará todos los pasos automáticamente.

Recuerde que el directorio de subida se renombra en el paso 3 y no puede subir el archivo phar malicioso nuevamente si el nombre de la carpeta no se revierte. Quizás desee usar una reverse shell como payload o incluir el comando para renombrar la carpeta nuevamente en el payload (necesita conocer la ruta al directorio de subida).

Descargar herramienta