¿Cómo se explota el cruce de directorios para atravesar de una unidad / compartir a otra?

7

Estoy tratando de averiguar si es posible atravesar unidades o recursos compartidos. Si tengo una ruta que está concatenada en una aplicación web, donde el prefijo es una unidad, como esta:

var path = "D:\" + Request.Params["directory"];

¿Es posible utilizar caracteres especiales o cualquier otro método para obtener una referencia a la unidad C: \ en lugar de a la unidad D: \? He probado tuberías (|), punto y coma, nulos con codificación URL (% 00) y varias otras cosas.

    
pregunta joelvh 29.07.2011 - 00:09
fuente

2 respuestas

4

Quiero mencionar que, independientemente de si es posible atravesar las unidades, este código es inseguro y no debe usarse.

Por ejemplo, definitivamente permite el recorrido de la ruta dentro de una sola unidad. También permite el acceso a ciertos nombres de archivos especiales que están vinculados implícitamente al espacio de nombres en cada unidad, como CON, PRN, AUX, CLOCK $, NUL, COM0, .., LPT0, ...

    
respondido por el D.W. 02.08.2011 - 22:11
fuente
4

En su ejemplo, no creo que el desplazamiento a un disco diferente sea posible únicamente a través del recorrido de directorios (por ejemplo, .. \ .. \ .. \ windows \ system32).

La forma más plausible en que un atacante puede explotar esto puede ser a través de un enlace rígido / simbólico que apunta a algún lugar en la unidad C :.

Si luego usabas la variable ruta como argumento de un comando (es decir, descifrando), puede haber otros problemas.

    
respondido por el outside 29.07.2011 - 01:38
fuente

Lea otras preguntas en las etiquetas