Directory Traversal

O que é "Directory traversal"?

Directory traversal é uma vulnerabilidade em que o atacante consegue acesso a arquivos arbitrários do server que está rodando um programa. Então, nesta vulnerabilidade é possível acessar documentos do diretório raíz.
Could not load image
https://upload.wikimedia.org/wikipedia/commons/d/df/Directory_traversal.png

Lendo arquivos com directory traversal:

Para carregar uma imagem em uma página web, pode ser usado HTML:
1
<img src="loadImage?filename=ganesh.png">
Copied!
É possível ver que há um parâmetro filename, que é o nome do documento da imagem que será mostrada na página.
Para acessar a imagem, o programa percorre um caminho até a imagem, um exemplo seria:
1
*/var/www/images/ganesh.png*
Copied!
Caso não haja medidas de defesa contra esta vulnerabilidade, alguém mal intencionado pode requisitar outros arquivos da seguinte forma:
1
[https://icmc.com.br/loadImage?filename=../../../etc/passwd](https://insecure-website.com/loadImage?filename=../../../etc/passwd)
Copied!
Com esta requisição, ao invés de seguir o caminho anterior, a máquina seguirá o seguinte caminho:
1
/var/www/images/../../../etc/passwd
Copied!
Assim como no terminal, (../) indica que a máquina acessará o diretório pai ao atual, e por ter três (../), o computador acessará a root, e o que realmente é lido é:
1
/etc/passwd
Copied!
Esta localização acima, em sistemas operacionais baseados em Unix, contém informações privadas do usuário, por isso o exemplo contém estes nomes.
No Windows, pode ser usado tanto (../) quanto (..\) e ao invés de /etc/passwd seria \windows\win.ini

Obstáculos contra essa vulnerabilidade