Tytuł wpisu parafrazujący znane wszystkim motto JoeMonstera. Mogłoby się wydawać, że tak duży i popularny serwis, po kilku przejściach z bezpieczeństwem w przeszłości (a raczej jego brakiem) będzie dzisiaj wolny od trywialnych błędów. Niestety, po zalogowaniu, spędzając trochę minut na stronie znalazłem kilka „perełek”.
Logowanie, edytujemy profil
Trzeba przyznać, że podczas edycji profilu wszystkie inputy są w jakiś sposób filtrowane. Ze wszystkich, prócz sygnatury forumowej, wycinane zostają wszelkie znaczniki HTML. Nie przechodzi tam jednak słówko script. Kod wycinający je wygląda prawdopodobnie następująco:
[codesyntax lang=”php”]
<?php $var = strtolower($_POST['sygnatura']); $var = str_replace("script", "*", $var); ?>
[/codesyntax]
Jak można zauważyć ciąg <scr ipt> przejdzie omijając filtrowanie. Nie to jednak jest problemem. JM przepuszcza wszystkie znaczniki HTML wraz z atrybutami, także stylów CSS.
Przyszły mi do głowy dwie metody wykorzystania tego niedopatrzenia. Pierwsza to zakrycie całej strony divem absolutnym z pozdrowieniami dla mamy, a druga to dodanie takim samym absolutnym divem „linku konkursowego” gdzieś w okolicach menu. Do stworzenia wspomnianego linku można także wykorzystać bardziej rzucający się w oczy panel boczny z pozycją fixed.
Warto zaznaczyć, że tak spreparowana sygnatura wyświetla się zarówno w naszym profilu jak i pod każdym postem na forum.
Otwórzmy szaffe
Szaffa to specjalne miejsce, gdzie przechowywane są pliki użytkowników. Umożliwia ona dodatkowo sortowanie ich w albumach. Docelowo plik *.php nie ma prawa przejść walidacji, jednak po próbie jego wrzucenia (poprzez uploader standardowy, nie ten domyślny) dostajemy ciekawy komunikat ze ścieżką do tego pliku w katalogu /tmp/.
Dobrze jednak, skupmy się na plikach graficznych i albumach. Jak się okazało żaden tytuł, nazwa albumu, czy tagi nie są filtrowane przed zastosowaniem w nich znaczników HTML. Tutaj ważna uwaga – tytuł ostatnio wrzuconych plików wyświetlany jest na stronie głównej.
Ciekawie wygląda także zawartość skryptu perform_upload.php odpowiadający za walidacje wrzucanych plików. Oczywiście wiem, bo udało mi się go pobrać dodając tyldę na końcu nazwy, o zgrozo!
Słowem zakończenia
Administracja JoeMonster.org została poinformowana o niedopatrzeniach i zostały one naprawione. Zaznaczam, że w trakcie testowania zabezpieczeń nie wyciekły żadne dane osobowe, ani nie został uzyskany dostęp do bazy danych i sesji użytkowników.
Z podziękowaniami dla Administratora za przedłużenie konta 😉
Komeniusz jak zwykle w swoim żywiole. 🙂