Fast Bin Attack
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aby uzyskać więcej informacji na temat tego, czym jest fast bin, sprawdź tę stronę:
Bins & Memory AllocationsPonieważ fast bin jest listą jednokierunkową, istnieje znacznie mniej zabezpieczeń niż w innych binach, a zmodyfikowanie adresu w zwolnionym kawałku fast bin wystarczy, aby móc później przydzielić kawałek w dowolnym adresie pamięci.
Podsumowując:
Możesz znaleźć pełny przykład w bardzo dobrze wyjaśnionym kodzie z https://guyinatuxedo.github.io/28-fastbin_attack/explanation_fastbinAttack/index.html:
Jeśli możliwe jest nadpisanie wartości globalnej zmiennej global_max_fast
dużą liczbą, pozwala to na generowanie kawałków fast bin o większych rozmiarach, co potencjalnie umożliwia przeprowadzenie ataków fast bin w scenariuszach, w których wcześniej nie było to możliwe. Ta sytuacja jest przydatna w kontekście large bin attack i unsorted bin attack.
Możliwe jest alokowanie kawałków, zwalnianie ich, odczytywanie ich zawartości i wypełnianie ich (z wykorzystaniem podatności na przepełnienie).
Konsolidacja kawałka dla infoleak: Technika polega zasadniczo na nadużywaniu przepełnienia, aby stworzyć fałszywy prev_size
, tak aby jeden z poprzednich kawałków znalazł się w większym, więc podczas alokowania większego kawałka zawierającego inny kawałek, możliwe jest wydrukowanie jego danych i wyciek adresu do libc (main_arena+88
).
Nadpisanie malloc hook: W tym przypadku, nadużywając poprzedniej sytuacji z nakładaniem się, możliwe było posiadanie 2 kawałków, które wskazywały na tę samą pamięć. Dlatego zwolnienie obu (zwalniając inny kawałek pomiędzy, aby uniknąć ochrony) pozwoliło na posiadanie tego samego kawałka w fast bin 2 razy. Następnie możliwe było ponowne alokowanie go, nadpisanie adresu do następnego kawałka, aby wskazywał trochę przed __malloc_hook
(tak aby wskazywał na liczbę całkowitą, którą malloc uważa za wolny rozmiar - kolejny bypass), ponowne alokowanie go, a następnie alokowanie innego kawałka, który otrzyma adres do malloc hooks.
Na koniec one gadget został tam zapisany.
Istnieje przepełnienie sterty i użycie po zwolnieniu oraz podwójne zwolnienie, ponieważ gdy kawałek jest zwalniany, możliwe jest ponowne użycie i ponowne zwolnienie wskaźników.
Libc info leak: Wystarczy zwolnić kilka kawałków, a otrzymają one wskaźnik do części lokalizacji głównej areny. Ponieważ można ponownie używać zwolnionych wskaźników, wystarczy odczytać ten adres.
Fast bin attack: Wszystkie wskaźniki do alokacji są przechowywane w tablicy, więc możemy zwolnić kilka kawałków fast bin, a w ostatnim nadpisać adres, aby wskazywał trochę przed tą tablicą wskaźników. Następnie alokujemy kilka kawałków o tym samym rozmiarze i najpierw otrzymamy ten legalny, a potem fałszywy zawierający tablicę wskaźników. Możemy teraz nadpisać te wskaźniki alokacji, aby adres GOT free
wskazywał na system
, a następnie zapisać "/bin/sh"
w kawałku 1, aby następnie wywołać free(chunk1)
, co zamiast tego wykona system("/bin/sh")
.
Inny przykład nadużywania przepełnienia jednego bajtu do konsolidacji kawałków w nieposortowanej binie i uzyskania wycieku informacji libc, a następnie przeprowadzenia ataku fast bin w celu nadpisania malloc hook adresem one gadget.
Po wycieku informacji nadużywając nieposortowanej biny z UAF, aby wyciekać adres libc i adres PIE, exploit tego CTF użył ataku fast bin do alokowania kawałka w miejscu, gdzie znajdowały się wskaźniki do kontrolowanych kawałków, więc możliwe było nadpisanie niektórych wskaźników, aby zapisać one gadget w GOT.
Możesz znaleźć atak Fast Bin nadużyty przez atak nieposortowanej biny:
Zauważ, że przed przeprowadzeniem ataków fast bin powszechnie nadużywa się list zwolnień, aby wyciekać adresy libc/heap (gdy jest to potrzebne).
Możemy alokować tylko kawałki o rozmiarze większym niż 0x100
.
Nadpisz global_max_fast
używając ataku Unsorted Bin (działa 1/16 razy z powodu ASLR, ponieważ musimy zmodyfikować 12 bitów, ale musimy zmodyfikować 16 bitów).
Atak Fast Bin w celu modyfikacji globalnej tablicy kawałków. Daje to arbitralną prymitywę odczytu/zapisu, co pozwala na modyfikację GOT i ustawienie niektórych funkcji, aby wskazywały na system
.
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)