Nuevos labs cada semana — Accede a todos desde 7,99€/mes
Ver labs →Labs de File Upload
Malicious File Upload
¿Qué es File Upload?
Las vulnerabilidades de File Upload aparecen cuando una app permite subir ficheros sin validar tipo, contenido o destino. Según cómo se sirva el fichero, derivan en RCE (webshell), XSS almacenado (SVG/HTML), path traversal en el nombre o XXE/SSRF al procesar el contenido.
¿Por qué practicar File Upload?
Casi toda app tiene subida de avatar, documentos o adjuntos, y validar bien es sorprendentemente difícil. Una subida que acaba en webshell es RCE directa (P1, $5,000-$30,000); incluso sin RCE, un SVG con XSS almacenado o un path traversal en el filename ya son hallazgos sólidos.
¿Qué aprenderás con los labs de File Upload?
Aprenderás a mapear el flujo de subida y dónde se sirve el fichero, bypassear validaciones de extensión (doble extensión, mayúsculas, null byte), falsear Content-Type y magic bytes, subir webshells y polyglots, abusar de SVG para XSS y de nombres de fichero para traversal.
Tipos de File Upload que cubrimos
- Webshell / RCE
Subir un .php/.jsp ejecutable a un directorio servido por el motor. Acceder a la URL ejecuta tu código.
- Bypass de extensión
shell.php.jpg, shell.pHp, shell.php%00.jpg, .phtml/.php5 — saltarse blacklists o whitelists mal hechas.
- SVG / HTML XSS
SVG y HTML son ejecutables en el navegador. Un avatar SVG con <script> da XSS almacenado al verlo.
- Path traversal en filename
Nombre como ../../var/www/shell.php para escribir fuera del directorio de uploads.
¿Cómo encontrar y explotar File Upload?
Playbook práctico — del recon a la prueba de concepto.
- 1
Mapear el flujo y el destino
Sube un fichero válido y observa la respuesta: la URL donde queda, si renombran, qué directorio sirve y con qué Content-Type se devuelve.
POST /upload → https://target/uploads/2024/avatar_123.png - 2
Probar un ejecutable directo
Intenta subir una webshell con la extensión del motor. Si el directorio la ejecuta, tienes RCE.
shell.php → <?php system($_GET['c']); ?> → /uploads/shell.php?c=id - 3
Bypassear la validación de extensión
Si filtran .php, prueba dobles extensiones, variantes de mayúsculas, extensiones alternativas y null byte en motores legacy.
shell.php.jpg · shell.pHp · shell.phtml · shell.php%00.jpg - 4
Falsear tipo y magic bytes
Cambia el Content-Type a image/png y antepone una cabecera mágica de imagen para colar un polyglot ante validaciones por firma.
GIF89a;<?php system($_GET['c']); ?> con Content-Type: image/gif - 5
Si no hay RCE, ir a XSS/traversal
Sube un SVG con script para XSS almacenado, o manipula el filename para escribir fuera del directorio previsto.
<svg xmlns="http://www.w3.org/2000/svg" onload="alert(document.domain)"/> · filename="../../app/public/x.html"
Aprende la teoría
Academy: File Upload Vulnerabilities
Cargando labs...
Ver en catálogo completo →Preguntas frecuentes
¿Qué es una vulnerabilidad de File Upload?
Es un fallo en el que la app acepta ficheros sin validar correctamente su tipo, contenido o destino. Según cómo se sirvan, permiten ejecutar código (webshell), XSS almacenado (SVG/HTML), path traversal en el nombre o XXE/SSRF al procesarlos.
¿Cómo se explota una subida de ficheros insegura?
Se sube un fichero ejecutable (p. ej. una webshell PHP) a un directorio servido por el motor y se accede a su URL para lograr RCE. Si hay validaciones, se bypassean con dobles extensiones, magic bytes falsos o polyglots; sin RCE, un SVG con script da XSS almacenado.
¿Cómo encontrar File Upload en bug bounty?
Localiza toda subida (avatar, documentos, import) y analiza dónde se guarda y cómo se sirve. Prueba extensiones ejecutables y sus bypasses, falsea Content-Type y firma, y experimenta con nombres de fichero maliciosos y SVG para XSS.
¿Cómo prevenir un File Upload malicioso?
Valida por allowlist de extensiones y de tipo real (magic bytes), renombra los ficheros con nombres aleatorios, sírvelos desde un dominio sandbox sin ejecución de código y con Content-Disposition: attachment, y guarda los uploads fuera del webroot.
¿Diferencia entre File Upload y Path Traversal?
El Path Traversal LEE ficheros existentes fuera del directorio; el File Upload ESCRIBE ficheros (que pueden ejecutarse). A veces se combinan: un nombre de fichero con ../ durante la subida escribe la webshell en una ruta servida, encadenando ambos.
Otras categorías relacionadas
Empieza con labs de File Upload
Practica Malicious File Upload con labs basados en reportes reales. En español. Desde 7,99€/mes.
Empieza con el primer lab de File Upload