House of Lore | Small bin Attack
Podstawowe informacje
Kod
Sprawdź ten na stronie https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_lore/
To nie działa
To również nie działa, nawet jeśli próbuje ominąć pewne kontrole i otrzymuje błąd:
malloc(): unaligned tcache chunk detected
Ten przykład wciąż działa: https://guyinatuxedo.github.io/40-house_of_lore/house_lore_exp/index.html
Cel
Wstaw fałszywy mały kawałek do małego pojemnika, aby można go było zaalokować. Zauważ, że dodany mały kawałek to fałszywy kawałek stworzony przez atakującego, a nie fałszywy kawałek w dowolnej pozycji.
Wymagania
Stwórz 2 fałszywe kawałki i połącz je ze sobą oraz z prawdziwym kawałkiem w małym pojemniku:
fake0.bk
->fake1
fake1.fd
->fake0
fake0.fd
->legit
(musisz zmodyfikować wskaźnik w uwolnionym kawałku małego pojemnika za pomocą innej luki)legit.bk
->fake0
Wtedy będziesz mógł zaalokować fake0
.
Atak
Zaalokowany jest mały kawałek (
legit
), następnie zaalokowany jest kolejny, aby zapobiec konsolidacji z kawałkiem górnym. Następnielegit
jest zwalniany (przenosząc go na listę nieuporządkowaną) i zaalokowany jest większy kawałek, przenosząclegit
do małego pojemnika.Atakujący generuje kilka fałszywych małych kawałków i tworzy potrzebne połączenia, aby ominąć kontrole spójności:
fake0.bk
->fake1
fake1.fd
->fake0
fake0.fd
->legit
(musisz zmodyfikować wskaźnik w uwolnionym kawałku małego pojemnika za pomocą innej luki)legit.bk
->fake0
Zaalokowany jest mały kawałek, aby uzyskać
legit
, przenoszącfake0
na listę górną małych pojemnikówNastępnie zaalokowany jest kolejny mały kawałek, uzyskując
fake0
jako kawałek, co potencjalnie pozwala na odczyt/zapis wskaźników wewnątrz niego.
Odnośniki
Last updated