Toggle between the four modes below and watch what actually changes.
Lab Setup — Two Networks, Three Machines
The network topology IS the lesson. Get the two host-only networks wired correctly and pivoting stops being an abstract diagram.
Before you start
WinterMute is a deliberately vulnerable VM released free on VulnHub for legal practice. Running these techniques against anything you don't own or have written permission to test is illegal in most jurisdictions — keep this lab on an isolated, offline virtual network.
Warning: Educational use against your own local WinterMute VMs only.
What you'll need
- A computer that can run 2–3 VMs at once — 8GB+ RAM recommended
- VirtualBox (free) and a Kali VM
- The WinterMute VMs (free — linked below)
- Roughly 3–5 hours
Download and verify the archive
WinterMute ships as Wintermute-v1.zip (2.4 GB) — both VMs plus the author's setup notes. Verify the hash before importing anything.
Tip: Works better in VirtualBox than VMware, per the author's notes.
Exercise: Verify the archive hash
md5sum Wintermute-v1.zip
# should match: 4BFABB5021B33C2A4AB7A5DB1F17A9ED
sha1sum Wintermute-v1.zip
# should match: 643D14EDCADA7EEF08C66DBD4CF89AABFD6097A3
Two host-only networks, two different subnets
Network #1 holds Kali and Straylight. Network #2 holds Straylight and Neuromancer — reachable only through Straylight.
- VirtualBox: File → Tools → Network Manager.
- Create a host-only adapter (vboxnet0). Default DHCP is fine.
- Create a second one (vboxnet1) on a DIFFERENT subnet — e.g. 192.168.56.0/24 and 192.168.57.0/24.
Warning: Same subnet on both = Kali reaches Neuromancer directly and the whole exercise collapses without you noticing.
Wiring the three machines
| Machine |
Adapter 1 |
Adapter 2 |
| Kali |
Network #1 |
NAT (optional, internet only) |
| Straylight |
Network #1 |
Network #2 — enabled. This makes it the pivot. |
| Neuromancer |
Network #2 only |
Disabled |
Verify the topology before touching an exploit
Exercise: Confirm Network #2 is unreachable directly
If step 4 fails as expected: Kali → Straylight → Neuromancer is correctly isolated. If it succeeds, revisit the adapter settings.
- Start all three machines.
- Kali: ip a — confirm Network #1 address.
- ping <straylight_ip> — should succeed.
- Try reaching the Network #2 range directly from Kali — should FAIL.
What You Just Practiced
The full loop, one more time — and where to go next.
The pattern that just repeated
Enumerate → exploit → escalate → discover a second network → relay through your foothold → exploit and escalate again. A public-facing system trusted by an internal one that isn't directly reachable is one of the most common findings in real internal pentests.
Checking the four concepts landed
- Port forwarding — the socat relays moving raw traffic Straylight → Neuromancer.
- Tunneling — the SSH -L equivalent, encrypted, using nothing but a login.
- Pivoting — treating Straylight as the only route to a network you couldn't otherwise reach.
- Lateral movement — exploiting Neuromancer through the relay, genuinely relocating your shell (T1210, not T1021).
Next steps
Redo the lab without this guide — the second pass is where it sticks. For something harder, myHouse7 on VulnHub is a multi-subnet variant of the same idea.
Credits
WinterMute was created by creosote, released on VulnHub 5 July 2018, Intermediate difficulty, no buffer-overflow knowledge required — explicitly OSCP-style pivoting practice. All credit for the lab goes to its original author.
Command Reference
nmap (Recon)
Scans a host for open ports and fingerprints running services.
-Pn skips the host-alive ping check, -sV grabs version banners, -sC runs default scripts, -p- scans all 65535 ports. Often NOT installed on a machine you've compromised — later stages fall back to nc loops instead.
socat (Pivoting)
Relays raw traffic between two endpoints — the core pivoting workhorse.
socat TCP-LISTEN:PORT,fork,reuseaddr TCP:DEST:PORT opens a listener on the pivot host and forwards every connection to a destination it can reach but you can't. Moves bytes unmodified — no encryption, unlike an SSH tunnel.
ssh (Tunneling)
Secure shell — and, via -L / -R / -D, a built-in encrypted tunnel.
-L forwards a local port out to a remote destination, -R forwards a remote port back to your machine, -D turns the connection into a SOCKS proxy. Everything is encrypted, and you only need valid credentials — no separate binary on the target.
nc (Utility)
Netcat — reads and writes raw TCP or UDP connections directly.
-lvnp opens a verbose listener (catches reverse shells). Also useful as a crude port scanner (nc -nvzw1 host port) when nmap isn't available.
curl (Utility)
Sends an HTTP request from the command line.
Used to trigger vulnerable endpoints and POST data without a browser — handy once you're working from a shell.
wget (Utility)
Downloads a file from a URL straight to disk.
Paired with python3 -m http.server: host a file on your attacking machine, wget it on the target. This pattern repeats three times in this lab.
gcc (Utility)
Compiles C source code into a runnable binary.
If the target has no compiler, compile locally instead and transfer the finished binary — architecture permitting.
searchsploit (Recon)
Searches a local, offline copy of Exploit-DB for matching exploits.
Once you've fingerprinted an exact software version, searchsploit <name> <version> checks whether a public exploit already exists — often the fastest path from version number to working code.
telnet (Utility)
Opens a raw, unencrypted connection so you can type a protocol by hand.
Useful for manually speaking a plaintext protocol line-by-line — like typing SMTP commands directly at a mail server.
ifconfig (Recon)
Lists network interfaces and the addresses assigned to them.
The first command worth running on any new shell — often reveals a second, otherwise-invisible network segment, which is what turns a host into a pivot point.