Saltar a contenido

Limited File Uploads

Además de las cargas arbitrarias de archivos y los ataques de carga de archivos limitados, hay algunas otras técnicas y ataques que vale la pena mencionar, ya que pueden ser útiles en algunas pruebas de penetración web o pruebas de bug bounty. Vamos a discutir algunas de estas técnicas y cuándo podemos usarlas.


Injections in File Name

Un ataque común de carga de archivos utiliza una cadena maliciosa para el nombre del archivo cargado, que puede ejecutarse o procesarse si el nombre del archivo cargado se muestra (es decir, reflejado) en la página. Podemos intentar inyectar un comando en el nombre del archivo, y si la aplicación web usa el nombre del archivo dentro de un comando del sistema operativo, puede llevar a un ataque de command injection.

Por ejemplo, si nombramos un archivo file$(whoami).jpg o file`whoami`.jpg o file.jpg||whoami, y luego la aplicación web intenta mover el archivo cargado con un comando del sistema operativo (por ejemplo, mv file /tmp), entonces nuestro nombre de archivo inyectaría el comando whoami, que se ejecutaría, llevando a una ejecución remota de código. Puedes consultar el módulo de Command Injections para obtener más información.

De manera similar, podemos usar un XSS payload en el nombre del archivo (por ejemplo, <script>alert(window.origin);</script>), que se ejecutaría en la máquina del objetivo si se muestra el nombre del archivo. También podemos inyectar una consulta SQL en el nombre del archivo (por ejemplo, file';select+sleep(5);--.jpg), lo que puede llevar a una SQL injection si el nombre del archivo se usa de manera insegura en una consulta SQL.


Upload Directory Disclosure

En algunos formularios de carga de archivos, como un formulario de retroalimentación o un formulario de envío, puede que no tengamos acceso al enlace de nuestro archivo cargado y no sepamos el directorio de cargas. En tales casos, podemos utilizar fuzzing para buscar el directorio de cargas o incluso usar otras vulnerabilidades (por ejemplo, LFI/XXE) para encontrar dónde están los archivos cargados leyendo el código fuente de las aplicaciones web, como vimos en la sección anterior. Además, el módulo de Web Attacks/IDOR discute varios métodos para encontrar dónde pueden estar almacenados los archivos e identificar el esquema de nombres de archivo.

Otro método que podemos usar para divulgar el directorio de cargas es a través de forzar mensajes de error, ya que a menudo revelan información útil para una mayor explotación. Un ataque que podemos usar para causar tales errores es cargar un archivo con un nombre que ya existe o enviar dos solicitudes idénticas simultáneamente. Esto puede llevar al servidor web a mostrar un error de que no pudo escribir el archivo, lo que puede divulgar el directorio de cargas. También podemos intentar cargar un archivo con un nombre demasiado largo (por ejemplo, 5,000 caracteres). Si la aplicación web no maneja esto correctamente, también puede generar un error y divulgar el directorio de cargas.

De manera similar, podemos intentar varias otras técnicas para causar que el servidor genere un error y divulgar el directorio de cargas, junto con información adicional útil.


Windows-specific Attacks

También podemos usar algunas técnicas Windows-Specific en algunos de los ataques que discutimos en las secciones anteriores.

Uno de esos ataques es usar caracteres reservados, como (|, <, >, *, o ?), que generalmente están reservados para usos especiales como wildcards. Si la aplicación web no sanitiza correctamente estos nombres o los envuelve entre comillas, pueden referirse a otro archivo (que puede no existir) y causar un error que divulgue el directorio de cargas. De manera similar, podemos usar nombres reservados de Windows para el nombre del archivo cargado, como (CON, COM1, LPT1, o NUL), que también pueden causar un error ya que la aplicación web no podrá escribir un archivo con este nombre.

Finalmente, podemos utilizar la 8.3 Filename Convention de Windows para sobrescribir archivos existentes o referirnos a archivos que no existen. Las versiones más antiguas de Windows estaban limitadas a una longitud corta para los nombres de archivo, por lo que usaban un carácter Tilde (~) para completar el nombre del archivo, lo que podemos usar a nuestro favor.

Por ejemplo, para referirnos a un archivo llamado (hackthebox.txt) podemos usar (HAC~1.TXT) o (HAC~2.TXT), donde el dígito representa el orden de los archivos coincidentes que comienzan con (HAC). Como Windows aún soporta esta convención, podemos escribir un archivo llamado (por ejemplo, WEB~.CONF) para sobrescribir el archivo web.conf. De manera similar, podemos escribir un archivo que reemplace archivos sensibles del sistema. Este ataque puede llevar a varios resultados, como la divulgación de información a través de errores, causar un DoS en el servidor de back-end o incluso acceder a archivos privados.


Advanced File Upload Attacks

Además de todos los ataques que hemos discutido en este módulo, hay ataques más avanzados que se pueden usar con funcionalidades de carga de archivos. Cualquier procesamiento automático que ocurra a un archivo cargado, como codificar un video, comprimir un archivo o renombrar un archivo, puede ser explotado si no está codificado de manera segura.

Algunas bibliotecas comúnmente usadas pueden tener exploits públicos para tales vulnerabilidades, como la vulnerabilidad de carga de AVI que lleva a XXE en ffmpeg. Sin embargo, al tratar con código personalizado y bibliotecas personalizadas, detectar tales vulnerabilidades requiere conocimientos y técnicas más avanzadas, lo que puede llevar a descubrir una vulnerabilidad avanzada de carga de archivos en algunas aplicaciones web.

Hay muchas otras vulnerabilidades avanzadas de carga de archivos que no discutimos en este módulo. Trata de leer algunos informes de bug bounty para explorar más vulnerabilidades avanzadas de carga de archivos.