Pivotaje en la Red

El concepto de pivoting es el conjunto de técnicas que podemos usar para utilizar un sistema comprometido a modo de “puente” con el objetivo de acceder a otros equipos o redes a través de él. Normalmente a sistemas o infraestructuras a las que no disponíamos de acceso previamente.

Como cabe esperar, para poder realizar pivoting hace falta comprometer un sistema objetivo y obtener privilegios elevados. En caso de obtener unos privilegios de acceso de usuario estándar no tendremos los permisos necesarios para poder crear servicios de red a modo de proxy ni encaminar tráfico a través de la víctima.

Aunque existen varias técnicas de pivoting las más utilizadas son las siguientes:

  • Pivoting con SSH
  • Pivoting con meterpreter
  • Pivoting con HTTP

Pivoting con SSH
La herramienta ssh nos ofrece la posibilidad de conectarnos de manera remota a un servidor SSH . Pero también nos permite establecer un túnel entre el cliente ssh y el servidor que funcionará a modo de proxy socks.

Para poder utilizar esta técnica necesitamos disponer de credenciales en el servidor SSH que queremos utilizar a modo de router, es decir, para pivotar en la red.

El funcionamiento es muy sencillo, haciendo uso del operador -D del cliente ssh, generaremos un proxy shock dinámico en la interfaz localhost de nuestro equipo. Todas las comunicaciones que se establezcan a través de este proxy se reenviarán a través del túnel SSH establecido con la máquina víctima.

A continuación se muestra un ejemplo en el que se inicia un servidor proxysocks en el puerto TCP 9050 de nuestra interfaz localhost y todas las comunicaciones que se realicen a través de ese proxy se enrutan a través del túnel SSH contra el servidor SSH de la dirección IP 192.168.0.15 (Que utilizamos como pivote)

$ ssh -D 127.0.0.1:9050 root@192.168.0.15

Para poder establecer la comunicación con el Proxy iniciado en nuestro equipo habrá que utilizar un cliente proxy en el sistema. Normalmente utilizaremos los siguientes clientes proxy:

  • Navegador web.
  • Proxychains en Linux.

Pivoting con meterpreter
Entre otras muchas opciones, el payload de meterpreter permite utilizarse como punto de pivoting para poder tunelizar las conexiones de un atacante a la red interna.

Una vez comprometida una máquina remota con el payload de meterpreter, y teniendo una sesión activa, podemos utilizar la sesión para enrutar el tráfico.

Estableciendo la ruta
En el propio Metasploit podemos utilizar el comando route para indicar que queremos enrutar todas las comunicaciones a una determinada red a través de una determinada sesión activa de meterpreter.

El comando utilizado en metasploit es muy similar al comando route utilizado para establecer una ruta de red, pero en vez de indicar un gateway para acceder a la red se indica una sesión activa de meterpreter.

Para poder establecer la ruta en Metasploit se utiliza el comando route indicando que se va a añadir la ruta seguido de la red y la máscara de la red a la que queremos acceder y por último indicar la sesión activa de meterpreter que nos enrutará el tráfico a esa red:

Metasploit> route add <network> <netmask> <meterpreter_session_id>

El siguiente ejemplo muestra una ruta en que le indica a Metasploit que para acceder a la red 192.168.100.0/24 se enrute el tráfico a través de la sesión número 2 de meterpreter.

Metasploit> route add 192.168.100.0 255.255.255.0 2

En el momento en el que se establezca la ruta, todas las conexiones que se realicen desde Metasploit para acceder a la red 192.168.100.0/24 se enrutarán por la session 2 de meterpreter.

Si queremos que esta ruta esté disponible para que desde otros programas se pueda utilizar este enrutamiento habrá que hacer uso de un módulo auxiliar de Metasploit para que funcione como Proxy Socks.

Iniciando proxysocks en Metasploit
En Metasploit existe un módulo auxiliar (socks_proxy) que permite levantar un proxysocks en Metasploit para que se puedan enrutar conexiones desde fuera de Metasploit a través del túnel creado.

Metasploit> use auxiliary/server/socks_proxy

El módulo dispone de varias opciones de configuración:

  • Requerir autenticación (user:password)
  • IP en la que dará servicio el proxy (cualquier IP, localhost)
  • Puerto en el que se inicia el proxy
  • Versión del proxy socks (4a o 5)

Pivoting a través de HTTP
De la misma manera que si tenemos un sistema comprometido se puede utilizar para pivotar. También podremos hacer una acción similar si tenemos la posibilidad de comprometer una web a través de “file inclusion” (subir ficheros para generar una webshell).

Existen varias herramientas para realizar esta acción. Sin embargo mostraremos las más comunes:

  • reGeorg

La herramienta reGeorg tiene disponibles 7 agentes distintos (ashx, aspx, jsp, js y php) para que se puedan desplegar en el servidor web comprometido. En el siguiente enlace (https://github.com/sensepost/reGeorg) podéis acceder a la página oficial de reGeorg.

El siguiente comando levanta el proxysocks en el puerto 8080 de localhost para tunelizar a través del agente web.

$ python reGeorgSocksProxy.py -p 8080 -u http://domain.com/ /tunnel/tunnel.jsp

  • pivotnacci
La herramienta pivotnacci tiene disponibles 3 agentes distintos (aspx, jsp y php) para que se puedan desplegar en el servidor web comprometido. Sus características más importantes son las siguientes:
  • Autenticación mediante contraseñas
  • Configuración de cabeceras HTTP (como host y agent)

En el siguiente enlace (https://github.com/blackarrowsec/pivotnacci) podéis acceder a la página oficial de pivotnacci.

El siguiente comando levanta el proxysocks en el puerto 1080 de localhost para tunelizar a través del agente web

$ pivotnacci https://domain.com/agent.php --password "s3cr3t” –p 1080

Todas las herramientas se basan en el despliegue de agentes en el servidor web comprometido (sería la webshell) y un cliente que se pone en contacto con el agente para enrutar el tráfico.

Utilizando el cliente proxy
Una vez que hemos iniciado algún proxysocks, utilizando las técnicas descritas en las secciones anteriores, tenemos que hacer uso de los proxies que hubiéramos implementado para poder tunelizar las conexiones hacia las redes internas.

Navegador web como cliente proxy
Si únicamente queremos utilizar el proxy para acceder a otros servidores web a los que no tuviéramos acceso en un principio podemos hacerlo directamente en nuestro navegador web.

Para ello accederemos a la configuración o preferencias del navegador web y buscaremos el apartado en el que se puede indicar al navegador que utilice un determinado proxy web.

Una vez se indica que utilice el proxy cualquier navegación será tunelizada a través de él.

Proxychains como cliente proxy
Si queremos tunelizar una herramienta de consola a través de los proxies establecidos deberemos utilizar proxychains.

Configuración: La configuración de proxychains se realiza a través del fichero /etc/proxychains.conf y se establece el proxy a utilizar:

<tipo_de_proxy> <ip_proxy> <puerto_proxy> 

Por ejemplo, la siguiente configuración le indica a proxychains que utilice el proxysocks5 que hay en el puerto TCP 1080 de la interfaz localhost:

socks5 127.0.0.1 1080 

Para utilizar cualquier herramienta con el proxy se pone “proxychains” delante del comando que queremos tunelizar:

$ proxychains nmap -sS 172.16.1.0/24 --top-ports 100