Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Path Traversal regex - jak cofnąć się wstecz bez ../
Forum PHP.pl > Forum > PHP
duch4ever
Witam, znalazłem ciekawą linijkę w pewnym cmsie i wydaje się być podatny na atak Path Traversal.
Zostało mi jedna rzecz mianowicie mogę dowolnie manipulować adresem i wyświetlić dowolny plik ale nie mogę się cofnąć w drzewie katalogów bo jest na końcu mniejwięcej taki filtr:

  1. $path = dirname(__FILE__).(string)preg_replace('#\.{2,}#', '.', $_GET['xxx']);


Czyli xxx jest filtrowana pod kątem dwóch kropek i zamienia je na jedną.
I tu pytanie czy da się to jakiś obejść (linux)?
by_ikar
Jeżeli wszystkie pliki masz w jednym katalogu, wystarczy użyć basename aby wyciągnąć z podanej ścieżki plik:

  1. $path = dirname(__FILE__).basename($_GET['xxx']);
duch4ever
Nie nie, muszę się cofnąć o kilka katalogów aby pobrać config z hasłami mysql itp. i do tego mogę manipulować tylko zmienną $_GET['xxx']. Dalej w hierarchii nic nie ma tylko pliki html.
NickOver
Na mój rozum jeśli 2 kropki zamienia w jedną, to dając 3 kropki zostaną dwie.
duch4ever
Nie, 2 i więcej zamienia na jedną: http://www.phpliveregex.com/p/fsk
by_ikar
Cytat(duch4ever @ 24.04.2016, 21:41:19 ) *
Nie nie, muszę się cofnąć o kilka katalogów aby pobrać config z hasłami mysql itp. i do tego mogę manipulować tylko zmienną $_GET['xxx']. Dalej w hierarchii nic nie ma tylko pliki html.


Ale to musisz się cofać z poziomu zmiennej GET? Nie możesz tego na sztywno w kodzie umieścić ? Jeżeli będzie to na sztywno w kodzie, a będziesz ze zmiennej GET pobierał tylko nazwę pliku, to basename jest wystarczające. W przeciwnym wypadku żadne wyrażenie ci nie pomoże.
Pyton_000
Przez ten filtr nie cofniesz się. Chyba że . zostanie zamieniona na jakiś kod odpowiadający . i ten to przeparsuje poprawnie.
duch4ever
No właśnie dlatego pytam smile.gif próbowałem zamieniać jak piszą na wiki ale nie działa:

%2e%2e%2f which translates to ../
%2e%2e/ which translates to ../
..%2f which translates to ../
%2e%2e%5c which translates to ..\
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.