Welcome to Our Website

Understanding Java De-serialization

jak widać powyżej, kod daje błąd „Exception in thread „main” java.lang.ClassCastException: testserialization.ExploitDeser nie może być użyty do testowania.Employee”, co oznacza, że typ-casting nie jest właściwy, jednak kod nadal jest wykonywany. Funkcja readObject klasy DeserializeDemo jest w stanie wykonać niestandardową implementację readObject klasy ExploitDeser.,

To jest to, co jest niebezpieczne deserializacja tutaj, że nawet jeśli istnieje błąd odlewania typu nadal jeśli serializowane dane niestandardowej klasy z niestandardową implementacją readObject są dostarczane jako dane wejściowe, to jest wykonywane jak pokazano powyżej.

To właśnie robią łańcuchy gadżetów używane przez ysoserial i inne narzędzia do deserializacji Javy, gdzie szukają łańcuchów klas, aby ostatecznie wylądować w niestandardowej implementacji readObject, która może wykonać kod na poziomie systemu dostarczony jako część wejścia użytkownika.,

remediacja

teraz, gdy przyjrzeliśmy się, czym jest Deserializacja i jak jest wykorzystywana, spójrzmy na remediację do tego.

remediacja, którą tutaj omówimy, nazywa się „look-ahead class validation”, gdzie możemy dodać listę klas, które chcemy deserializować. Na przykład. w naszym scenariuszu spodziewamy się, że tylko Dane obiektów klasy pracowniczej będą deserializowane, a pozostałe nie powinny zezwalać na deserializację.,

tak więc, zasadniczo to, co robi ta metoda, to nadpisanie funkcji „resolveClass”, która jest częścią klasy”ObjectInputStream” (używanej podczas deserializacji) i wykonuje białą listę listy klas, które muszą być deserializowane.

teraz, gdy skończyliśmy z teorią, przejdźmy do implementacji.,

pozwala utworzyć nową klasę „LookAheadObjectInputStream” rozszerzyć ją do klasy ObjectInputSteam, tak abyśmy mogli nadpisać funkcję member resolveClass:

w powyższym kodzie linia:

if (!desc.getName().equals(Employee.class.getName())) {

zasadniczo szuka, jeśli serializowana zawartość zawiera obiekt klasy Employee, w przeciwnym razie wyświetla błąd „nieautoryzowana próba deserializacji” i uniemożliwia jej wykonanie.,

teraz, ostateczny zmodyfikowany kod dla „DeserializedDemo” jest jak pokazano poniżej:

modified deserializedemo class

w powyższym kodzie obserwuj podświetlony kod, w którym zamiast wywoływać klasę objectinputstream, wywoływana jest klasa lookaheadobjectinputstream, która nadpisuje metodę resolveclass podczas wykonywania i odpowiednio ją wykonuje.

teraz przejdźmy do złośliwości.,ser plik utworzony wcześniej jako wejście do deserializacji i obserwować wyjście:

błąd podczas wykonywania serializowanych danych klasy custom

jak widać powyżej, tym razem niestandardowa implementacja readobject z klasy custom „exploitdeser” nie jest wykonywana podczas deserializacji., Zamiast tego otrzymujemy niestandardowy komunikat o błędzie „nieautoryzowana próba deserializacji”, który został ustawiony w nadpisanej funkcji resolveClass w klasie LookAheadObjectInputStream.

jest to bardzo prosty przykład użycia metody sprawdzania poprawności klasy look-ahead, aby zapobiec Niezabezpieczonej deserializacji. Obszerną implementacją wokół tej idei jest biblioteka „serialKiller”. Link można znaleźć poniżej:

dlatego można to uznać za jedno z rozwiązań łagodzących niepewną deserializację w Javie.,

nadal szukam innych metod łagodzenia, o których będę pisał później.

proszę o cenne uwagi. Do tego czasu hakowanie i uczenie się….

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *