Come sfrutta Directory Traversal per attraversare da un'unità / condivisione a un'altra?

7

Sto cercando di capire se è possibile attraversare unità o condivisioni. Se ho un percorso che è concatenato in un'applicazione web, dove il prefisso è un disco, come questo:

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

È possibile utilizzare caratteri speciali o altri metodi per ottenere un riferimento all'unità C: \ anziché a D: \ drive? Ho provato pipe (|), punti e virgola, valori null con codifica URL (% 00) e molte altre cose.

    
posta joelvh 29.07.2011 - 00:09
fonte

2 risposte

4

Voglio menzionare che, indipendentemente dal fatto che sia possibile attraversare le unità, questo codice non è sicuro e non dovrebbe essere utilizzato.

Ad esempio, consente definitivamente l'attraversamento del percorso all'interno di una singola unità. Consente inoltre l'accesso a determinati nomi di file speciali che sono implicitamente collegati nello spazio dei nomi su ogni unità, come CON, PRN, AUX, CLOCK $, NUL, COM0, .., LPT0, ...

    
risposta data 02.08.2011 - 22:11
fonte
4

Nel tuo esempio, non credo che attraversare una diversa unità sia possibile solo attraverso l'attraversamento di directory (ad esempio .. \ .. \ .. \ windows \ system32).

Il modo più plausibile per un utente malintenzionato di sfruttare questo può essere attraverso un link hard / simbolico che punta a qualche parte sull'unità C:

Se stavi utilizzando la variabile percorso come argomento per un comando (ovvero, il bombardamento) potrebbero esserci altri problemi.

    
risposta data 29.07.2011 - 01:38
fonte