In questo articolo vedremo come utilizzare Weevely, uno strumento essenziale nella cassetta degli attrezzi del penetration tester professionale, come in quella del web master che necessita una gestione più completa del proprio spazio web.
Nell'ottica del penetration tester, una volta violato un sistema è pratica comune cercare di mantenere l'accesso in modo da poter operare in un secondo momento senza ripetere l'attacco. È sufficiente caricare sul web server uno script PHP generato da Weevely, per accedere via client alla macchina remota come se fossimo collegati via ssh. Oltre alla shell completa, Weevely è corredato di moduli aggiuntivi dedicati sia all post-exploiting durante un pentest andato a buon fine, sia alla gestione di una web shell di nostra proprietà.
Weevely client
Il terminale di Weevely fornisce un ambiente simile ad una shell ssh permettendo la navigazione del filesystem e l'esecuzione dei comandi sul server remoto. Anche in ambienti PHP con restrizioni di sicurezza, Weevely tenta diversi approcci per fornire all'utente una shell funzionante; ad esempio in caso di PHP safe mode abilitato, è comunque possibile eseguire moduli, navigare, listare e aprire i file remoti accessibili.
Per avviare un terminale è sufficiente avviare Weevely con l'URL della backdoor e la password
weevely.py http://target.com/weevely.php password
Weevely server
La backdoor PHP
Il codice PHP della backdoor da installare sul webserver presenta le seguenti caratteristiche:
- Offuscato: nessuna funzione PHP maliziosa è scritta in chiaro nel codice
- Polimorfico: ogni creazione della stessa backdoor genera codice diverso
- Funzioni iniettate dinamicamente: backdoor di dimensioni ridotte, circa mezzo KByte
Le comunicazioni tra il client e la backdoor PHP presente nel server sono offuscate in maniera analoga all'interno di campi dell'HTTP header poco registrati e ispezionati, quali Cookie e HTTP Referer. Queste accortezze rendono la backdoor difficilmente rilevabile con sistemi basati su firma usati da antivirus e IDS.
Il codice backdoor generato, già offuscato, può essere ulteriormente nascosto all'interno di altri file, non solo PHP. I generatori di Weevely sono dei moduli che automatizzano la creazione di backdoor all'interno di file immagine (generate.img) o all'interno di .htaccess (generate.htaccess).
Per generare la backdoor weevely.php con il generatore di default generate (equivalente a generate.php) è sufficiente eseguire
weevely.py generate <password>
Per mostrare una descrizione dettagliata degli altri generatori inviare il comando
weevely.py show generate
Altri dettagli dei generatori sono descritti sul wiki di Weevely.
Moduli Weevely
Oltre all'interprete dei comandi, Weevely fornisce un set di moduli per automatizzare alcuni compiti o permettere di eseguirli in ambienti con restrizioni di sicurezza abilitate. I moduli si invocano come un normale comando del terminale precedendo il loro nome dai due punti, come da esempio:
:nome.modulo <parametro1> <parametro2> ..
Per mostrare la descrizione di un modulo ed i parametri richiesti, usiamo:
:show nome.modulo
Oppure per mostrare tutti i moduli disponibili digitare semplicemente:
:show
Nel terminale è disponibile l'autocompletamento dei nomi dei moduli, listabili premendo due volte il tasto <tab>.
Una descrizione dettagliata dei moduli è presente sul wiki di Weevely.
Moduli :file
I moduli :file consentono l'interazione col filesystem remoto. Si possono scaricare e caricare con :file.download e :file.upload, cancellare con :file.rm e leggere i file remoti con :file.read. Un altro modulo, :file.enum, facilita l'enumerazione dei permessi di una lista di path.
Moduli :find
I moduli :find effettuano ricerche per nome con :find.name, per tipo e permessi con :find.perms o per bit suid con :find.suidsgid. Il modulo :find.webdir cerca una directory scrivibile a partire dalla directory corrente, per ricavarne la URL corrispondente. Utile per mappare le directory del filesystem con i corrispettivi URL HTTP.
Moduli :sql
I moduli :sql interfacciano attraverso il nostro target con dbms mysql o postgresql situati sul nostro stesso target o su macchine remote. Una console SQL completa è emulabile con :sql.console, :sql.dump esegue il dump del database in modo da replicarlo interamente stile mysqldump, e :sql.summary stampa un sommario della struttura.
Moduli :bruteforce
I moduli :bruteforce eseguono un attacco di forza bruta su servizi SQL o FTP. Passando ai moduli :bruteforce.sql e :bruteforce.ftp una wordlist locale, si effettua attraverso il nostro target un bruteforce sul target stesso o sulla macchina remota desiderata. I moduli :bruteforce.sql_users e :bruteforce.ftp_users effettuano il bruteforce in automatico su tutti gli utenti del target.
Moduli :net
I moduli :net permetto l'interazione con le reti alle quali è collegato il nostro target. I moduli proxy permettono di navigare anonimamente attraverso il target verso la rete internet o verso reti adiacenti alla macchina, ma non pubblicamente accessibili.
:net.proxy installa uno speciale script all'interno della macchina target, per poi aprire una porta in locale, di default la 8080, esponendo un servizio proxy HTTP completo. Basterà settare nel vostro browser preferito il server proxy http://localhost:8080 per poter navigare anonimamente utilizzando l'IP del target. :net.php_proxy installa un PHP proxy script, dal quale poter navigare anonimamente su www.sito.com richiamando l'url http://www.target.com/path/dello/script.php?c=www.sito.com
:net.scan esegue un port scan dalla macchina target verso macchine remote. Supporta diversi formati di indirizzi destinazione e porte, in maniera simile a nmap.
Moduli :audit
I moduli :audit automatizzano alcuni controlli di sicurezza sul sistema remoto.
:audit.etc_passwd enumera le righe del file /etc/passwd anche in caso le funzioni PHP di apertura file o esecuzione di comandi siano disabilitate. :audit.user_file enumera i permessi dei file di sistema nelle directory /home/* e i più comuni file di configurazione dei CMS in /home/*/public_html/. Nei server di hosting condiviso è comune trovare file di configurazione leggibili da cui sottrrarre credenziali di altri utenti. :audit.user_web_file controlla i permessi dei singoli file di un sito web che risiede sull'host target ma di cui non abbiamo i permessi per accedervi dall'interno. Per prima cosa mappa la struttura del sito web in oggetto usando un crawler, per poi enumerare i permessi dei singoli file dall'interno, alla ricerca di path erroneamente scrivibili o leggibili.
Moduli :backdoor
I moduli :backdoor sono usati per esporre una shell di sistema su porta TCP nel caso di :backdoor.tcp, o inviare una TCP reverse shell a una porta in ascolto con :backdoor.reverse_tcp. Per utilizzare la reverse shell, è sufficiente aprire in locale una porta con netcat ed aspettare che la macchina remota si connetta fornendo l'accesso.
Conclusioni
Weevely è un progetto tutto italiano, frutto del lavoro di Emilio Pinna sviluppatore ed appassionato di sicurezza. Attualmente viene mantenuto con il supporto del team di BackBox Linux. Basterà scaricare ed avviare la distro in modalità live per iniziare ad utilizzare questo tool. La community mette inoltre a disposizione i pacchetti aggiornati (.deb), installabili su qualsiasi distro debian based.
NOTA. Come ogni tool per penetration testing ricordiamo che un uso non appropriato di Weevely può essere considerato una violazione e perseguibile per vie legali.
Si ringrazia Emilio Pinna, creatore di Weevely, per la collaborazione nella realizzazione dell'articolo.