Drupal RCE
Con il Modulo PHP Filter
Nelle versioni precedenti di Drupal (prima della versione 8), era possibile accedere come amministratore e abilitare il modulo PHP filter
, che "Consente di valutare codice/frammenti PHP incorporati." Ma dalla versione 8 questo modulo non è installato per impostazione predefinita.
È necessario che il plugin php sia installato (verifica accedendo a /modules/php e se restituisce un 403 allora, esiste, se non trovato, allora il plugin php non è installato)
Vai su Moduli -> (Controlla) PHP Filter -> Salva configurazione
Quindi clicca su Aggiungi contenuto -> Seleziona Pagina di base o Articolo -> Scrivi shellcode php nel corpo -> Seleziona Codice PHP in Formato testo -> Seleziona Anteprima
Infine accedi semplicemente al nodo appena creato:
Installare il Modulo Filtro PHP
Nelle versioni attuali non è più possibile installare plugin avendo accesso solo al web dopo l'installazione predefinita.
Dalla versione 8 in poi, il modulo Filtro PHP non è più installato per impostazione predefinita. Per sfruttare questa funzionalità, dovremmo installare il modulo noi stessi.
Scaricare la versione più recente del modulo dal sito web di Drupal.
wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
Una volta scaricato, andare su
Amministrazione
>Report
>Aggiornamenti disponibili
.Fare clic su
Sfoglia
, selezionare il file dalla directory in cui lo abbiamo scaricato e poi fare clic suInstalla
.Una volta installato il modulo, possiamo fare clic su
Contenuto
e creare una nuova pagina di base, simile a quanto fatto nell'esempio di Drupal 7. Di nuovo, assicurarsi 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 archivio.
Scaricare l'archivio ed estrarne i contenuti.
Creare una shell web PHP con il contenuto:
Successivamente, dobbiamo creare un file
.htaccess
per darci accesso alla cartella. Questo è necessario poiché Drupal nega l'accesso diretto alla cartella/modules
.
La configurazione sopra applicherà le regole per la cartella / quando richiediamo un file in /modules. Copia entrambi questi file nella cartella captcha e crea un archivio.
Presumendo di avere accesso amministrativo al sito web, fare clic su
Gestisci
e poi suEstendi
nella barra laterale. Successivamente, fare clic sul pulsante+ Installa nuovo modulo
, e saremo portati alla pagina di installazione, come ad esempiohttp://sito-drupal.locale/admin/moduli/installa
. Navigare nell'archivio Captcha backdoored e fare clic suInstalla
.Una volta completata l'installazione, navigare a
/moduli/captcha/shell.php
per eseguire comandi.
Backdooring Drupal con la sincronizzazione della configurazione
Post condiviso da Coiffeur0x90
Parte 1 (attivazione di Media e Media Library)
Nel menu Estendi (/admin/moduli), è possibile attivare ciò che sembrano essere plugin già installati. Di default, 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 voci di configurazione di Drupal:
/admin/config/development/configuration/single/export
/admin/config/development/configuration/single/import
Patch system.file.yml
Iniziamo applicando la patch alla prima voce allow_insecure_uploads
da:
File: system.file.yml
A:
File: system.file.yml
Applica la patch al campo field.field.media.document.field_media_document.yml
Successivamente, applica la patch alla 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 è noto che è possibile definire l'ingresso
file_directory
in modo arbitrario ed è vulnerabile a un attacco di attraversamento del percorso (quindi possiamo tornare indietro all'interno dell'albero del filesystem di Drupal).
Parte 3 (sfruttando la funzionalità Aggiungi documento)
L'ultimo passo è il più semplice, ed è suddiviso in due sotto-passaggi. Il primo consiste nel 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é è figo questo trucco?
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 verrà visualizzato 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 dimensioni, perfetto per aggiungere un piccolo snippet di codice PHP in mezzo (dato che il file è abbastanza grande).
File: LICENSE.txt Patchato
Parte 3.1 (caricamento file .htaccess)
Innanzitutto, sfruttiamo la funzionalità Aggiungi documento (/media/add/document) per caricare il nostro file contenente le direttive Apache (.htaccess).
Parte 3.2 (caricamento file LICENSE.txt)
Successivamente, sfruttiamo nuovamente la funzionalità 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 atteso 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 delle shell.
Last updated