Array Indexing
Last updated
Last updated
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ta kategoria obejmuje wszystkie luki, które występują, ponieważ możliwe jest nadpisanie pewnych danych przez błędy w obsłudze indeksów w tablicach. To bardzo szeroka kategoria bez konkretnej metodologii, ponieważ mechanizm eksploatacji całkowicie zależy od warunków luki.
Jednak tutaj możesz znaleźć kilka ładnych przykładów:
Istnieją 2 kolidujące tablice, jedna dla adresów, gdzie przechowywane są dane, a druga z rozmiarami tych danych. Możliwe jest nadpisanie jednego z drugim, co umożliwia zapisanie dowolnego adresu, wskazując go jako rozmiar. To pozwala na zapisanie adresu funkcji free
w tabeli GOT, a następnie nadpisanie go adresem do system
, i wywołanie free z pamięci z /bin/sh
.
64 bity, brak nx. Nadpisz rozmiar, aby uzyskać rodzaj przepełnienia bufora, gdzie wszystko będzie używane jako podwójna liczba i sortowane od najmniejszej do największej, więc konieczne jest stworzenie shellcode, który spełnia ten wymóg, biorąc pod uwagę, że kanarek nie powinien być przesuwany z jego pozycji, a na koniec nadpisując RIP adresem do ret, który spełnia wcześniejsze wymagania i umieszczając największy adres jako nowy adres wskazujący na początek stosu (ujawniony przez program), aby można było użyć ret do skoku tam.
64 bity, brak relro, kanarek, nx, brak pie. Istnieje błąd off-by-one w tablicy na stosie, który pozwala na kontrolowanie wskaźnika, przyznając WWW (zapisuje sumę wszystkich liczb w tablicy w nadpisanym adresie przez błąd off-by-one w tablicy). Stos jest kontrolowany, więc adres GOT exit
jest nadpisywany z pop rdi; ret
, a na stosie dodawany jest adres do main
(powracając do main
). Następnie używana jest łańcuch ROP do ujawnienia adresu put w GOT za pomocą puts (exit
zostanie wywołany, więc wywoła pop rdi; ret
, wykonując ten łańcuch na stosie). Na koniec używana jest nowa łańcuch ROP wykonująca ret2lib.
32 bity, brak relro, brak kanarka, nx, pie. Wykorzystaj złe indeksowanie, aby ujawnić adresy libc i heap z stosu. Wykorzystaj przepełnienie bufora, aby wykonać ret2lib, wywołując system('/bin/sh')
(adres heap jest potrzebny, aby obejść sprawdzenie).