Wekor - TryHackMe

SUMMARY

Debemos encontrar 1 bandera en la maquina Wekor. Donde a partir del escaneo de puertos, pude saber que hay un servidor HTTP, SSH. Luego, encontré la ruta de un sitio web en robots.txt. Además, este sitio web en desarrollo contaba con un formulario donde uno de sus parametros era vulnerable a SQLi. Luego, capture una solicitud POST, realizada por el formulario, con Burp Suite con el fin de utilizarlo con sqlmap, logrando volcar todos los registros de la base de datos wordpress, que contenía el nombre de dominio de un sitio web elaborado por el CMS Wordpress, y los hashes de varios usuarios, que logre crackear con Hashcat. Luego, accedí al portal de administración del CMS, donde logré ganar acceso mediante la vulnerabilidad Theme Injection. Luego, en la escalada horizontal, recupere las credenciales almacenadas en cache mediante el servidor Memcached. Luego, en el escalda vertical, suplante un archivo binario Python con un archivo binario malicioso.

FASE RECONOCIMIENTO ACTIVO

En este caso debemos acceder al sistema destino y obtener las banderas. Para ello empezaremos utilizando el comando openvpn con el fin de establecer una conexión VPN con la red virtual dónde está la máquina Wekor1. Para ello utilizaremos el archivo de configuración, que lo podemos descargar en la plataforma de Tryhackme, que puede incluir información como la dirección del servidor VPN, los certificados y claves de seguridad, la configuración de encriptación, etc.

Luego de que se establece la conexión VPN se crea una interfaz virtual de red en nuestra máquina. Donde se enruta todo el tráfico de red a través de esa interfaz.

Además, la plataforma de Tryhackme nos muestra la dirección IP de la máquina Wekor1.

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 Wekor1. 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ámetros -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:

  • Un servicio HTTP o web levantado en el puerto 80, y el programa servidor web que está corriendo, y la versión del programa servidor. Además, gracias al script http-robots.txt, se pudo saber las rutas que los motores de búsqueda no deben mostrar en sus resultados de búsqueda. Esto se ha obtenido del archivo robots.txt.

  • Un servicio SSH levantado en el puerto 22, y el programa servidor que está corriendo, y la versión del programa servidor.

Ahora accederemos a las 9 rutas encontradas en el archivo robots.txt a través de mi navegador web con el fin de buscar alguna aplicación o sitio web en desarrollo.

  • workshop:

  • root:

  • lol:

  • agent:

  • feed:

  • crawler:

  • boot:

  • comingreallysoon:

  • interesting:

Podemos observar que en el recurso comingreallysoon encontramos la ruta de un sitio web en desarrollo.

FASE GANAR ACCESO O HACKING O EXPLOTACION

Ahora accederemos al sitio web en desarrollo con el fin de buscar vulnerabilidades que presente.

Podemos observar que el sitio web en desarrollo consta de varias secciones, donde uno de ellos viene a ser una tienda en línea, pero la mayoría de sus funcionalidades no están desarrolladas a excepción de una funcionalidad que nos permite inserta un código de cupón de descuento, y que consta de un formulario HTTP con el campo coupon_code. Además, este formulario HTTP realizara una solicitud POST HTTP hacia el servidor web con el fin de validar si el código del cupón, ingresado en su campo, es correcto.

Además, podemos observar que si ingresamos la consulta SQL ‘ or 1=1;-- como valor en el campo coupon_code del formulario HTML, se concatena directamente con la consulta SQL, que realiza el sitio web para validar si el código del cupón es correcto. Por lo tanto, el parámetro coupon_code de este formulario es vulnerable a SQLI basada en errores.

Ahora interceptaremos la solicitud POST realizada por el formulario HTML con Burp Suite con el fin de utilizarla con la herramienta sqlmap.

Podemos observar que sqlmap logro enumerar las bases de datos gestionadas por el DBMS MySQL del sistema destino.

Ahora volcaremos todos los registros de la base de datos wordpress.

  • Tabla wp_posts:

  • Tabla wp_users:

Podemos observar que sqlmap logro volcar los registros de todas las tablas de la base de datos wordpress, pero solo mostraremos las dos tablas más importantes.

La tabla wp_posts contiene los posts que se han realizado en un sitio o aplicación web desarrollado con el CMS Wordpress. Además, podemos observar en uno de sus registros el nombre de dominio de este sitio o aplicación web.

La tabla wp_users contiene información sobre los usuarios que pueden acceder al portal de administración del CMS Wordpress.

Ahora añadiremos el nombre de dominio del sitio o aplicación web (asociado con la dirección IP del servidor web) a nuestro archivo /etc/hosts con el fin de acceder al sitio o aplicación web desde nuestro navegador web, y evitar que este realizando consultas DNS a nuestros servidores DNS recursivos, proveídos por nuestra ISP, en busca de la dirección IP del nombre de dominio de nuestro sitio o aplicación web.

Podemos observar que logramos acceder al sitio web en desarrollo y una página web que consta de un formulario HTML o login que requiere que nos autenticamos para acceder al portal de administración del CMS Wordpress.

Ahora crackearemos los hashes de los usuarios encontrados en la tabla wp_users, pero antes averiguaremos la función o algoritmo hash utilizado en sushashes.

  • Hash Mode:

Ahora que conocemos la función hash y el módulo de Hashcat que le corresponde a esa función hash, intentaremos crackear cualquier de los hashes de los usuarios.

  • Password del usuario wp_jeffrey:

  • Password del usuario wp_yura:

  • Password del usuario wp_eagle:

Podemos observa que logramos crackear los hashes de tres usuarios, pero del usuario admin no se pudo al parecer ha establecido una contraseña robusta.

Ahora accederemos al panel de administración del CMS Wordpress con cada cuenta con el fin de saber cual usuario tiene los privilegios de un administrador.

  • Usuario wp_jeffrey:

  • Usuario wp_eagle:

  • Usuario wp_yura:

Podemos observar que solo el usuario wp_yura tiene los privilegios de administrador en el portal de administración del CMS.

Ahora utilizaremos los privilegios de wp_yura para insertar un payload malicioso, que nos generara una revere Shell, en el código fuente de uno de los archivos utilizados por el theme, que utiliza el sitio web para definir su apariencia front-end.

Podemos observar que logramos modificar exitosamente el código fuente de uno los archivos del theme Twenty Twent-one.

Ahora accederemos al archivo del theme a través de mi navegador web para que se ejecute nuestro payload, pero antes debemos habilitar el puerto 1500 en nuestro sistema para que este en modo listening y esperando la conexión entrante.

Podemos observar que logramos obtener acceso al sistema destino siendo el usuario www-data mediante la explotación de la vulnerabilidad Theme Injection.

Además, podemos observar que al usuario www-data se le ha configurado para que utilice la Shell nologin cuando inicie sesión en el sistema destino. Esta Shell viene a ser no interactiva e inestable. Por lo tanto, realizaremos un tratamiento de la tty para tener una Shell estable e interactiva.

FASE ESCALADA PRIVILEGIOS

Ahora debemos buscar un vector de escalada de privilegios con el fin de ser un usuario con privilegios más elevados. Para ello utilizaremos linpeas, que nos ayudara a encontrar vectores de escalada privilegios de manera automatizada.

Podemos que linpeas logro obtener unas credenciales en el archivo wp-config.php para acceder al DBMS Mysql e interactuar con su base de datos, pero esto ya lo hemos hecho anteriormente explotando la vulnerabilidad SQLi.

Ahora supondremos que se ha reutilizado estas credenciales con las credenciales de inicio de sesión del usuario Orka o root. Por lo tanto, intentaremos autenticarnos al sistema destino con estas credenciales siendo el usuario Orka o root.

Podemos observar que nuestra suposición fallo.

Otro resultado que nos muestra linpeas vienen a ser los procesos que se están ejecutando en el sistema destino asociados con los usuarios quienes lo han ejecutado.

Podemos observar que uno de los procesos que se esta ejecutando en el sistema destino, viene a ser un servidor Memcached levantado en el puerto 11211 y que solo admitirá conexiones provenientes del mismo sistema destino (Por esta razón nuestro escaneo de Nmap no lo detecto). Además, debemos saber que la tecnología Memcached es utilizado para almacenar y recuperar datos en la cache y memoria RAM. Por esto razón es muy utilizado por las aplicaciones o sitios web con alto tráfico para reducir la latencia al momento de recuperar datos.

Ahora nos conectaremos al servidor Memcached utilizando netcat con el fin de enumerar los slabs , que vienen a ser áreas de memoria utilizadas por Memcached para almacenar elementos o datos en la cache.

Podemos observar que solo hay un slab activo en el servidor Memcached. Además, observamos otras métricas relacionadas con ese slab.

Ahora debemos saber el número de elementos o datos almacenados en ese slab.

Podemos observar que logramos obtener diversas métricas sobre el manejo y seguimiento de elementos o datos en cada slat. Además, la métrica number nos indica el numero de elementos o datos almacenados en el slat 1.

Ahora vamos a enumerar los 5 elementos o datos del slat 1.

Podemos observar las claves de cada elemento, que viene a ser como un identificador, y otras métricas relacionadas con cada elemento.

Ahora vamos a observar los valores asociado con las claves de los elementosusername y password.

Podemos observar que nos encontramos con las credenciales del usuario local Orka que estaban almacenadas en la cache.

Ahora nos autenticaremos en el sistema destino con estas credenciales para ser el usuario Orka.

De esta manera logramos la 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 utilizaremos linpeas, que nos ayudara a encontrar vectores de escalada privilegios de manera automatizada.

Podemos observar que linpeas ha encontrado que el directorio sbin tiene asignado los permisos de escritura, ejecución y lectura sobre los usuarios que pertenecen al grupo primario del usuario Orka. Por lo tanto, siendo el usuario Orka, podemos crear archivos en este directorio.

Ahora vamos a enumerar los programas o comandos que podemos ejecutar con sudo y con los privilegios de otro usuario.

Podemos observar que podemos ejecutar un archivo binario ejecutable llamado bitcoin con los privilegios del usuario root. Además, si lo ejecutamos,nos solicita una contraseña. Adema, si queremos observar su contenido, nos toparemos con la sorpresa de que está cifrado.

Ahora utilizaremos el comando strings sobre el archivo binario bitcoin con el fin de observar solo las cadenas de caracteres legibles de su contenido.

Podemos observar que la contraseña, que solicita cuando lo ejecutamos, viene a ser password, y que está ejecutando un script en Python llamado transfer. Además, podemos observar que no se ha especificado la ruta absoluta o completa del intérprete de Python, utilizado para ejecutar el script. Por lo tanto, podemos crear un archivo binario ejecutable malicioso que se llame Python ubicado en el primer directorio de la variable de entorno PATH con el fin de cuando ejecutamos el archivo binario bitcoin, el sistema operativo primero ejecute nuestro archivo binario malicioso en ves del archivo binario Python original.

Además, debemos saber que el PATH, que utilizara el sistema operativo para buscar el archivo binario ejecutable Python, viene a ser el PATH especificado en la configuración secure_path como lo puedes observar en la siguiente imagen.

Debido a este debemos crear nuestro archivo binario maliciosos en el directorio /usr/sbin. Donde tenemos los privilegios de escritura sobre él.

Ahora ejecutaremos el archivo binario bitcoin con el fin de que se ejecute nuestro archivo binario malicioso, y obtengamos una Shell Bash con los privilegios de root.

De esta manera realizamos una escalada de privilegios vertical.

Ahora buscaremos la bandera en el archivo root.txt ubicado en el directorio root.