Postman - HackTheBox

4 minute read

En este post se explicarán los pasos que se han seguido para conseguir vulnerar la seguridad de la máquina Postman en Hack The Box, tal y como se refleja, es un sistema Linux con un nivel de dificultad fácil (4.3).

Ilustración 1: Postman.

La fase de enumeración dio comienzo haciendo uso de NMAP:

Ilustración 2: Comando de NMAP ejecutado.

Ilustración 3: Resultados de NMAP.

Analizando los resultados se observaron tres posibles vectores de ataque, un servidor web y dos herramientas, como son Webmin y Redis.

Se usó DIRB y Nikto para recabar más información de la web que daba servicio en el puerto 80:

  • Nikto:

Ilustración 4: Resultados de Nikto.

  • DIRB:

Ilustración 5: Resultados de DIRB.

Ambas utilidades no revelaron demasiada información, más allá de la existencia de un directorio upload:

Ilustración 6: http://10.10.10.160/upload/.

Pero no se tenían los permisos necesarios para transferir un fichero:

Ilustración 7: Intento de transferir una imagen a http://10.10.10.160/upload/.

Webmin es una herramienta de configuración de sistemas, accesible vía web para sistemas, Unix como GNU/Linux y OpenSolaris. Se pueden configurar aspectos internos de muchos sistemas libres, como el servidor web Apache, PHP, MySQL, DNS, Samba, DHCP, entre otros. NMAP mostró que la versión era la 1.9.10, por tanto, se buscaron posibles exploits:

Ilustración 8: Exploit para Webmin 1.9.10.

Ejecutando dicho exploit se podría conseguir obtener privilegios de administrador en el sistema, pero se requiere de algún usuario, tal y como se refleja en el CVE-2019-12840.

Redis es un motor de base de datos en memoria, basado en el almacenamiento en tablas de hashes (clave/valor) pero que opcionalmente puede ser usada como una base de datos durable o persistente.

Para poder interactuar con Redis, se necesita instalar un cliente, para ello, se siguieron los pasos que se explican en: https://redis.io/topics/quickstart. Una vez instalado el cliente en la máquina atacante, se podían realizar conexiones:

Ilustración 9: Haciendo ping con redis-cli.

Existen diferentes formas de poder vulnerar la seguridad de esta herramienta, muchas de ellas se describen en: https://book.hacktricks.xyz/pentesting/6379-pentesting-redis.

Se intentó subir una WebShell pero no se tenían los permisos suficientes:

Ilustración 10: Intento de crear una WebShell.

Así que se optó por realizar la técnica de "Get-SSH Crackit", para usar una clave válida con la que poder conectarse vía SSH:

Ilustración 11: Obteniendo el directorio del usuario redis y configurando el fichero que almacena las claves públicas.

Se generó un par de claves y se almacenó la clave pública en el fichero de claves permitidas:

Ilustración 12: Generación de clave.

Ilustración 13: Guardado de clave pública en la máquina Postman haciendo uso de redis-cli.

Completado el proceso, se podía establecer una conexión SSH con el usuario redis:

Ilustración 14: Conexión SSH con el usuario redis.

Teniendo acceso al sistema con el usuario redis, se comenzó a realizar un reconocimiento del sistema, abriendo ficheros y directorios de interés:

Ilustración 15: Búsqueda de ficheros con SUID.

Ilustración 16: Resultados de netstat.

Ilustración 17: Contenido de .bash_history parte 1.

Ilustración 18: Contenido de .bash_history parte 2.

El contenido del fichero .bash_history, revelaba que hay otro usuario en el sistema, llamado Matt, y que existía una copia de seguridad de una clave RSA. El fichero se encontraba en el directorio /opt:

Ilustración 19: Fichero id_rsa.bak.

Se copió la clave a la máquina atacante:

Ilustración 20: Transfiriendo clave RSA a la máquina atacante vía SFTP.

Pero la clave estaba cifrada con una contraseña:

Ilustración 21: SSH-Keygen no reconoce el fichero como una clave válida.

Se usó "ssh2john" (https://github.com/magnumripper/JohnTheRipper/blob/bleeding-jumbo/run/ssh2john.py) para así poder intentar realizar un ataque de diccionario con JohnTheRipper a la contraseña que protege el fichero.

Ilustración 22: Ejecutando ssh2john.py.

Ilustración 23: Ejecutando JohnTheRipper.

Se consiguió la contraseña, pero no se podía usar la clave RSA para conectarse con el usuario Matt vía SSH, porque tal y como se reflejaba en el fichero de configuración /etc/ssh/sshd_config el usuario Matt no tiene permitido el acceso:

Ilustración 24: Fichero de configuración /etc/ssh/sshd_config.

Ilustración 25: Conexión SSH rechazada.

Tal y como se observaba en el fichero .bash_history, se usaba el comando su para iniciar sesión con el usuario Matt, así que usando dicho comando e introduciendo la contraseña con la que se protege la clave RSA, se obtiene una shell con el usuario Matt:

Ilustración 26: Sesión con el usuario Matt y flag user.txt.

Como se relató anteriormente, Webmin 1.9.10 tiene una vulnerabilidad, la cual si es explotada se puede obtener acceso al sistema como usuario root. Pero se requiere tener un usuario, así que se probó si Matt tenía acceso a Webmin, con la misma contraseña. Por tanto, se intentó iniciar sesión vía web:

Ilustración 27: Se requiere conectarse vía HTTPS a Postman:10000.

Ilustración 28: Introduciendo Postman en /etc/hosts.

Ilustración 29: Panel de Inicio de sesión de Webmin.

Ilustración 30: El usuario Matt tiene acceso a la herramienta.

Comprobado que Matt tenía acceso a la herramienta, se uso Metasploit para ejecutar el exploit y obtener acceso al sistema como usuario root:

Ilustración 31: Configurando las opciones del exploit.

Ilustración 32: Era necesario poner la opción SSL a true.

Ilustración 33: Acceso como root y obteniendo la flag root.txt.

En conclusión, una máquina fácil de vulnerar, pero con la cual se aprenden una variedad de herramientas no muy conocidas e interesantes. Divertida.