Jest to blog poświęcony nowoczelnym technologiom ułatwiającym tworzenie aplikacji internetowych. Znajdziesz tutaj porady na temat CSS3, JavaScript, designu, web-usability, standardów W3C.
Cześć! Nazywam się Michał Środek. Z zawodu programista php, z zamiłowania gitarzysta oraz fanatyk GNU/Linuksa(openSUSE® w laptopie). W branży aplikacji internetowych od 9 lat. Prywatnie bez dzieci i kota.
Pracuję wciąż nad własnym elastycznym i wydajnym frameworkiem MVC, kilkoma portalami internetowymi oraz mniejszymi bibliotekami php. Czekam na wasze opinie, zgłoszenia błędów oraz pomysły na dalszy rozwój.
Ta część strony jest w trakcie budowy a moje prace tymczasowo niedostępne.
W przypadku pytań, ofert pracy oraz ciekawych pomysłów proszę się ze mną kontaktować. Możesz mnie znaleźć i wysłać PW na php.pl(SHiP), jamendo.com(michalsrodek), goldenLine.pl, facebook.com lub nk.pl
Zająłem się ostatnio w analizą konfiguracji PHP oraz sprawdzaniem w jakich okolicznościach jest możliwe dołączenie lub podglądanie plików php znajdujących się na serwerze. W kilku artykułach postaram się wyjaścić większość znanych mi technik. Rozpocznę od dosyć prostych i oczywistych, a w kolejnych częściach będę podnosił poprzeczkę usprawniając konfigurację serwera. Dzisiaj zaprezentuję na czym polega atak LFI(Local File Inclusion) polegający na uruchamianiu pliku dostępnego na serwerze.
Na atak są podatne strony wykorzystujące takie funkcje jak np. file(), file_get_contents(), include(), include_once(), require() i inne czytające dane z jakiegoś pliku. Ważne aby w paramtr określający adres czytanych zasobów był zależny od jakiejść zmiennej przesłanej przez użytkownika. Przykładowy(bardzo popularny) kod:
include('strony/'.$_GET['page'].'.html');
Atak działa podobnie jak SQL Injection. Musimy tak spreparować adres aby odnosił się on do innego pliku. Spróbujmy wpisać:
example.com?page=../index
Skrypt powinien wczytać plik strony/../index.html czyli po prostu index.html. Problem stanowi rozszerzenie określone z góry przez programistę. Gdybyśmy się go pozbyli, możliwe byłoby dołączenie dowolnego pliku, do którego posiadamy uprawnienia. Zastanówmy się jednak w jaki sposób działają powyższe funkcje. Wiemy, że PHP jest pisany w C. Jako parametr podajemy ciąg znaków. Każdy programujący w C wie, że stringi w tym języku to po prostu tablice znaków wyglądające następująco:
Jakis ciag znakow\0
Znakiem który określa zakończenie napisu jest znak zero. Jest to spowodowane tym, że tablica może mieć większy rozmiar niż długość napisu. Jezyk C jest tak napisany, że sam nie zeruje wartośći w pamięci na które wskazujemy więc brak znaku zero powodowałoby wyświetlanie „śmieci“ z pamięci. Tak więc dobrym pomysłem byłoby wszczepienie znaku \0 do naszego zapytania. Spróbujmy wpisać w adresie strony coś takiego:
example.com?page=../index.php%00
Jak zinterpretuje to PHP? Do funkcji include() zostanie przekazany ciąg znaków strony/../index.php\0.html. Funkcja include otrzymując w parametrze tablicę znaków wybierze wszystkie aż do znaku \0. W ten sposób końcówka .html zostanie uznana za śmieci z pamięci. Jak się chronić przed tym atakiem? Wystarczy prosty test poprawności przesyłanych danych:
if( preg_match('/^[a-zA-Z0-9]*$/', $_GET['page']) ) include('strony/'.$_GET['page'].'.html');
Ograniczenia? Niestety możemy uruchomić jedynie pliki znajdujące się na serwerze. Jest jednak kilka sposobów aby sobie z tym problemem poradzić. Następnym razem przedstawię jak uruchomić własny kod PHP w przypadku dziury przedstawionej w tym artykule oraz błędnej konfiguracji serwera.
„wykorzystujące taki funkcje“ literówka
Komentarz by Hs2 — 20 lutego 2010, 19:54
Szczerze? Kolejny raz, pozytywnie mnie zaskoczyłeś
Z niecierpliwością czekam na dalszą część artykułów
Komentarz by Hs2 — 20 lutego 2010, 19:58
Chyba nie zaakceptowałeś komentarzy bo na stronie widać tylko Twoje
Komentarz by pfugiel — 12 marca 2010, 17:26
Hmm, w którym miejscu? Ogólnie Nie mam żadnych komentarzy oczekujących.
Komentarz by Michał Środek — 12 marca 2010, 20:11
Bardzo fajny artykuł
czekam na kolejny
Komentarz by Maxx — 5 kwietnia 2010, 1:51
I’m looking forward to getting more information about this topic, don’t worry about negative opinions.
Komentarz by Guests — 8 kwietnia 2010, 2:12