Wat is path traversal?

Path traversal of directory traversal is een kwetsbaarheid waarbij een aanvaller willekeurige bestanden van een server op kan vragen door uit een map te breken. Path traversal valt onder de categorie “3: Injection” van de OWASP top 10

path traversal

Hoe werkt path traversal?

Path traversal ontstaat wanneer een gebruiker een bestand op de server kan opvragen en de server de input van de gebruiker niet controleert. Neem bijvoorbeeld het onderstaande voorbeeld:

https://example.com/get_file.php?file=public/marketing.pdf

Hier is te zien dat het PHP-bestand een PDF ophaalt uit de map public. Maar wat als er een andere map ingevuld wordt?

https://example.com/get_file.php?file=private/secret.txt

Zonder goede access control zal het bestand “secret.txt” nu gedownload worden. Een aanvaller moet hier weten dat het bestand “secret.txt” bestaat en dat deze in de map “private” aanwezig is. Hierover later meer. Omdat er nu van directory is veranderd wordt deze aanval “directory traversal” genoemd.

In het bovenstaande voorbeeld staat de map in de url. Het is met een truc ook mogelijk om hoger te gaan. Het commando om een map hoger te gaan is “../”. Wanneer het programma niet hoger meer kan, dan zal het commando genegeerd worden. Op Linux is het bestand /etc/passwd altijd aanwezig en leesbaar. Vroeger stonden hier wachtwoorden in, maar tegenwoordig is het meer een lijst van gebruikers. Om dit bestand op te vragen kan het volgende commando opgegeven worden:

https://example.com/get_file.php?file=../../../../../../../../etc/passwd

Hoewel er geen idee is hoever er naar boven gegaan moet worden, wordt er een aantal keer  ../ toegevoegd. Wellicht is het teveel, maar dat maakt niet uit. Nu is de inhoud van /etc/passwd te zien.

Hoe vindt een hacker bestanden?

Sommige bestanden staan altijd op dezelfde locatie, zoals het passwd bestand. Anderen staan vaak op dezelfde locatie. Als bijvoorbeeld de inhoud van get_file.php bekeken wil worden, dan is de kans groot dat deze staat in de map /var/www/ of /var/www/html. Dit hoeft echter niet, waardoor het een kwestie van raden is, en veelgebruikte paden proberen. In het eerdergenoemde voorbeeld werd de map “private” genoemd. Een hacker zou dit kunnen vinden door alle broncode te bekijken en verwijzingen naar de map te vinden. Ook kan een aanvaller proberen de accesslog op te vragen. Hierin wordt gelogd welke bestanden opgevraagd zijn, ook door andere gebruikers.

Standaard locaties:

C:\windows\win.ini
C:\windows\system.ini
C:\windows\iis.log
C:\windows\System32\Drivers\etc\hosts
C:\inetpub\index.asp
/etc/passwd
/etc/shadow
/etc/crontab
var/www/logs/access_log
var/www/logs/access.log
/etc/httpd/logs/acces.log
var/log/apache/access_log
var/log/apache2/access_log
/var/www/index.php
/var/www/html/index.php