HTB: Poison
| ターゲット // Poison | |
|---|---|
| Platform | HTB |
| OS | FreeBSD |
| Difficulty | Medium |
| IP | 10.129.1.254 |
Enumeration#
Nmap#
▶ Nmap output
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2 (FreeBSD 20161230; protocol 2.0)
80/tcp open http Apache httpd 2.4.29 ((FreeBSD) PHP/5.6.32)
OS: FreeBSD
Port 80 - Web App#
A minimal PHP test site with a form that accepts a filename and includes it via browse.php?file=:
Sites to be tested: ini.php, info.php, listfiles.php, phpinfo.php
Directory fuzzing finds: index.php, info.php, phpinfo.php.
Supplying listfiles.php to the form reveals an interesting file:
[8] => pwdbackup.txt
Foothold#
LFI#
The browse.php?file= parameter is a straight LFI:
| |
root:*:0:0:Charlie &:/root:/bin/csh
charix:*:1001:1001:charix:/home/charix:/bin/csh
Encoded Password#
Reading pwdbackup.txt through the LFI reveals a base64 blob with a note: “This password is secure, it’s encoded at least 13 times.. what could go wrong really..”
Decode it 13 times (a simple loop in any language will do) and get the password: Charix!2#4%6&8(0.
Combined with the username from /etc/passwd: charix:Charix!2#4%6&8(0. SSH in as charix.
Privilege Escalation#
VNC via SSH Tunnel#
In the home directory there’s a secret.zip file. Extract it using charix’s password – it contains a binary file called secret.
Running sockstat (FreeBSD’s netstat equivalent) reveals a VNC server running as root on localhost:5901.
Set up an SSH tunnel:
| |
Connect to the VNC server using the secret file as the password file:
| |
The secret file isn’t a password – it’s a VNC authentication key file. The VNC session opens as root.
Proof#
# root obtained via the root-owned VNC session (localhost:5901); no whoami/id output captured
user.txt: [redacted]
root.txt: [redacted]
Key Takeaways#
- LFI is always worth testing when a filename parameter exists –
browse.php?file=is textbook - “Security through obscurity” (13x base64 encoding) is no security at all
- Always check for local services with
sockstat/netstat– VNC running as root on localhost is a common privesc path - VNC
secretfiles act as authentication keys, not plaintext passwords