Array Indexing
Podstawowe informacje
Ta kategoria obejmuje wszystkie podatności, które występują, ponieważ możliwe jest nadpisanie pewnych danych poprzez błędy w obsłudze indeksów w tablicach. Jest to bardzo szeroka kategoria bez konkretnej metodyki, ponieważ mechanizm eksploatacji zależy całkowicie od warunków podatności.
Jednakże można tu znaleźć kilka przykładów:
Istnieją 2 kolizyjne tablice, jedna dla adresów, w których przechowywane są dane, a druga z rozmiarami tych danych. Możliwe jest nadpisanie jednego drugim, umożliwiając zapisanie dowolnego adresu wskazującego na rozmiar. Pozwala to zapisać adres funkcji
free
w tabeli GOT, a następnie nadpisać go adresem dosystem
, i wywołać free z pamięci zawierającej/bin/sh
.64 bity, brak nx. Nadpisz rozmiar, aby uzyskać rodzaj przepełnienia bufora, gdzie wszystko będzie używane jako liczba podwójna i posortowane od najmniejszej do największej, więc konieczne jest stworzenie shellcode, który spełnia to wymaganie, biorąc pod uwagę, że canary nie powinien być przesunięty z swojej pozycji, a następnie nadpisując RIP adresem do ret, który spełnia poprzednie wymagania i umieszczając największy adres nowy adres wskazujący na początek stosu (wyciekający przez program), dzięki czemu możliwe jest użycie ret do skoku tam.
64 bity, brak relro, canary, nx, brak pie. Istnieje off-by-one w tablicy na stosie, który pozwala kontrolować wskaźnik przyznający WWW (zapisuje sumę wszystkich liczb z tablicy w nadpisanym adresie przez off-by-one w tablicy). Stos jest kontrolowany, więc adres
exit
w GOT jest nadpisywany przezpop rdi; ret
, a na stosie dodany jest adres domain
(powrót domain
). Następnie używany jest łańcuch ROP do wycieku adresu put w GOT za pomocą puts (exit
zostanie wywołane, więc wywołapop rdi; ret
, wykonując ten łańcuch na stosie). Na koniec używany jest nowy łańcuch ROP wykonujący ret2lib.32 bity, brak relro, brak canary, nx, pie. Wykorzystaj zły indeks, aby wyciec adresy libc i sterty ze stosu. Wykorzystaj przepełnienie bufora do wykonania ret2lib wywołującego
system('/bin/sh')
(adres sterty jest potrzebny do ominięcia sprawdzenia).
Last updated