Chisel es una herramienta super útil para usar tanto en máquinas Windows como Linux. Nos permite de forma muy cómoda prácticamente obtener las mismas funciones que SSH (en el aspecto de Port Forwarding).

Índice

Introducción

Se puede descargar desde su repositorio oficial de Chisel en GitHub. Ahí podemos encontrar los diferentes paquetes para los distintos sistemas, tanto Windows como Linux:

Paquetes de Chisel disponibles para descarga

Paquetes de Chisel

En este caso el “laboratorio” es el siguiente:

  • 3 Equipos
    • Kali —> Mi equipo de atacante
      • IP: 192.168.10.10
    • Windows 7 de 32 Bits
      • IP: 192.168.10.30 y 192.168.20.30 —> 2 Interfaces de Red
    • Debian —> Servidor Web y SSH - Puerto 22 y 80 activados
      • IP: 192.168.20.20 y 192.168.30.10 —> 2 Interfaces de Red (aunque la segunda para este post es irrelevante)

Diagrama del laboratorio de pivoting con Chisel

Lab

Como Chisel también es una herramienta que sirve en Windows, vamos a mezclar ambos sistemas, ya que es totalmente compatible.

Primero de todo descargamos las versiones correspondientes de chisel tanto para la máquina Kali como para la máquina Windows, ya que Chisel funciona mediante una arquitectura cliente-servidor. Una vez descargado nos aseguramos de que funcione:

Verificación de Chisel en Kali

Kali

Verificación de Chisel en Windows 7

Windows 7 - 32 Bits

Una vez tenemos todo listo, vamos a ver las posibilidades que nos ofrece Chisel. Realmente, con esta herramienta podemos simular y hacer todos los forwardings que SSH puede, es decir:

  • Local Port Forwarding
  • Remote Port Forwarding
  • Dynamic Port Forwarding

Y todo sin la necesidad de SSH, lo que nos permite prácticamente poder usar Chisel en casi cualquier situación de forma que no dependamos de este protocolo. Además, de forma conceptual, todos los forwardings funcionan de la misma forma que en SSH.

Local Port Forwarding

Sabiendo que la arquitectura es cliente-servidor, y que estamos ante el Local Port Forwarding, tenemos que establecer el servidor, en este caso, en la máquina Windows. Para ello, la sintaxis es bastante sencilla:

chisel server -p <puerto>

Tenemos que establecer un puerto el cual será donde chisel funcione y el cliente posteriormente se conecte, por lo que conociendo esto, yo voy a establecer el servidor en el puerto 1234:

Configuración del servidor Chisel para Local Port Forwarding

Chisel Server en Local Port Forwarding

Con esto establecido, ahora solo tenemos que ir a nuestro Kali para que se conecte como cliente, la sintaxis en este caso es un poquito mas compleja ya que le tenemos que especificar a que IP y puerto queremos llegar:

chisel client <dirección servidor chisel>:<puerto servidor chisel> <puerto local a abrir>:<dirección a donde apuntar>:<puerto a apuntar de la direccion donde se apunta>

En este caso:

Configuración del cliente Chisel para Local Port Forwarding

Chisel Cliente en Local Port Forwarding

Como vemos, chisel nos indica que nos hemos conseguido conectar, si no fuese ésto, se comportaría de la siguiente forma:

Error de conexión en Chisel

Error si Chisel no se conecta

Pero en este caso, nos conectamos sin problemas. Con esto, ya solo tenemos que ir al puerto local que hemos abierto, en este caso el 80, el que supuestamente está apuntando al puerto 80 de la 192.168.20.20 (el servidor web vaya):

Acceso exitoso al servidor web a través del túnel

Servidor Web

Como vemos, llegamos sin problemas.

Chisel también permite tunelizar varios puertos al mismo tiempo, siendo la sintaxis de esta forma:

A = chisel client <dirección servidor chisel>:<puerto servidor chisel>

B = <puerto local a abrir>:<dirección a donde apuntar>:<puerto a apuntar de la direccion donde se apunta>

La sintaxis para tunelizar varios puertos seria entonces la siguiente:

A + B + B + B + B… etc…

Ejemplo:

Tunelización de múltiples puertos con Chisel

Tunelización de varios puertos

Además del puerto 80, estamos tunelizando el puerto 22 (SSH), por lo que:

Conexión SSH exitosa a través del túnel

Conexión SSH

Vemos que nos conectamos a la máquina que hemos especificado.

Remote Port Forwarding

Al contrario que en el Local Port Forwarding, en el Remote Port Forwarding, el servidor se coloca en el Kali, mientras que el cliente sería el Windows.

La sintaxis tanto para el cliente como para el servidor tiene algunas variaciones, en este caso, los comandos serían:

  • Servidor —> Kali
chisel server -p <puerto> --reverse
  • Cliente —> Windows
chisel client <dirección servidor chisel>:<puerto servidor chisel> R:<puerto a abrir en el servidor de chisel>:<dirección a donde apuntar>:<puerto a apuntar de la direccion donde se apunta>

Sabiendo esto, establecemos el servidor en nuestro kali:

Configuración del servidor Chisel en Kali

Chisel Server en el puerto 1234

Con esto, nos conectamos desde el Windows a nuestra máquina Kali:

Conexión del cliente Windows al servidor Chisel

Conexión Cliente-Servidor

Si miramos ahora nuestro Kali podemos ver como se ha conectado correctamente:

Confirmación de conexión exitosa en el servidor

Conexión exitosa con Chisel

De esta forma, analizando y trayendo el comando ejecutado en el cliente:

chisel client 192.168.10.10:1234 R:80:192.168.20.20:80

Deberíamos en nuestro kali desde nuestro puerto 80, poder acceder al puerto 80 de la 192.168.20.20 (el Servidor Web):

Acceso al servidor web mediante Remote Port Forwarding

Accedemos al Servidor Web

Como vemos llegamos sin problemas.

Al igual que en el Local Port Forwarding, podemos tunelizar varios puertos con la misma conexión de Chisel, se haría de la misma forma:

A = chisel client <dirección servidor chisel>:<puerto servidor chisel>

B = R:<puerto a abrir en el servidor de chisel>:<dirección a donde apuntar>:<puerto a apuntar de la direccion donde se apunta>

La sintaxis para tunelizar varios puertos seria entonces la siguiente:

A + B + B + B + B… etc…

Ejemplo:

Tunelización de múltiples puertos desde el cliente

Tunelización de 2 Puertos desde el Cliente

Respuesta del servidor a la tunelización

Respuesta a Tunelización de dos puertos

De esta forma, podemos acceder no solo puerto 80 de la máquina, sino también al puerto 22:

Conexión SSH mediante tunelización múltiple

Conexión SSH exitosa

Vemos que funciona perfectamente.

Dynamic Port Forwarding

Con el Dynamic Port Forwarding podemos tunelizar todos los puertos, creando un proxy SOCKS. El funcionamiento y uso es exactamente el mismo que el proxy de SSH.

Chisel nos permite tanto crear un Forward Proxy como un Reverse Proxy. A nivel de uso, se suele usar mas el Reverse Proxy, por la misma razón que las Reverse Shells son mas famosas que las Bind Shells. Hablando de forma genérica, un Reverse Proxy o una Reverse Shell te dará menos problemas en cuanto a firewalls que las otras dos opciones (Forward y Bind). En cualquier caso, sea el que sea el proxy que escojas, ambos harán su cometido.

Para cada uno, la sintaxis es un poco distinta:

  • Forward Proxy
    • Servidor —> Windows
      • chisel server -p <puerto> --socks5
    • Cliente —> Kali
      • chisel client <dirección servidor chisel>:<puerto servidor chisel> <puerto que actuará como proxy>:socks
  • Reverse Proxy
    • Servidor —> Kali
      • chisel server -p <puerto> --reverse
    • Cliente —> Windows
      • chisel client <dirección servidor chisel>:<puerto servidor chisel> R:<puerto que actuará como proxy>:socks

Recordatorio del diagrama del laboratorio

Recordatorio del Lab

Vamos a ver ambos de forma práctica, pero antes, configuramos el firefox para que tire contra el puerto 1080, que será el puerto donde en cada caso de cada proxy funcionará éste (para que no tengamos que cambiarlo).

Configuración del proxy SOCKS en Firefox

Configuración Firefox

Con esto listo, vamos a empezar.

  • Forward Proxy

Configuración del servidor para Forward Proxy

Servidor

Configuración del cliente para Forward Proxy

Cliente

De esta forma, si intentamos acceder a la IP 192.168.20.20 en Firefox:

Acceso exitoso mediante Forward Proxy

Conexión exitosa

Vemos que accedemos.

  • Reverse Proxy:

Configuración del servidor para Reverse Proxy

Servidor

Configuración del cliente para Reverse Proxy

Cliente

De esta forma, si intentamos de nuevo acceder al Servidor Web:

Acceso exitoso mediante Reverse Proxy

Conexión exitosa

Seguimos llegando sin problemas.

En este caso, solo estamos usando el proxy para firefox, pero se puede usar para otros programas o comandos. Para ello, podemos hacer uso de Proxychains, el cual aprovechará este proxy SOCKS creado para tramitar todo el tráfico. Esto se puede ver con mayor detalle en el post de Pivoting con Proxychains.