Directory Traversal
Last updated
Last updated
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.
Para carregar uma imagem em uma página web, pode ser usado HTML:
É 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:
Caso não haja medidas de defesa contra esta vulnerabilidade, alguém mal intencionado pode requisitar outros arquivos da seguinte forma:
Com esta requisição, ao invés de seguir o caminho anterior, a máquina seguirá o seguinte caminho:
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 é:
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
Bloqueio de directory traversal sequences:
Para evitar a vulnerabilidade, a página pode bloquear sequencias de (../
), então duas coisas podem ser feitas:
Ao invés de usar (../
), usar (....//
), pois é equivalente ao anterior e dependendo do filtro, conseguiria passar por ele (Ex: [https://icmc.com.br/loadImage?filename=](https://insecure-website.com/loadImage?filename=../../../etc/passwd)....//....//....//etc/passwd );
testar se é possível usar o caminho absoluto, desde a root (Ex: [https://icmc.com.br/loadImage?filename=](https://insecure-website.com/loadImage?filename=../../../etc/passwd)/etc/passwd\);
Bloqueio de chars ou URL-encoding:
Alguns caracteres podem ser limitados por filtros, para impedir a exploração desta vulnerabilidade, porém é possível burlar estes filtros com versões codificadas dos caracteres proibidos:
Encoding and double encoding:
%2e%2e%2f
representa ../
;
%2e%2e/
representa ../
;
..%2f
representa ../
;
%2e%2e%5c
representa ..\
;
%2e%2e\
representa ..\
;
..%5c
representa ..\
;
%252e%252e%255c
representa ..\
;
..%255c
representa ..\
;
Entre outros exemplos;
URL encoding:
..%c0%af
representa ../
;
..%c1%9c
represents ..\
;
Referências:
What is directory traversal, and how to prevent it? | Web Security Academy