Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zabezpieczenie przed uploadem obrazka z wirusem, exif tags obrazka z kodem php
daren88
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 3.09.2011

Ostrzeżenie: (0%)
-----


Witam

Istnieje możliwość zapisania w exif tags obrazka kodu php co może być niebezpieczne.
Napisałem bardzo prosty skrypt do sprawdzania kodu php w obrazkach i mam prośbę o sprawdzenie czy ten kod wystarczy, sprawdzałem kod i rzeczywiście odróżnia
obrazek z niebezpiecznym kodem od zwykłego obrazka ale może ktoś z was ma inne zdanie i wie jak oszukać ten skrypt (IMG:style_emoticons/default/questionmark.gif) ? (IMG:style_emoticons/default/guitar.gif)

  1. $get = file_get_contents( $_FILES['img']['tmp_name'] );
  2.  
  3.  
  4.  
  5. $pattern = '/<?php./';
  6.  
  7. if( preg_match($pattern,$get, $matches, PREG_OFFSET_CAPTURE) ){
  8.  
  9. echo' obrazek z kodem php ';
  10.  
  11. }
  12. else{
  13.  
  14. echo' nie ma kodu php';
  15.  
  16. }



Pomijam resztę zabezpieczeń post jest tylko o exif tags. Bardzo fajny artykuł na ten temat jest tutaj http://php.webtutor.pl/pl/2011/04/11/code-...w-obrazku-jpeg/ ale nie ma tam info jak wykryć niebezpieczny kod.
Go to the top of the page
+Quote Post
3 Stron V   1 2 3 >  
Start new topic
Odpowiedzi (1 - 19)
darko
post
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Żartujesz sobie, prawda?
Go to the top of the page
+Quote Post
daren88
post
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 3.09.2011

Ostrzeżenie: (0%)
-----


czemu miałbym żartować ? jeżeli ktoś zapisze w exif tags obrazka kod php a ktoś ten obrazek wczyta funkcją include (tak nikt oczywiście nie robi) to kod php się wykona i nie wiem co w tym śmiesznego a ponieważ exif tags są zapisywane w fomie zwykłego textu to można to sprawdzić.
Go to the top of the page
+Quote Post
pyro
post
Post #4





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat(darko @ 24.11.2011, 17:14:14 ) *
Żartujesz sobie, prawda?


A Ty sobie żartujesz mówiąc, że on sobie żartuje? Prawda?

@daren88, musiałbyś sprawdzać obrazek pod kątem wszystkich możliwych otwierających i i zamykających tagów. (nie tylko tego jednego) Zakładam, że takie rzeczy jak sprawdzanie rozszerzenia obrazka, tego czy ma wymiary i czy jest prawdłowy (jest uploadowanym plikiem) już masz wprowadzone. Bo to są podstawy. To co Ty próbujesz wprowadzić to tylko dodatkowe umocnienie.

Ten post edytował pyro 24.11.2011, 17:44:45
Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Żartujesz sobie, prawda?

Nie żartuje. Osobiście widziałem atak, który polegał właśnie na wstrzykiwaniu kodu poprzez EXIF-y, wspominałem o tym też na phpconie.

Interpreter nie sprawdza rozszerzenia odpalanego pliku. Szuka wyłącznie ciągu do przeparsowania. Przemycić go nawet w binarce, to nie problem.

Któraś wersja SimpleMachines Forum 1.1x była podatna na ten atak.
Go to the top of the page
+Quote Post
darko
post
Post #6





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Nie chodziło mi o samą możliwość takiego ataku, bo wiem, że takowa istnieje, a raczej o sposób rozwiązania problemu jako znalezienie otwierającego tagu <?php. Wydaje mi się, że to znacznie za mało, aby zmniejszyć ryzyko powodzenia tego typu ataku. Jeśli interpreter php obsługuje krótkie tagi czy tagi asp, to jest to marne rozwiązanie, bo kod zostanie prawdopodobnie wykonany. Do listy należałoby dodać jeszcze, o czym napisał już ~pyro:
<?
<%

Ten post edytował darko 25.11.2011, 03:11:12
Go to the top of the page
+Quote Post
eccocce
post
Post #7





Grupa: Zarejestrowani
Postów: 165
Pomógł: 5
Dołączył: 10.07.2008
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Niebezpieczny nie jest sam kod doklejony do obrazka - niebezpieczne jest używanie include / require do wypluwania tych obrazków!
Także poza skleceniem filtra (fajnie wiedzieć, kto Ci próbuje wrzucić zainfekowany plik) warto przejrzeć skrypty pod kątem takiej podatności.
Go to the top of the page
+Quote Post
cojack
post
Post #8





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


Obrazek z jakimś kodem nie będzie miał poprawnego mime/type. Jak ktoś sprawdza typy obrazków po ich rozszerzeniach a nie po mime/type to sam się prosi o problemy.
Go to the top of the page
+Quote Post
Niktoś
post
Post #9





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


A nie wystarczy sprawdzać pierwszych 250 bitów obrazka??.To jest przykład początku obrazka zapisanego jako txt-gif'a .
GIF89ajp÷ ÿÿÿ
To początek kodu obrazka jpeg:
ÿØÿà JFIF 
Go to the top of the page
+Quote Post
daren88
post
Post #10





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 3.09.2011

Ostrzeżenie: (0%)
-----


Cytat(cojack @ 25.11.2011, 13:20:18 ) *
Obrazek z jakimś kodem nie będzie miał poprawnego mime/type. Jak ktoś sprawdza typy obrazków po ich rozszerzeniach a nie po mime/type to sam się prosi o problemy.


mime/type można oszukać więc lepiej sprawdź twój kod. A jeżeli chodzi o mój skrypt to nie radze go używać zapomniałem o <? i <% ale niestety w połowie obrazków można znaleźć przypadkowe znaki <? bla bla bla ?> więc moja metoda odpada, a sam kod php w obrazkach nie jest szkodliwy jeżeli się go nie wykona np include czego nikt nie robi.
Go to the top of the page
+Quote Post
cojack
post
Post #11





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


includowałeś kiedyś obrazek w kodzie php? Oo
Go to the top of the page
+Quote Post
erix
post
Post #12





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Niebezpieczny nie jest sam kod doklejony do obrazka - niebezpieczne jest używanie include / require do wypluwania tych obrazków!

Hah, nie trzeba require/include:

[APACHE] pobierz, plaintext
  1. AddType application/x-httpd-php .jpg
[APACHE] pobierz, plaintext


i hulaj dusza.
Go to the top of the page
+Quote Post
darko
post
Post #13





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Mime/type też można oszukać, nigdy nie masz pewności, co do rodzaju przesyłanego pliku. Kiedyś była obszerna dyskusja na ten temat na tym forum i niestety zakończyła się taką oto smutną konkluzją. Oczekiwanego rezultatu nie daje nawet sprawdzanie funkcją getimagesize poprawności nagłówka obrazka, bo i to można obejść, nie wspominając już o bardziej wyrafinowanych metodach type sprawdzenie typu pliku poleceniem systemowym file -ib <plik> gdyż to polecenie zachowuje się różnie na różnych wersjach systemów operacyjnych.
Go to the top of the page
+Quote Post
pyro
post
Post #14





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat(Niktoś @ 25.11.2011, 14:23:00 ) *
A nie wystarczy sprawdzać pierwszych 250 bitów obrazka??.To jest przykład początku obrazka zapisanego jako txt-gif'a .
GIF89ajp÷ (IMG:style_emoticons/default/questionmark.gif) ?
To początek kodu obrazka jpeg:
(IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif) JFIF 


Nie, nie wystarczy.

Cytat
Obrazek z jakimś kodem nie będzie miał poprawnego mime/type. Jak ktoś sprawdza typy obrazków po ich rozszerzeniach a nie po mime/type to sam się prosi o problemy.


Nie masz pojęcia o czym piszesz...

Ten post edytował pyro 25.11.2011, 21:09:55
Go to the top of the page
+Quote Post
viking
post
Post #15





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


http://www.php.net/manual/en/function.imagick-stripimage.php

Nie pamiętam jak w GD.
Go to the top of the page
+Quote Post
cojack
post
Post #16





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


Cytat(pyro @ 25.11.2011, 21:09:43 ) *
Nie, nie wystarczy.



Nie masz pojęcia o czym piszesz...

Udowodnij.
Go to the top of the page
+Quote Post
erix
post
Post #17





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Mime/type też można oszukać, nigdy nie masz pewności, co do rodzaju przesyłanego pliku. Kiedyś była obszerna dyskusja na ten temat na tym forum i niestety zakończyła się taką oto smutną konkluzją

Bo sprawdzanie tego z tablicy $_FILES, to proszenie się o problemy.

Cytat
Udowodnij.

:
Cytat
Oczekiwanego rezultatu nie daje nawet sprawdzanie funkcją getimagesize poprawności nagłówka obrazka

Gdyż sprawdza wyłącznie nagłówek i bloki, które mówią o rozmiarze obrazka. Resztę może stanowić nawet dump z /dev/urandom, a i tak przejdzie.

Otwórz sobie jakiegoś JPEG-a w jakimś lepszym notepadzie albo edytorze heksadecymalnym, utnij mu kilkaset bajtów tak, aby pozostał nagłówek nieruszony, dopisz coś i otwórz w przeglądarce albo sprawdź MIME. [;

Potem zabieraj głos. [;
Go to the top of the page
+Quote Post
szmerak
post
Post #18





Grupa: Zarejestrowani
Postów: 286
Pomógł: 12
Dołączył: 23.11.2006
Skąd: WL

Ostrzeżenie: (0%)
-----


Ja na twoim miejscu poświęcił trochę więcej czasu i zrobił następująco:

Czy znajduje się znak otwierający php
<? lub <?php

jeśli tak pobierasz dalszą część i sprawdzasz czy jest to kod php, bo tak jak pisałeś wcześniej czasami występują przypadkowe znaki <?
ale jest bardzo małe prawdopodobieństwo że wystąpi np. <? $
lub też tworzysz liste hexów czyli potencjalnych liter które mogły zostać użyte do stworzenia funkcji jeśli po tym znaku znajduje się pare hexów z listy pod rząd czy też jak tam to sobie wymyślisz to znaczy ze jest to php...
Jest to wsumie jakies tam zabezpieczenie bo wiadomo ze funkcja ani zmienna nie moze miec takich znakow &^%$%#*...

Mam nadzieje że dobrze myślę (IMG:style_emoticons/default/smile.gif)

Ten post edytował szmerak 26.11.2011, 15:56:00
Go to the top of the page
+Quote Post
Niktoś
post
Post #19





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


Próbuje utworzyć plik ze skryptem javascript ,ale chyba źle coś robię ,czy ktoś może posiada taki plik,albo wie skąd można ściągnąć taki plik("tylko jakiś nie groźny-nie chciałbym mieć wirusów na kompie"), chciałbym przetestować swoją aplikację.
Go to the top of the page
+Quote Post
szmerak
post
Post #20





Grupa: Zarejestrowani
Postów: 286
Pomógł: 12
Dołączył: 23.11.2006
Skąd: WL

Ostrzeżenie: (0%)
-----


http://www.programosy.pl/program,exifeditor.html tym programem mozesz to zrobic
tutek jak: http://php.webtutor.pl/pl/2011/04/11/code-...w-obrazku-jpeg/
url zainfekowanego obrazka: http://php.webtutor.pl/wp-content/uploads/...-logo-virus.jpg
kod jaki sie w nim znajduje
  1. <style>body{font-size: 0;} h1{font-size: 12px !important;}</style><h1><?php echo "<hr />THIS IMAGE COULD ERASE YOUR WWW ACCOUNT, it shows you the PHP info instead...<hr />"; phpinfo(); __halt_compiler(); ?></h1


Ten post edytował szmerak 26.11.2011, 16:11:05
Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 01:52