01Environment
One platform, two targets.
One attacker platform, two deliberately different targets — one defended, one left vulnerable to validate technique.
One attacker platform, two deliberately different targets: a physical Windows 10 laptop with its own defences live, and a Metasploitable 2 VM left unhardened to validate technique. Kali is dual-homed — bridged onto the home LAN to reach the Windows box, and on a VMware host-only segment for the vulnerable VM. Every target is my own hardware or a VM I run.
Evidence — host rolesKali recon & exploitation platform (dual-homed)
Windows 10 defended target — Defender + firewall live
Metasploitable deliberately vulnerable target (VM)
02Enumerate
Enumerate, then verify every finding.
nmap and a from-scratch scanner run against both targets; every finding cross-checked between the two before it counts.
nmap for mature, proven recon; hand-rolled Python for the case that eventually matters — a compromised host with no tools installed except Python. Each finding was cross-checked between nmap and the from-scratch scanner before being treated as real. The Windows target gave up five open ports once its own firewall was accounted for; Metasploitable enumerated wide open, six of its fourteen ports carrying a named, specific vulnerability rather than a generic service label.
Evidence — nmap -sV -sC (Metasploitable excerpt)21/tcp open ftp vsftpd 2.3.4
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1
139/tcp open netbios-ssn Samba smbd 3.X - 4.X
445/tcp open netbios-ssn Samba smbd 3.0.20-Debian
1524/tcp open ingreslock Metasploitable root shell
03Initial access
Two targets, two routes in.
A PowerShell reverse shell dials back from Windows; a direct connection to an exposed bind shell gives unauthenticated root on Metasploitable.
On the Windows target, a PowerShell one-liner called back to a Kali nc listener and returned an interactive prompt — a reverse shell riding out through the firewall asymmetry that trusts outbound traffic far more than inbound. On Metasploitable, connecting directly to an exposed bind shell on port 1524 gave a root shell with no exploit and no credentials required.
Evidence — root shell, direct connection, no exploit$ nc 172.20.10.6 1524
root@metasploitable:/# whoami
root
root@metasploitable:/# id
uid=0(root) gid=0(root) groups=0(root)
04Troubleshoot
The one that got me.
The Windows target: alive on ARP, silent on TCP. Telling “filtered” apart from “down” is the whole problem.
With the host confirmed alive via ARP, a full port sweep still came back all-filtered — and neither -Pn, a higher --min-rate, nor packet fragmentation (-f) changed the result. The cause was Windows Defender Firewall dropping unsolicited SYNs and ICMP silently rather than rejecting them, which looks identical to a dead host from a single scan. Distinguishing “alive but silent” from “actually down” — ARP reachable, zero TCP replies — is what resolved it, not re-running the same scan with more flags.
Evidence — what carried throughDown, filtered and closed are three different facts.
ARP reachable, zero TCP replies = alive but silent,
not offline. Re-running the same scan with more
flags won't tell them apart — the method does.