Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
PrestaShop-CVE-2018-19126 — PrestaShop (1.6.x <= 1.6.1.23 o 1.7.x <= 1.7.4.4) Esecuzione Remota di Codice nel Back Office (CVE-2018-19126) | Kitploit
Strumenti/GitHubGitHub/farisv/prestashop-cve-2018-19126
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneSviluppo Payload
GitHubfarisv/prestashop-cve-2018-19126

PrestaShop-CVE-2018-19126

PrestaShop (1.6.x <= 1.6.1.23 o 1.7.x <= 1.7.4.4) Esecuzione Remota di Codice nel Back Office (CVE-2018-19126)

Vedi Repository
39107 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Esecuzione di codice in remoto nel Back Office di PrestaShop (CVE-2018-19126)

Questo è il PoC per la CVE-2018-19126, che combina più vulnerabilità nel Back Office di PrestaShop per attivare la deserializzazione tramite phar e ottenere l'esecuzione di codice in remoto.

Prerequisiti:

  • PrestaShop 1.6.x precedente alla 1.6.1.23 o 1.7.x precedente alla 1.7.4.4.
  • Account Back Office (logistico, traduttore, venditore, ecc.).

Nota di rilascio di PrestaShop: http://build.prestashop.com/news/prestashop-1-7-4-4-1-6-1-23-maintenance-releases/

Link al pacchetto vulnerabile: https://assets.prestashop2.com/en/system/files/ps_releases/prestashop_1.7.4.3.zip

AVVERTENZA

SOLO PER SCOPI EDUCATIVI. NON UTILIZZARE QUESTO SCRIPT PER ATTIVITÀ ILLEGALI. L'AUTORE NON È RESPONSABILE DI QUALSIASI USO IMPROPRIO O DANNO.

Esempio

È necessario php con l'estensione curl e impostare phar.readonly = Off in per eseguire l'exploit.

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'

Nota che la directory di upload verrà rinominata e non potrai caricare di nuovo il file phar malevolo se il nome della cartella non viene ripristinato. Potresti voler eseguire una reverse shell per ottenere una RCE persistente o includere nel payload il comando per rinominare nuovamente la cartella (devi conoscere il percorso della directory di upload).

Spiegazione

Possiamo ottenere deserializzazione implicita con il wrapper phar tramite la funzione getimagesize() in [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);
    }

Dobbiamo trovare il modo affinché getimagesize() venga chiamata con l'URL del wrapper phar come parametro, bypassando alcuni controlli.

Il primo controllo con realpath() è piuttosto restrittivo.

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

La variabile $upload_dir proviene da config.php, che è impostata con $upload_dir = Context::getContext()->shop->getBaseURI().'img/cms/'; di default. Non possiamo usare phar://[string] in $_POST['path'] perché realpath(dirname(_PS_ROOT_DIR_.$_POST['path'])) restituirà false in quanto non esiste.

Esiste un'altra vulnerabilità (CVE-2018-19125) che consente all'utente di eliminare o rinominare $upload_dir. Se la directory $upload_dir non esiste, realpath(_PS_ROOT_DIR_.$upload_dir) restituirà false e possiamo bypassare questo controllo perché anche realpath(dirname(_PS_ROOT_DIR_.$_POST['path'])) è false. Questa vulnerabilità è stata scoperta durante la revisione del codice mentre si cercava il modo per il bypass :).

In breve, CVE-2018-19125 consente che il parametro path nella chiamata alle azioni delete_folder o rename_folder in execute.php sia vuoto, così l'applicazione eliminerà/rinominerà $upload_dir al suo posto.

Il secondo controllo è semplice: $_POST['path'] deve contenere $upload_dir.

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

Possiamo semplicemente aggiungere /img/cms/ all'URL phar dopo il percorso del file phar perché se la directory non esiste all'interno dell'archivio phar, la deserializzazione avviene comunque. La funzione substr_replace($_POST['path'], $current_path, $pos, strlen($upload_dir)) sostituirà solo /img/cms/ con il percorso assoluto ($current_path) di quella cartella (ad es. /var/www/html/img/cms/ se l'applicazione è installata in /var/www/html/).

Poiché possiamo controllare la funzione getimagesize() per elaborare un URL con wrapper phar, dobbiamo caricare il file phar malevolo sul server. Di default, FileManager in PrestaShop consente solo 'jpg', 'jpeg', 'png', 'gif', 'bmp', 'tiff', 'svg', 'pdf', 'mov', 'mpeg', 'mp4', 'avi', 'mpg', 'wma', 'flv' e 'webm' come estensioni. Possiamo semplicemente creare il payload e salvarlo con un'estensione valida. Possiamo usare le gadget chain Monolog di PHPGGC (https://github.com/ambionics/phpggc/blob/master/gadgetchains/Monolog/RCE/1/) poiché sono usate da PrestaShop.

Passaggi finali dello sfruttamento:

  1. Crea il file phar malevolo e salvalo con un'estensione valida (ad es. phar.pdf).
  2. Carica il file phar.pdf su FileManager.
  3. Attiva la vulnerabilità per rinominare la directory di upload con un altro nome (ad es. renamed).
  4. Chiama l'azione image_size con phar://../../img/renamed/phar.pdf/img/cms/ come parametro path.
  5. Il payload di deserializzazione in phar.pdf verrà eseguito.

Lo script exploit.php eseguirà automaticamente tutti i passaggi.

Ricorda che la directory di upload viene rinominata al passaggio 3 e non puoi caricare di nuovo il file phar malevolo se il nome della cartella non viene ripristinato. Potresti voler usare una reverse shell come payload o includere nel payload il comando per rinominare nuovamente la cartella (devi conoscere il percorso della directory di upload).

Scarica lo strumento