Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
cve-2015-3306-lab — Laboratorio Docker reproducible + exploit de socket crudo para CVE-2015-3306 (copia arbitraria de archivos pre-autenticación en mod_copy de ProFTPD) — un ejercicio de aprendizaje de parcheo por diffs | Kitploit
Herramientas/GitHubGitHub/diegslva/cve-2015-3306-lab
Frameworks de ExploitsAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y EducaciónLabs y Práctica
GitHubdiegslva/cve-2015-3306-lab

cve-2015-3306-lab

Laboratorio Docker reproducible + exploit de socket crudo para CVE-2015-3306 (copia arbitraria de archivos pre-autenticación en mod_copy de ProFTPD) — un ejercicio de aprendizaje de parcheo por diffs

Ver Repositorio
hace 8h 44mAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2015-3306 — ProFTPD mod_copy Copia Arbitraria de Archivos Pre-Autenticación

Un laboratorio totalmente reproducible y un exploit escrito a mano para CVE-2015-3306 — construido como ejercicio de aprendizaje en investigación de vulnerabilidades: análisis de parches, disparo manual y desarrollo de exploits con sockets crudos.

El bug

El módulo mod_copy de ProFTPD implementa el par de comandos SITE CPFR / SITE CPTO, que copia archivos en el lado del servidor sin transferir datos al cliente.

En la versión 1.3.5, ninguno de los dos manejadores comprobaba si la sesión estaba autenticada. El módulo simplemente asumía "nadie enviará comandos SITE antes de iniciar sesión" — una suposición rota que se convirtió en un CVE. Cualquier cliente no autenticado podía copiar cualquier archivo legible por el proceso del servidor a cualquier ubicación escribible por él.

El parche

La corrección (commit 212d54271f, publicada en 1.3.5a) hace dos cosas:

  1. Añade una compuerta de autenticación al inicio de y :
copy_cpfr
copy_cpto
root@kitploit:~
authenticated = get_param_ptr(cmd->server->conf, "authenticated", FALSE);
if (authenticated == NULL || *authenticated == FALSE) {
  pr_response_add_err(R_530, _("Please login with USER and PASS"));
  errno = EPERM;
  return PR_ERROR(cmd);
}
  • Añade una directiva CopyEngine on|off — anteriormente el módulo ni siquiera podía desactivarse en compilaciones que lo incluían.
  • El diff unificado completo está en patch.diff. Leer parches es la habilidad: la corrección te dice dónde estaba la herida.

    El laboratorio

    El Dockerfile compila ProFTPD 1.3.5 (la última versión vulnerable) desde el tarball oficial de fuentes con mod_copy habilitado:

    root@kitploit:~
    docker build -t proftpd-135 .
    docker run -d --name lab135 -p 127.0.0.1:2121:21 -p 127.0.0.1:30000-30010:30000-30010 proftpd-135
    docker exec lab135 chmod 777 /home/ftp
    

    PassivePorts en proftpd.conf fija el canal de datos — la arquitectura de dos canales de FTP (control + datos dinámicos) es la razón por la que los mapeos ingenuos de contenedores fallan: el puerto de control funciona, el puerto de datos no.

    El exploit

    exploit.py usa sockets crudos — nada de ftplib, porque las librerías ocultan el protocolo, y ocultar el protocolo es exactamente contra lo que estamos luchando:

    root@kitploit:~
    SITE CPFR /etc/segredo.txt   -> 350  (no se envía USER/PASS: esto ES el bug)
    SITE CPTO /home/ftp/...      -> 250  (copia arbitraria realizada)
    USER ftp / PASS ...          -> 230  (el inicio de sesión es solo la vía de exfiltración)
    PASV / RETR                  -> 150 -> 226  (bandera capturada)
    DELE                         -> 250  (limpieza: sin IOC dejado atrás)
    

    Lecciones aprendidas (el punto real de este repositorio)

    • El banner no es la verdad. Debian aplica parches sin aumentar versiones; los honeypots (Dionaea y otros) imitan deliberadamente banners vulnerables.
    • Bug explotable no es igual a exploit automático. El entorno (permisos del sistema de archivos, AllowOverwrite, mapeos de puertos) decide el impacto final.
    • La idempotencia importa. Un buen exploit se ejecuta dos veces seguidas — nombres de destino únicos (time.time_ns(), no time.time()), y sin depender de estado residual.
    • Las respuestas FTP tienen una máquina de estados. 1xx es preliminar (espera más), 2xx completo, 3xx intermedio, 5xx error. RETR responde dos veces: 150, luego 226. Drena ambas antes del siguiente comando.
    • Los registros del objetivo son la verdad absoluta. Cuando el cliente dice "550" y no sabes por qué, el registro de depuración del servidor (-d10) te dice exactamente qué comprobación se disparó.
    • La limpieza es OPSEC. Un exploit que deja archivos atrás es un exploit que deja evidencia atrás.

    Referencias

    • Commit de la corrección: https://github.com/proftpd/proftpd/commit/212d54271f
    • CVE: https://nvd.nist.gov/vuln/detail/CVE-2015-3306

    Aviso legal

    Solo para fines educativos y uso autorizado en laboratorio. Ejecutar esto contra sistemas que no posees o para los que no tienes permiso por escrito para probar es ilegal.

    Descargar herramienta