┌──(root㉿t0mz)-[/home/kali]
└─# ping -c 1 10.10.11.182
PING 10.10.11.182 (10.10.11.182) 56(84) bytes of data.
64 bytes from 10.10.11.182: icmp_seq=1 ttl=63 time=175 ms
--- 10.10.11.182 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 175.171/175.171/175.171/0.000 ms
Podemos notar que se trata de una maquina Linux, debido al TTL:
TTL <= 64 >>(Linux)
TTL <= 128 >> (Windows)
1.2 Nmap
# Nmap 7.95 scan initiated Mon Feb 24 23:27:08 2025 as: /usr/lib/nmap/nmap -sS -sV -sC -p- -open --min-rate 5000 -Pn -vvv -oN escaneo.txt 10.10.11.182
Nmap scan report for 10.10.11.182
Host is up, received user-set (0.18s latency).
Scanned at 2025-02-24 23:27:09 -03 for 29s
Not shown: 64635 closed tcp ports (reset), 898 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack ttl 63 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)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCwlzrcH3g6+RJ9JSdH4fFJPibAIpAZXAl7vCJA+98jmlaLCsANWQXth3UsQ+TCEf9YydmNXO2QAIocVR8y1NUEYBlN2xG4/7txjoXr9QShFwd10HNbULQyrGzPaFEN2O/7R90uP6lxQIDsoKJu2Ihs/4YFit79oSsCPMDPn8XS1fX/BRRhz1BDqKlLPdRIzvbkauo6QEhOiaOG1pxqOj50JVWO3XNpnzPxB01fo1GiaE4q5laGbktQagtqhz87SX7vWBwJXXKA/IennJIBPcyD1G6YUK0k6lDow+OUdXlmoxw+n370Knl6PYxyDwuDnvkPabPhkCnSvlgGKkjxvqks9axnQYxkieDqIgOmIrMheEqF6GXO5zz6WtN62UAIKAgxRPgIW0SjRw2sWBnT9GnLag74cmhpGaIoWunklT2c94J7t+kpLAcsES6+yFp9Wzbk1vsqThAss0BkVsyxzvL0U9HvcyyDKLGFlFPbsiFH7br/PuxGbqdO9Jbrrs9nx60=
| 256 04:e3:ac:6e:18:4e:1b:7e:ff:ac:4f:e3:9d:d2:1b:ae (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBrVE9flXamwUY+wiBc9IhaQJRE40YpDsbOGPxLWCKKjNAnSBYA9CPsdgZhoV8rtORq/4n+SO0T80x1wW3g19Ew=
| 256 20:e0:5d:8c:ba:71:f0:8c:3a:18:19:f2:40:11:d2:9e (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEp8nHKD5peyVy3X3MsJCmH/HIUvJT+MONekDg5xYZ6D
80/tcp open http syn-ack ttl 63 nginx 1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://photobomb.htb/
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: nginx/1.18.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Read data files from: /usr/share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Mon Feb 24 23:27:38 2025 -- 1 IP address (1 host up) scanned in 29.97 seconds
Vemos que esta corriendo el puerto 22(OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)) correspondiente a un servidor SSH, y el puerto 80(nginx 1.18.0 (Ubuntu)) correspondiente a un servidor web
Vemos tambien que el sistema operativo Linux que se encuentra corriendo en la maquina objetivo es un Ubuntu
1.3 whatweb
Para realizar el escaneo de tecnologias web, vamos a modificar el archivo hosts de la ruta "/etc/hosts" para que apunte al dominio "http://photobomb.htb/":
┌──(root㉿t0mz)-[/home/kali/ctf/photobomb]
└─# vim /etc/hosts
Editamos y quedaria asi:
┌──(root㉿t0mz)-[/home/kali/ctf/photobomb]
└─# cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 t0mz
# HACK THE BOX
10.10.11.182 photobomb.htb
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
┌──(root㉿t0mz)-[/home/kali/ctf/photobomb]
└─#
IP 10.10.10.29 <--> photobomb.htb
De tal manera que cuando entramos al navegador, nos saldra la siguiente pagina:
Ahora, vamos a realizar el escaneo de tecnologias web con "whatweb":
┌──(root㉿t0mz)-[/home/kali/ctf/photobomb]
└─# wfuzz -c --hc 404 -t 200 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://photobomb.htb/FUZZ
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://photobomb.htb/FUZZ
Total requests: 220560
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000007: 200 22 L 95 W 843 Ch "# license, visit http://creativecommons.org/licenses/
by-sa/3.0/"
000000012: 200 22 L 95 W 843 Ch "# on atleast 2 different hosts"
000000006: 200 22 L 95 W 843 Ch "# Attribution-Share Alike 3.0 License. To view a copy
of this"
000000004: 200 22 L 95 W 843 Ch "#"
000000014: 200 22 L 95 W 843 Ch "http://photobomb.htb/"
000000003: 200 22 L 95 W 843 Ch "# Copyright 2007 James Fisher"
000000001: 200 22 L 95 W 843 Ch "# directory-list-2.3-medium.txt"
000000002: 200 22 L 95 W 843 Ch "#"
000000013: 200 22 L 95 W 843 Ch "#"
000000005: 200 22 L 95 W 843 Ch "# This work is licensed under the Creative Commons"
000000008: 200 22 L 95 W 843 Ch "# or send a letter to Creative Commons, 171 Second St
reet,"
000000011: 200 22 L 95 W 843 Ch "# Priority ordered case sensative list, where entries
were found"
000000009: 200 22 L 95 W 843 Ch "# Suite 300, San Francisco, California, 94105, USA."
000000010: 200 22 L 95 W 843 Ch "#"
000000489: 401 7 L 12 W 188 Ch "printer"
000001227: 401 7 L 12 W 188 Ch "printers"
000004295: 401 7 L 12 W 188 Ch "printerfriendly"
000008558: 401 7 L 12 W 188 Ch "printer_friendly"
000013496: 401 7 L 12 W 188 Ch "printer_icon"
000015253: 401 7 L 12 W 188 Ch "printer-icon"
000015485: 401 7 L 12 W 188 Ch "printer-friendly"
000021900: 401 7 L 12 W 188 Ch "printerFriendly"
000045240: 200 22 L 95 W 843 Ch "http://photobomb.htb/"
000047897: 401 7 L 12 W 188 Ch "printersupplies"
000051765: 401 7 L 12 W 188 Ch "printer1"
000052471: 401 7 L 12 W 188 Ch "printer2"
000084465: 401 7 L 12 W 188 Ch "printericon"
000105794: 401 7 L 12 W 188 Ch "printer_2867"
000112086: 401 7 L 12 W 188 Ch "printer_securit"
000154189: 401 7 L 12 W 188 Ch "printer_drivers"
000159305: 401 7 L 12 W 188 Ch "printer_2"
000192008: 401 7 L 12 W 188 Ch "printer_list"
000203184: 401 7 L 12 W 188 Ch "printerdrivers"
000208002: 401 7 L 12 W 188 Ch "printer-ink"
Total time: 0
Processed Requests: 220560
Filtered Requests: 220526
Requests/sec.: 0
Hay 2 directorios en concreto interesante, "printer" y "printers", si vamos a Firefox y verificamos lo que hay dentro de estos directorios:
http://photobomb.htb/printer
Nos da como resultado un panel de login, lo mismo es para el directorio "printers", pero hay diferencia entre ambos cuando realizemos la explotación, ya veremos en la fase de explotación a continuación
2- Explotación
2.1 phobomb.js
Vamos a revisar el codigo fuente de la pagina:
<!DOCTYPE html>
<html>
<head>
<title>Photobomb</title>
<link type="text/css" rel="stylesheet" href="styles.css" media="all" />
<script src="photobomb.js"></script>
</head>
<body>
<div id="container">
<header>
<h1><a href="/">Photobomb</a></h1>
</header>
<article>
<h2>Welcome to your new Photobomb franchise!</h2>
<p>You will soon be making an amazing income selling premium photographic gifts.</p>
<p>This state of-the-art web application is your gateway to this fantastic new life. Your wish is its command.</p>
<p>To get started, please <a href="/printer" class="creds">click here!</a> (the credentials are in your welcome pack).</p>
<p>If you have any problems with your printer, please call our Technical Support team on 4 4283 77468377.</p>
</article>
</div>
</body>
</html>
Vemos que el "index.html" de la pagina, carga un archivo JavaScript llamado "photobomb.js", concretamente en esta linea:
<script src="photobomb.js"></script>
Si lo abrimos, veremos el codigo:
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;
Podemos ver una URL interesante dentro del codigo, con las credenciales de para iniciar sesión en el panel de login de la pagina web:
http://pH0t0:b0Mb!@photobomb.htb/printer
Vamos a copiarla y a introducirla en el navegador:
Nos preguntara si queremos iniciar sesión con el usuario "pH0t0" dentro del dominio "photobomb.htb", vamos a darle en "OK":
Nos inicia sesión correctamente, si echamos un ojo a la pagina, podremos notar que es una pagina para descargar imagenes en diferentes resoluciones y formatos:
Por lo que podemos deducir, que por detras esta haciendo una conversión de formato y resolución, vamos a ver que hace por detras con la herramienta "Burp Suite"
Vamos a abrir Burp Suite y nos vamos a ir a la pestaña de "Proxy":
Vamos a ir a la configuración del proxy de Burp, en la subpestaña de "Proxy settings":
Vemos que el proxy, esta configurado con la IP 127.0.0.1 por el puerto 8080, sabiendo esto, vamos a ir a Firefox en nuestro Kali, y nos vamos a ir a ajustes del navegador o settings:
En el cuadro de busqueda de opciones, vamos a buscar la palabra clave "network"
Vamos a abrir la configuración de red, con el boton "Settings"
Vamos a darla a "Manual proxy configuration" y lo configuraremos con la IP y puerto correspondiente del proxy de Burp, en este caso la IP 127.0.0.1 y el puerto 8080
Vamos a aceptar con el boton "Ok", este paso no necesariamente tiene por que ser así, podemos configurar el proxy de Burp con la extensión de Foxy Proxy
Abrimos Burp Suite de nuevo y nos ponemos en modo intercepción:
Volvemos a la pagina web, y vamos a descargarnos una imagen para que la solicitud la reciba Burp Suite:
Vemos que el parámetro "photo=" indica la foto a descargar, el parámetro "filetype=" indica el formato en el que se va a descarga la imagen y por ultimo "dimensions=" correspondiente a las dimensiones de la imagen a descargar, parecería que estuviera ejecutando un script para realizar la conversión
2.2 Obtención de reverse shell
Vamos a crear una reverse shell y la vamos a almacenar en un archivo ".html", para luego mandarla al repeater de Burp Suite y ejecutar un "curl" con la reverse shell(En este caso el archivo .HTML) y con un pipe ejecutar el comando "bash" para que lo interprete como código Bash, en mi caso el archivo lo nombrare como "index.html" y utilizare el siguiente codigo Bash:
Luego vamos a alojar un servidor web con Python en donde almacenamos el archivo .HTML de la reverse shell
┌──(root㉿t0mz)-[/home/kali/ctf/photobomb]
└─# python -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
Y por ultimo vamos a abrir una nueva consola en Kali para ponernos en escucha con netcat por el puerto 443:
┌──(root㉿t0mz)-[/home/kali]
└─# nc -nlvp 443
listening on [any] 443 ...
Ahora ya estando en escucha y con el servidor web alojado con Python en nuestro Kali, vamos a irnos al BurpSuite y vamos a modificar la consulta para agregar el "curl" anteriomente mencionado, de tal manera que quedaria:
Modificamos el parámetro "filetype" para agregar el comando curl y agregar el pipe con el comando bash para interpretar el código como Bash
Ahora, para que esto funcione, ya que el comando curl que agregamos contiene espacios, va a ser necesario que encodeemos el codigo en formato URL, para eso nos vamos a la pestaña de "Decoder" de Burp Suite y pegamos el comando curl que agregamos sin el ;
Y vamos a encodearlo en formato "URL":
De tal manera que el comando quedaria de la siguiente forma:
Ahora vamos a mandar la consulta al repeater de Burp Suite con la combinación de teclas CTRL + R y vamos a la pestaña de "Repeater":
Y vamos a darle al boton "Send" para enviar la consulta al servidor web de la maquina objetivo y como le cargamos el comando "curl" encodeado en formato URL con la reverse shell, nos deberia entregar una reverse shell dentro de netcat donde estabamos en escucha por el puerto 443
Vamos a darle a "Send":
Se quedaria cargando, pero si vamos a la consola donde teniamos netcat en escucha por el puerto 443:
┌──(root㉿t0mz)-[/home/kali]
└─# nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.12] from (UNKNOWN) [10.10.11.182] 51010
bash: cannot set terminal process group (693): Inappropriate ioctl for device
bash: no job control in this shell
wizard@photobomb:~/photobomb$
Ya tendriamos una reverse shell con el usuario "wizard"
2.3 Obtención de la flag de usuario
Una vez obtenida la reverse shell, la flag de usuario se encuentra dentro del directorio "/home/wizard/user.txt", vamos a visualizarlo con el comando cat:
Siempre que querramos escalar privilegios dentro de una maquina, tenemos que verificar los permisos que tenemos con el usuario obtenido, para eso utilizamos el comando "sudo -l":
wizard@photobomb:~/photobomb$ sudo -l
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:~/photobomb$
Podemos ver que tenemos permisos de root en el archivo "cleanup.sh" que se encuentra dentro de la carpeta "opt", vamos a visualizar que contiene este script de bash:
wizard@photobomb:/opt$ cat cleanup.sh
cat 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:/opt$
Parece que esta ejecutando "find" dentro de la ruta relativa "source_images" y luego el resto del comando "-type f -name '*.jpg' -exec chown root:root {} \;", que aparenta ser el script que realiza la conversión de las imágenes
Es probable que estemos ante una vulnerabilidad que nos permita modificar el PATH de esta maquina para elevar privilegios. Para eso, vamos a irnos a un directorio donde tengamos permisos de escritura y podamos crear el archivo "find" para que luego sea llamado a través de la ruta relativa, a través del PATH y que dentro del archivo "find" tenga permisos de ejecución y que luego al ejecutarse el script "cleanup.sh" llame al archivo "find" que contenga el código para elevar privilegios, obviamente con el PATH modificado
Vamos a irnos a la carpeta "tmp" donde tenemos permisos de escritura que se encuentra en la siguiente ruta "/tmp":
wizard@photobomb:/opt$ cd /tmp
cd /tmp
wizard@photobomb:/tmp$
Vamos a crear el archivo "find" que va a tener el comando Bash para elevar privilegios, en mi caso utilizare el siguiente:
Y para almacenar el comando dentro del archivo "find", vamos a utilizar "echo", ya que no recomendaría utilizar "nano" o cualquier editor de texto sin antes realizar el tratamiento de la TTY:
Somos usuarios root, por lo que la escalada de privilegios resulto exitosa, solo que no tenemos un prompt, para obtener un prompt, ejecutaremos el comando "script -c bash" :
script -c bash
Script started, file is typescript
root@photobomb:/home/wizard/photobomb#
Ya tendremos un prompt
3.2 Obtención de la flag root
La flag de root se encuentra en la siguiente ruta "/root/root.txt", vamos a hacerle un cat para visualizarla: