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
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)
- Kali —> Mi equipo de atacante

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:

Kali

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:

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:

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 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):

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 varios puertos
Además del puerto 80, estamos tunelizando el puerto 22 (SSH), por lo que:

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:

Chisel Server en el puerto 1234
Con esto, nos conectamos desde el Windows a nuestra máquina Kali:

Conexión Cliente-Servidor
Si miramos ahora nuestro Kali podemos ver como se ha conectado correctamente:

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):

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 2 Puertos desde el Cliente

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 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
- Servidor —> Windows
- 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
- Servidor —> Kali

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 Firefox
Con esto listo, vamos a empezar.
- Forward Proxy

Servidor

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

Conexión exitosa
Vemos que accedemos.
- Reverse Proxy:

Servidor

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

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.