Najprościej mówiąc podatność path travelsal polega na uzyskaniu dostępu do plików i folderów docelowo dla nas niedostępnych. Odbywa się to za sprawą manipulacji parametrami np. dodając jako ich wartość „../../”. Skutkuje to nie tylko ujawnieniem danych poufnych czy plików konfiguracyjnych, ale w skrajnych przypadkach prowadzi do zdalnego wywołania kodu, o czym przekonamy się w dalszej części artkułu.
Strony zabezpieczają się przed podatnością min. takim oprogramowaniem jak WAF. Nieprzemyślane i źle wdrożone zabezpieczenia da się ominąć stosując poniższe, przykładowe payloady. Strzałką oznaczono ich reprezentację.
%2e%2e%2f
–>../
%2e%2e/
–>../
..%2f
–>../
%2e%2e%5c
–>..\
%2e%2e\
–>..\
..%5c
–>..\
%252e%252e%255c
–>..\
..%255c
–>..\
Mimo swoich lat i relatywnie prostym do wdrożenia zabezpieczeniom przeciwko podatności path travelsal, ciągle możemy się na nią natknąć zarówno w starszych, jak i nowych technologiach. Oto kilka przykładów, które tego dowodzą.
Nieprawidłowa walidacja przekazywanych parametrów
Na początek prosty przykład. Pentester opisuje stronę działającą w oparciu o node.js i express w której jeden z endpointów pozwalał na przekazywanie wszystkich parametrów wprowadzonych przez użytkownika na renderowaną po stronie serwera stronę. Używała ona do tego silnika hbs, który nie waliduje przekazywanych parametrów, co pozwoliło atakującemu na wykorzystanie opcjonalnego parametru „layout” do znalezienia podatności path travelsal. Szczegółów o znalezisku dowiesie się stąd.
Open redirect + path travelsal = SSRF
Przykład w którym użytkownik początkowo stwierdza podatność typu open redirect, a następnie path travelsal w jednym z parametrów endpointa. Osatecznie skutkuje to SSRF.
Zdalne wykonanie kodu w bibliotece kramdown
Kramdown jest biblioteką napisaną w Ruby przeznaczoną do parsowania i konwersji tekstu napisanego w języku znaczników Markdown. Wykorzystuje go min.: Github Pages, Jekyll oraz Gitlab. W artykule pentester opisuje niepoprawną walidację znaków przyjmowanych jako argumenty, która doprowadziła do ataku typu path travelsal, co w następstwie skończyło się na możliwości zdalnego wykonania kodu.
Skrypty
Jak można zautomatyzować znajdywanie podatności? Możliwości jest wiele. Osobiście sugerujemy dot2moon. Jak go użyć? Używając domyślnego, dostarczonego z narzędziem słownika, nasza komenda będzie wyglądać w sposób następujący:
python3 dot2moon.py -u https://host:port?key= -w wordlists/wl.txt
Źródła
https://owasp.org/www-community/attacks/Path_Traversal
https://github.com/jcesarstef/dotdotslash
https://arjunshibu.tech/intro-to-open-source-bug-bounty/
https://blog.shoebpatel.com/2021/01/23/The-Secret-Parameter-LFR-and-Potential-RCE-in-NodeJS-Apps/
https://ninetyn1ne.github.io/2020-10-05-open-redir-to-ato/
https://devcraft.io/2020/10/20/github-pages-multiple-rces-via-kramdown-config.html