Drupal RCE
Con il modulo PHP Filter
Nelle versioni più vecchie di Drupal (prima della versione 8), era possibile accedere come admin e abilitare il modulo PHP filter
, che "Consente di valutare codice/snippet PHP incorporati." Ma dalla versione 8 questo modulo non è installato per impostazione predefinita.
È necessario che il plugin php sia installato (controlla accedendo a /modules/php e se restituisce un 403 allora, esiste, se non trovato, allora il plugin php non è installato)
Vai su Modules -> (Controlla) PHP Filter -> Salva configurazione
Poi clicca su Aggiungi contenuto -> Seleziona Pagina base o Articolo -> Scrivi php shellcode nel corpo -> Seleziona Codice PHP in Formato testo -> Seleziona Anteprima
Infine accedi semplicemente al nodo appena creato:
Installa il modulo PHP Filter
Nelle versioni attuali non è più possibile installare plugin avendo accesso solo al web dopo l'installazione predefinita.
A partire dalla versione 8, il PHP Filter modulo non è installato di default. Per sfruttare questa funzionalità, dovremmo installare il modulo noi stessi.
Scarica l'ultima versione del modulo dal sito di Drupal.
wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
Una volta scaricato, vai su
Amministrazione
>Report
>Aggiornamenti disponibili
.Clicca su
Sfoglia
, seleziona il file dalla directory in cui lo abbiamo scaricato e poi clicca suInstalla
.Una volta installato il modulo, possiamo cliccare su
Contenuto
e creare una nuova pagina base, simile a come abbiamo fatto nell'esempio di Drupal 7. Ancora una volta, assicurati di selezionareCodice PHP
dal menu a discesaFormato testo
.
Modulo con backdoor
Nelle versioni attuali non è più possibile installare plugin avendo accesso solo al web dopo l'installazione predefinita.
Un modulo con backdoor può essere creato aggiungendo una shell a un modulo esistente. I moduli possono essere trovati sul sito drupal.org. Scegliamo un modulo come CAPTCHA. Scorri verso il basso e copia il link per l'archivio tar.gz archive.
Scarica l'archivio ed estrai il suo contenuto.
Crea un PHP web shell con i contenuti:
Successivamente, dobbiamo creare un
.htaccess
file per darci accesso alla cartella. Questo è necessario poiché Drupal nega l'accesso diretto alla cartella/modules
.
La configurazione sopra applicherà regole per la cartella / quando richiediamo un file in /modules. Copia entrambi questi file nella cartella captcha e crea un archivio.
Assumendo di avere accesso amministrativo al sito web, clicca su
Gestisci
e poi suEstendi
nella barra laterale. Successivamente, clicca sul pulsante+ Installa nuovo modulo
, e verremo portati alla pagina di installazione, comehttp://drupal-site.local/admin/modules/install
. Naviga fino all'archivio del Captcha backdoored e clicca suInstalla
.Una volta completata l'installazione, naviga su
/modules/captcha/shell.php
per eseguire comandi.
Backdooring Drupal con sincronizzazione della configurazione
Post condiviso da Coiffeur0x90
Parte 1 (attivazione di Media e Media Library)
Nel menu Estendi (/admin/modules), puoi attivare quelli che sembrano essere plugin già installati. Per impostazione predefinita, i plugin Media e Media Library non sembrano essere attivati, quindi attiviamoli.
Prima dell'attivazione:
Dopo l'attivazione:
Parte 2 (sfruttare la funzionalità Sincronizzazione della configurazione)
Sfrutteremo la funzionalità Sincronizzazione della configurazione per esportare e importare le voci di configurazione di Drupal:
/admin/config/development/configuration/single/export
/admin/config/development/configuration/single/import
Patch system.file.yml
Iniziamo patchando la prima voce allow_insecure_uploads
da:
File: system.file.yml
A:
File: system.file.yml
Patch field.field.media.document.field_media_document.yml
Quindi, patcha la seconda voce file_extensions
da:
File: field.field.media.document.field_media_document.yml
A:
File: field.field.media.document.field_media_document.yml
Non lo uso in questo post del blog, ma è importante notare che è possibile definire l'entry
file_directory
in modo arbitrario e che è vulnerabile a un attacco di traversata del percorso (quindi possiamo risalire all'interno dell'albero del filesystem di Drupal).
Parte 3 (sfruttando la funzionalità Aggiungi Documento)
L'ultimo passaggio è il più semplice e si suddivide in due sotto-passaggi. Il primo è caricare un file in formato .htaccess per sfruttare le direttive di Apache e consentire ai file .txt di essere interpretati dal motore PHP. Il secondo è caricare un file .txt contenente il nostro payload.
File: .htaccess
Perché questo trucco è interessante?
Perché una volta che il Webshell (che chiameremo LICENSE.txt) è stato caricato sul server Web, possiamo trasmettere i nostri comandi tramite $_COOKIE
e nei log del server Web, questo apparirà come una richiesta GET legittima a un file di testo.
Perché chiamare il nostro Webshell LICENSE.txt?
Semplicemente perché se prendiamo il seguente file, ad esempio core/LICENSE.txt (che è già presente nel core di Drupal), abbiamo un file di 339 righe e 17,6 KB di dimensione, che è perfetto per aggiungere un piccolo frammento di codice PHP nel mezzo (dato che il file è abbastanza grande).
File: Patched LICENSE.txt
Parte 3.1 (carica file .htaccess)
Per prima cosa, sfruttiamo la funzione Aggiungi Documento (/media/add/document) per caricare il nostro file contenente le direttive Apache (.htaccess).
Parte 3.2 (carica file LICENSE.txt)
Poi, sfruttiamo di nuovo la funzione Aggiungi Documento (/media/add/document) per caricare un Webshell nascosto all'interno di un file di licenza.
Parte 4 (interazione con il Webshell)
L'ultima parte consiste nell'interagire con il Webshell.
Come mostrato nello screenshot seguente, se il cookie previsto dal nostro Webshell non è definito, otteniamo il risultato successivo quando consultiamo il file tramite un browser Web.
Quando l'attaccante imposta il cookie, può interagire con il Webshell ed eseguire qualsiasi comando desideri.
E come puoi vedere nei log, sembra che sia stato richiesto solo un file txt.
Grazie per aver dedicato del tempo a leggere questo articolo, spero che ti aiuti a ottenere alcune shell.
Last updated