Napisany wrz-10-2008
null byte poisoning
Być może mało osób spotkało się z tym rodzajem ataku. Ale istnieje i postaram się Wam przedstawić na czym polega i jak się przed nim bronić. Na wstępie dodam, że włączone magic_quotes w 100% zabezpieczają nas przed null byte poisoning. Magic_quotes sprawia bowiem, że przed każdym null byte’m umieszczany jest backslash.
Wyjaśnijmy sobie pare rzeczy:
null byte - to znak o kodzie ASCII 0. Nazywany też bajtem zerowym.
Zapewne zastanawiacie się w jaki sposób przekazać null byte’a do skryptu? W URL’ach możliwe jest stosowanie heksadecymalnych kodów dla znaków ASCII w postaci %xx (xx to szesnastkowy zapis). Jak więc łatwo się domyśleć, null byte będzie wyglądał tak - %00.
Przejdźmy do praktyki. Na początku tworzymy prosty skrypt, który includuje nam plik na podstawie zmiennej zmienna otrzymanej metodą GET.
include ($_GET['zmienna'].'ajajajaja');
Tworzymy sobie dodatkowo pliczek a.txt a w nim jakąś dowolnie wybraną treść. Umieszczamy go w tym samym katalogu co nas skrypt demonstracyjny. Na pierwszy rzut oka wydaje się, że nie uda nam się załączyć a.txt wykorzystując do tego wyłączanie parametr zmienna. Proponuje jednak wywołanie naszego skryptu w ten sposób:
Pojawiła się zawartość pliku tekstowego? Pytanie dlaczego?
Wyjaśniam. Funkcja PHP - w tym wypadku include() “czyta” parametr jej przekazany do momentu napotkania terminatora, czyli null byte’a. Stąd też ‘ajajajaja’ jest ignorowane.
