hacktricks/binary-exploitation/heap/off-by-one-overflow.md

4.7 KiB

Przepełnienie o jeden

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Podstawowe informacje

Mając dostęp tylko do przepełnienia o jeden bajt, atakujący może zmodyfikować poprzednie informacje o metadanych rozmiaru, co pozwala manipulować, które bloki są faktycznie zwalniane, generując w końcu blok zawierający inny legalny blok.

Przykład kodu:

Cel

  • Umieścić blok wewnątrz innego bloku, dzięki czemu dostęp do zapisu w tym drugim bloku pozwala nadpisać zawartość zawartego bloku

Wymagania

  • Przepełnienie o jeden bajt, aby zmodyfikować poprzednie informacje o metadanych rozmiaru

Atak

  • Rezerwowane są 3 bloki pamięci (a, b, c) jeden po drugim. Następnie środkowy jest zwalniany. Pierwszy zawiera podatność na przepełnienie o jeden bajt i atakujący wykorzystuje to z użyciem 0x00 (jeśli poprzedni bajt był 0x10, sprawiłoby to, że środkowy blok wskazywałby, że jest o 0x10 mniejszy, niż naprawdę jest).
  • Następnie, w środkowym zwolnionym bloku (b) alokowane są 2 mniejsze bloki, jednakże, ponieważ b + b->size nigdy nie aktualizuje bloku c, ponieważ wskazany adres jest mniejszy, niż powinien.
  • Następnie, b1 i c są zwalniane. Ponieważ c - c->prev_size nadal wskazuje na b (teraz b1), oba są scalane w jeden blok. Jednakże, b2 nadal znajduje się wewnątrz pomiędzy b1 i c.
  • Wreszcie, wykonywane jest nowe malloc, odzyskując ten obszar pamięci, który faktycznie będzie zawierał b2, pozwalając właścicielowi nowego malloc kontrolować zawartość b2.

To zdjęcie doskonale wyjaśnia atak:

https://heap-exploitation.dhavalkapil.com/attacks/shrinking_free_chunks

Referencje

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: