Introducción
Bienvenidos a mi primer writeup de Hack The Box, para comenzar, agregamos la dirección IP de la máquina en nuestro archivo /etc/hosts
con el nombre late.htb para hacerlo más práctico.
Resolución
Para realizar un reconocimiento de puertos y servicios utilizamos la siguiente línea de comandos:
1
sudo nmap -Pn -n -p- --open -sSVC --min-rate 4000 late.htb
Como resultado obtuvimos lo siguiente:
1
2
3
4
5
6
7
8
9
10
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-title: Late - Best online image tools
|_http-server-header: nginx/1.14.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Cuando visitamos la página en el puerto 80 encontramos un enlace hacia images.late.htb así que añadimos este enlace en el archivo /etc/hosts
y cuando recargamos la página nos mostró el siguiente portal.
Ya que esta aplicación procesa el texto que recibe como imagenes probamos ataques STTI (Server Side Template Injection) con diferentes fuentes, tamaños de letra y estilos. Les recomiendo visitar los siguientes enlaces para conocer más sobre como funciona esta vulnerabilidad.
Primero comprobamos que se trata de un SSTI
enviando la siguiente imágen:
Podemos ver que entre las etiquetas p
de la respuesta viene el resultado de la evaluación hecha por python.
Una vez comprobada la injección de plantilla veremos si podemos ejecutar código directamente desde el interprete de python llamando al modulo os
, en este caso llamaremos a id
para ver el id del usuario actual.
La aplicación respondió con el siguiente id, lo cual me hizo suponer que el usuario root es quien está ejecutando el aplicativo:
Para comprobarlo, ahora ejecutamos whoami
esperando el nombre del usuario actual:
Sin embargo, como respuesta obtuvimos una cadena vacía:
Pero no hay que preocuparnos ya que podemos utilizar el comando who
para ver los usuarios que tienen una sesión iniciada en la máquina.
Una vez que recibimos la respueta de la aplicación podemos ver algo como lo siguiente.
Recordando el escaneo de nmap pudimos ver el puerto 22 abierto y ya que tenemos el nombre del usuario buscamos su id_rsa
en su carpeta personal con la siguiente imagen:
En la respuesta podemos ver la id_rsa completa del usuario por lo cual ahora podemos conectarnos por ssh.
Recordemos que debemos cambiar los permisos con chmod 400 id_rsa
ya que de lo contrario ssh
nos dará un error y no nos dejará conectarnos.
Bandera user.txt
Ya que nos conectamos a la máquina listamos el directorio actual y podemos ver la bandera user.txt.
Bandera root.txt
Para conseguir la bandera del usuario root utilizamos linpeas.sh para enumerar el sistema y encontrar un vector para escalar privilegios. Los resultados de linpeas
muestran el script /usr/local/sbin/ssh-alert.sh
, al revisar los permisos podemos ver que somos el propietario y tenemos permisos de lectura, escritura y ejecución, además, al hacer un cat
al archivo vemos que este script envía un correo de alerta al usuario root@late.htb
.
Despues, con pspy podemos ver que este script lo está ejecutando el usuario root cuando se hace un login por ssh, además, cuando intentamos editar este script nos apareció un error lo cual es raro ya que somos los propietarios de este scriot además de que tenemos los permisos para editarlo, pero al listar los atributos del archivo con lsattr
podemos ver que está activo el atributo a (append), lo cual solo nos permitirá agregar contenido más no modificarlo, sabiendo esto, ejecutamos la siguiente línea de comandos:
1
echo -e "cp /root/root.txt /home/svc_acc/root.txt\nchown svc_acc /home/svc_acc/root.txt" | tee -a /usr/local/sbin/ssh-alert.sh
Ya que el script es ejecutado por el usuario root, con estas instrucciones estamos copiando el archivo root.txt hacía nuestro directorio personal y poniendonos como propietarios a nosotros.
En este caso la bandera root en HTB siempre se encuentra en ese directorio pero por ejemplo pudimos cambiar los permisos de la /bin/bash
, copiar la id_rsa del usuario root si es que la hubiera, lanzar una reverse shell, etc.
Para que se ejecute el script basta con salir de ssh, volver a iniciar sesión y ahí tendremos nuestro archivo root.txt
Conclusiones
Esta máquina me gustó mucho ya que es la primera en HTB que soluciono, además de que aprendí más sobre python y SSTI en Flask y de igual manera sobre los atributos en los archivos de linux. Espero que les haya gustado este writeup, nos vemos en el siguiente post ;).