Pokaż wyniki 1 do 4 z 4

Temat: Ciekawy atak na aplikacje PHP

  1. #1
    Zarejestrowany
    May 2008
    Skąd
    Katowice
    Postów
    59

    Domyślnie Ciekawy atak na aplikacje PHP

    Analizowałem ostatnio kod pewnej popularnej aplikacji. Chciałbym się podzielić, w moim mniemaniu, ciekawą podatnością na atak. Szczerze mówiąc nie słyszałem o czymś podobnym, ale zapewne mało jeszcze wiem A teraz szczegóły.

    Tworząc klasę w języku PHP możemy zdefiniować destruktor, czyli metodę, która zostanie wywołana (automatycznie) podczas niszczenia obiektu danej klasy. Okazuje się, że wspomniana metoda, wywoływana jest również dla obiektów stworzonych w procesie deserializacji. Wyobraźmy sobie następujący kod:

    Kod:
    $x = unserialize($data_from_cookie);
    
    if (!is_numeric($x)) {
    	return;
    }
    Kod wygląda na poprawny. Walidacja odfiltrowuje wszelkie, potencjalnie niebezpieczne, typy danych tj. ciągi znaków, tablice, obiekty... no właśnie obiekty! Jak już wiemy, dla obiektów stworzonych w wyniku deserializacji, w chwili ich niszczenia, wywoływany jest destruktor. Teraz cała sztuka sprowadza się do odnalezienia w kodzie badanej aplikacji klasy, której destruktor wykonuje korzystne, z punktu widzenia napastnika, operacje. Przykładowa klasa mogłaby wglądać następująco:

    Kod:
    class Cleaner {
    	public function __destruct() {
    		foreach ($this->toDelete as $f) {
    			unlink($f);
    		}
    	}
    
    	public function add($f) {
    		$this->toDelete[] = $f;
    	}
    
    	private $toDelete = array();
    };
    Jedyne co musi zrobić napastnik, to stworzyć (lokalnie) obiekt klasy Cleaner, poddać go serializacji i wysłać w takiej postaci do aplikacji, np.:

    Kod:
    $x = new Cleaner();
    $x->add("index.html");
    
    $payload = serialize($x);
    W tym przypadku, w wyniku wywołania destruktora obiektu, usunięty zostanie plik index.html (oczywiście jeżeli proces ma odpowiednie uprawnienia).

    W badanej przeze mnie aplikacji istnieje klasa, której destruktor wywołuje funkcje PHP, których nazwy przechowywane są w tablicy (atrybut klasy). De facto błąd sprowadza się do code injection. Niestety użyta jest następująca składnia: $funName(), co ogranicza atak tylko do funkcji bezparametrowych np. phpinfo().

    Co o tym myślicie? Nowa metoda ataku?

  2. #2
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Przechowywanie czegokolwiek waznego po stronie klienta, zwlaszcza czegos takiego jak obiekt... samobojstwo! Jak ktos wrzuca serializowany obiekt do ciacha to nie powinien zabierac sie za programowanie - taka prawda.

    broken by design

    Serializacja obiektow jest bardzo bardzo przydatna - sam uzywam w Perlu bardzo czesto ale nie przechowuje tego na kliencie bo z definicji klienci sa zli i nie mozna im ufac. Serializowany obiekt powinien byc przechowywany na serwerze i zwiazany z sesja usera, wtedy user nie ma mozliwosci modyfikacji obiektu a wiec i jego zniszczenia lub wstrzykniecia swojego kodu.

    ... a teraz oba kciuki w gore tyter za bardzo ciekawy przyklad - jestem ciekaw ile osob tak robi jak opisales. Chyba wspomniales o jakiejs popularnej aplikacji, prawda? :-p

    Dobra robota!
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  3. #3
    Zarejestrowany
    May 2008
    Skąd
    Katowice
    Postów
    59

    Domyślnie

    Zauważ, że intencją autora nie było przechowywanie zserializowanego obiektu, tylko int-a, jakkolwiek bezsensu to brzmi. We wspomnianej aplikacji autor przechowuje zserializowana tablice. Co prawda cookie jest podpisane, ale i to można obejść.

  4. #4
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    hehe wlasnie to mnie zaskoczylo - po jaka cholere serializowac int'a? security by obscurity?
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

Podobne wątki

  1. aplikacje *.sis
    By zasada in forum Off Topic
    Odpowiedzi: 4
    Autor: 10-12-2009, 07:29
  2. Wlasne aplikacje dla Windows Mobile
    By tom in forum Systemy mobilne
    Odpowiedzi: 0
    Autor: 08-12-2009, 01:14
  3. Aplikacje z Nubuntu
    By Michal_sh in forum Linux
    Odpowiedzi: 7
    Autor: 12-25-2008, 22:50
  4. aplikacje typowo serwerowe
    By lukasz6547 in forum Off Topic
    Odpowiedzi: 5
    Autor: 08-30-2008, 15:23
  5. Jak zabezpieczyć aplikacje?
    By hedVB in forum Security
    Odpowiedzi: 12
    Autor: 01-23-2008, 20:25

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52