Network setup
The following sections rely on this network setup.
Copy ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ attacking │ │ compromised │ │ target │
│ machine │ │ machine │ │ machine │
│ (local) │ │ (pivot) │ │ (target) │
│ │ │ │ │ │
│ 10.10.10.2 ◄┼──public──┼► 10.10.10.5 │ │ │
│ │ │ │ │ │
│ │ │ 172.16.0.5 ◄┼──internal──┼► 172.16.0.10 │
│ │ │ │ │ │
└──────────────┘ └──────────────┘ └──────────────┘
Machine name
Short name
User
SSH
Common options
Forward connection (L ocal port forwarding)
Reverse connection (R emote port forwarding)
Socks proxy (D ynamic port forwarding)
Immediately background the shell
Only establish the connection, don't execute any commands
Forward connection (Local port forwarding)
Copy local pivot target
10.10.10.2 10.10.10.5 172.16.0.10
172.16.0.5
│ │ │
│ │ │
│ssh -L 1337:172.16.0.10:80 │ │
├──────────────────────────────►│ │
│ │ │
│nc 127.0.0.1 1337 │ │
├──────────────────────────────►│ 80 │
│ ├──────────────────►│
│ │ │
Setup a local port forward to the target.
Copy ssh -L 1337:172.16.0.10:80 victim@10.10.10.5
Execute command
Copy < cmd >
# Example
nc 127.0.0.1 1337
Reverse connection (Remote port forwarding)
Copy local pivot target
10.10.10.2 10.10.10.5 172.16.0.10
172.16.0.5
│ │ │
│ │ │
│ ssh -R 1337:172.16.0.10:80│ │
│◄──────────────────────────────┤ │
│ │ │
│nc 127.0.0.1 1337 │ │
├──────────────────────────────►│ 80 │
│ ├──────────────────►│
│ │ │
As we will connect back from the target (network) to our own machine, we need to take some precautions to ensure our safety.
Generate a new ssh key pair
Add public key to authorized_keys
with following restrictions
Copy from = "<target-ip>" , command = "echo 'This account can only be used for port forwarding'" ,no-agent-forwarding,no-X11-forwarding,no-pty <pub-key>
Copy sudo systemctl status ssh
Start ssh server (if not already running)
Copy sudo systemctl start ssh
Copy the private key over to the pivot
⚠️ Normally we would never give away our private key, but that's why we're using a new throwaway key pair here! ⚠️
Setup a remote port forward from the pivot.
Copy ssh -R 1337:172.16.0.10:80 me@10.10.10.2 -i throwaway-key
Execute command (example)
Socks proxy (Dynamic port forwarding)
Copy local pivot target
10.10.10.2 10.10.10.5 172.16.0.10
172.16.0.5
│ │ │
│ │ │
│ssh -D 1337 [...] │ │
├────────────────────────────────►│ │
│ │ │
│proxychains nc 172.16.0.10 any │ │
├────────────────────────────────►│ any │
│ ├──────────────────►│
│ │ │
Setup a proxy that forwards any tcp port to any target.
Copy ssh -D 1337 victim@10.10.10.5
proxychains.conf (see also below)
Copy socks5 127.0.0.1 1337
Execute command (example)
Copy proxychains nc 172.16.0.10 80
Socks proxy (reverse)
Copy local pivot target
10.10.10.2 10.10.10.5 172.16.0.10
172.16.0.5
│ │ │
│ │ │
│ ssh -R 1337 [...]│ │
│◄────────────────────────────────┤ │
│ │ │
│proxychains nc 172.16.0.10 any │ │
├────────────────────────────────►│ any │
│ ├──────────────────►│
│ │ │
Copy ssh -R 1337 me@10.10.10.2 -i throwaway-key
Chisel
A fast TCP/UDP tunnel over HTTP
GitHub - jpillora/chisel
Port forwarding
Copy ┌────────┐ ┌────────┐ ┌────────┐
│ local │ │ pivot │ │ target │
│ │ │ │ │ │
│ 9000 ◄┼──chisel───────────┼► 9000 │ │ │
│ │ │ │ │ │
│ 9001 ─┼──port-forwarding──┼────────┼───┼► 80 │
│ │ │ │ │ │
└────────┘ └────────┘ └────────┘
Copy local pivot target
10.10.10.2 10.10.10.5 172.16.0.10
172.16.0.5
│ │ │
│ │ │
│./chisel server -p 9000 -reverse │ │
├──┐ │ │
│ │ │ │
│◄─┘ │ │
│ │ │
│ ./chisel client 10.10.10.2:9000 [...]│ │
│◄───────────────────────────────────────────┤ │
│ │ │
│nc 172.16.0.10 9001 │ │
├───────────────────────────────────────────►│ 80 │
│ ├──────────────────►│
│ │ │
Start server (local)
Copy ./chisel server -p 9000 -reverse
Start client (pivot)
Copy ./chisel client 10.10.10.2:9000 R:127.0.0.1:9001:172.16.0.10:80
Execute command (example)
SOCKS proxy
Copy ┌────────┐ ┌────────┐ ┌────────┐
│ local │ │ pivot │ │ target │
│ │ │ │ │ │
│ 9000 ◄┼──chisel───────────┼► 9000 │ │ │
│ │ │ │ │ │
│ 1080 ─┼──SOCKS─proxy──────┼────────┼───┼► any │
│ │ │ │ │ │
└────────┘ └────────┘ └────────┘
Copy local pivot target
10.10.10.2 10.10.10.5 172.16.0.10
172.16.0.5
│ │ │
│ │ │
│./chisel server -p 9000 -reverse │ │
├──┐ │ │
│ │ │ │
│◄─┘ │ │
│ │ │
│ ./chisel client 10.10.10.2:9000 R:socks│ │
│◄───────────────────────────────────────────┤ │
│ │ │
│proxychains nc 172.16.0.10 any │ │
├───────────────────────────────────────────►│ any │
│ ├──────────────────►│
│ │ │
Start server (local)
Copy ./chisel server -p 9000 -reverse
Start client (pivot)
Copy ./chisel client 10.10.10.2:9000 R:socks
Note: <socks-port>
defaults to 1080, if left out.
Execute command (example)
Copy proxychains nc 172.16.0.10 80
Double pivot (via SOCKS proxies)
Copy ┌─subnet1───────────────────────────┐┌─subnet2───────────────────┐┌─subnet3───────────────┐
│ ││ ││ │
│ ┌─local──┐ ┌─pivot1─┐ ┌─pivot2─┐ ┌─target─┐ │
│ │ │ │ │ │ │ │ │ │
│ │ 9000 ◄├──chisel───────────┤► 9000 │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ │ 9001 ◄├──chisel───────────┤► 9001 │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ 1080 ─┼──SOCKS─proxy──────┼────────┼─► any │ │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ 1081 ─┼───────────────────┼────────┼──SOCKS─proxy──────┼────────┼─► any │ │ │
│ │ │ │ │ │ │ │ │ │
│ └────────┘ └────────┘ └────────┘ └────────┘ │
│ ││ ││ │
└───────────────────────────────────┘└───────────────────────────┘└───────────────────────┘
Copy ┌─subnet1───────────────────────────────────────┐┌─subnet2───────────────────────────────────┐┌─subnet3───────────────┐
local pivot pivot2 target
10.10.10.2 10.10.10.5 172.16.0.10 172.16.1.20
172.16.0.5 172.16.1.10
│ │ │ │
│ │ │ │
│./chisel server -p 9000 -reverse │ │ │
├──┐ │ │ │
│ │ │ │ │
│◄─┘ │ │ │
│ │ │ │
│ ./chisel client 10.10.10.2:9000 R:socks│ │ │
│◄───────────────────────────────────────────┤ │ │
│ │ │ │
│ │./chisel server -p 9001 -reverse │ │
│ ├──┐ │ │
│ │ │ │ │
│ │◄─┘ │ │
│ │ │ │
│ │ ./chisel client 172.16.0.5:9001 R:socks│ │
│ │◄───────────────────────────────────────────┤ │
│ │ │ │
│ │ │ │
│ │ │ │
│proxychains nc <target-ip> any │ │ │
├───────────────────────────────────────────►│ any │ │
│ ├───────────────────────────────────────────►│ any │
│ │ ├──────────────────►│
│ │ │ │
Start server (local)
Copy ./chisel server -p 9000 -reverse
Start client (pivot1)
Copy ./chisel client 10.10.10.2:9000 R:socks
Start another server (pivot1)
Copy ./chisel server -p 9001 -reverse
Start another client (pivot2)
Copy ./chisel client 172.16.0.5:9001 R:socks
Add another proxy to proxychains.conf
(more details on proxychains, see below)
Copy socks5 127.0.0.1 1080
socks5 127.0.0.1 1081
Execute command (example)
Copy proxychains nc 172.16.1.20 80
Verify
E.g.
Copy [...]
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:1337 0.0.0.0:* LISTEN 50883/ssh
tcp6 0 0 ::1:1337 :::* LISTEN 50883/ssh
[...]
proxychains
A tool that forces any TCP connection made by any given application to follow through proxy like TOR or any other SOCKS4, SOCKS5 or HTTP(S) proxy.
GitHub - haad/proxychains: proxychains
Config file
Proxychains looks for configuration in the following order:
~/.proxychains/proxychains.conf
Copy socks5 127.0.0.1 1080
Run command via proxychains
Burp Suite
To use Burp Suite in this setup, just configure the socks proxy there.
Project options
or User options
→ SOCKS Proxy
→ ☑️ Use SOCKS Proxy
SOCKS proxy host:
127.0.0.1
⚠️ Keep your browser pointing to Burp Suites' proxy as usual! ⚠️
Foxy Proxy
See Firefox extensions