Nuevos labs cada semana — Accede a todos desde 7,99€/mes

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. 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. 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. 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. 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. 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

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.

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