Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] code injection w obrazku JPEG
Forum PHP.pl > Forum > Przedszkole
matijas6113
Witam,
Jest to mój pierwszy post i temat na tym forum. Otóż posiadam mała stronke na serwerze kolegi, która służy mi i znajomym do uploadowania małych plików na serwer tak aby każdy miał do nich dostęp (szkolne dokumenty, zdj itp). Uczę się php jednak nie wiem dokładnie jak zabezpieczyc strone. Upload wygląda tak ze ktoś uploaduje plik przez <form> i pole <input type="file">. Następnie skrypt php zapisuje go na serwerze w katalogu o nazwie (losowe ID z 9 znaków) a w folderze plik którego nazwa zostaje takze zmieniona na nazwe ID + . + rozszerzenie pierwotne pliku. Nazwa pierwotna zostaje zapisana jako tytuł pliku i zostaje dodatkwowo "konwetowana" htmlspecialchars(). Dodatkowo mozna jedynie wrzucac pliki o rozszerzeniach jpg, png, rar, txt innych nie przyjmuje. To taki krótki opis strony.

Teraz problem:
Ktoś wrzucił plik o nazwie *.php.jpg i jest to plik php zapisany pod rozszerzeniem jpg więc trafił na moją strone, kiedy klikne aby otworzyc ten plik na stronie otwiera sie jednak nic nie ma (wiadomo bo to nie zdj).

kod php tego pliku:

"mój temat jest za długi więc kod podaje w linku"
http://www22.zippyshare.com/v/77200708/file.html

I teraz moje pytanie ponieważ nie umiem zaczaić: jakie ten kod ma zadanie? czy ten kod był w stanie zadziałać jeśli był otwarty jako plik jpg na stronie?

z góry dziękuje za pomoc i przepraszam za ewentualne błedy.
drozdii07
Jak sam zauważyłeś sprawdzanie tylko rozszerzenia jest mało warte wink.gif Dodaj do tego sprawdzanie typu MIME i powinno obejść się bez takich plików wink.gif
matijas6113
ok zaraz obczaje co to jest MIME a jeszcze jak mozesz powiedzieć co ten kod miał za zadanie i czy mógł ten kod zostać wykonany.
drozdii07
Jak mi się uda to zaraz ci napisze kod z tego pliku wink.gif

http://www.tareeinternet.com/scripts/decrypt.php

Mi pokazuje alerta, ale trochę kodu widać biggrin.gif
matijas6113
Cos tam widac ale nie duzo;p nie jestem w stanie ogarnąc co mógł ten kod robic narazie wygląda mi to na zbieranie informacji a nie jako jakiś konkretny "atak" że tak powiem. ALe moze sie mylę.
drozdii07
Początek wygląd jak sprawdzanie czy został przesłany plik ;D
matijas6113
szkoda, że więcej nie da rady zobaczyć... szukam przykładów z mime, żeby obczaić to jak to sprawdzaćsmile.gif ale nie wiem czy w kazdym przypadku plik ma typ MIME...
Daiquiri
Proszę o propozycję sensownego* tytułu wątku na PW. Jak ją otrzymam - temat zostanie otwarty.

*oddającego charakter zagadnienia. "Pytanie" lub "problem" ma tutaj większość piszących.
matijas6113
A więc powrót do tematu. Znalazłem bardzo ciekawy artykuł, który pomaga zrozumieć taki atak. Mam nadzieje, że moge posłużyć się zewnętrzymi materiałami:
http://php.webtutor.pl/pl/2011/04/11/code-...w-obrazku-jpeg/
Według tego artykułu taki kod mógłby być użyty gdyby galeria bądź inna strona wczytywała obrazek za pomocą include() bądź require(). Moja strona wyświetla taki zuploadowany obraz jak czysty obrazek czyli obraz nie jest wyświetlony jako zawratość strony lecz jest otwierany jako plik - otwiera sie w naszym oknie przeglądarki SAM obraz. Tak więc wnioskuję, że kod php nie mógł się w żaden sposób wykonać na mojej stronie, mam racje? jeśli natomiast obraz wyświetlany byłby na stronie lecz za pomocą html i znacznika <img> dajmy na to <img src="szskodliwyobrazek.jpg" /> to kod php w nim zawarty ma możliwość wykonania się?

Dodatkowo jak można trafnie sprawdzić typ pliku? MIME z tego co na szybko wyczytałem można sprawdzic za pomocą mime_content_type jednak to działa tylko na unixach i nie zawsze moze zadziałać dla pliku bo pliki mogą być spreparowane tak?

Z góry dziękuje za zaangażowanie i odpowiedzi. Postaram się sam rozwiązać chociaż część z tych zagadek i rozwiązania będę umieszczał w pierwszym poście jako EDIT.
Dziękuje drozdii07 za włączenie się do tematu i za pomoc:) Mam nadzieję, że znajdą się osoby, które będą w stanie odpowiedzieć na część pytańsmile.gif
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.