Array Indexing
Last updated
Last updated
Dowiedz się i ćwicz hakowanie AWS:HackTricks Training AWS Red Team Expert (ARTE) Dowiedz się i ćwicz hakowanie GCP: HackTricks Training GCP Red Team Expert (GRTE)
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 do system
, 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 przez pop rdi; ret
, a na stosie dodany jest adres do main
(powrót do main
). Następnie używany jest łańcuch ROP do wycieku adresu put w GOT za pomocą puts (exit
zostanie wywołane, więc wywoła pop 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).