House of Roman
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)
To była bardzo interesująca technika, która pozwalała na RCE bez leaków za pomocą fałszywych fastbins, ataku unsorted_bin i względnych nadpisywań. Jednak została załatana.
You can find an example in https://github.com/shellphish/how2heap/blob/master/glibc_2.23/house_of_roman.c
RCE poprzez nadużywanie względnych wskaźników
Edytuj wskaźniki fastbin i unsorted bin
12 bitów losowości musi być brutalnie wymuszonych (0,02% szans na powodzenie)
Utwórz kilka chunków:
fastbin_victim
(0x60, offset 0): chunk UAF, który później edytuje wskaźnik heap, aby wskazywał na wartość LibC.
chunk2
(0x80, offset 0x70): Dla dobrej wyrównania
main_arena_use
(0x80, offset 0x100)
relative_offset_heap
(0x60, offset 0x190): względny offset na chunku 'main_arena_use'
Następnie free(main_arena_use)
, co umieści ten chunk na liście unsorted i uzyska wskaźnik do main_arena + 0x68
w obu wskaźnikach fd
i bk
.
Teraz alokowany jest nowy chunk fake_libc_chunk(0x60)
, ponieważ będzie zawierał wskaźniki do main_arena + 0x68
w fd
i bk
.
Następnie relative_offset_heap
i fastbin_victim
są zwalniane.
fastbin_victim
ma fd
wskazujący na relative_offset_heap
relative_offset_heap
to offset odległości od fake_libc_chunk
, który zawiera wskaźnik do main_arena + 0x68
Zmieniając tylko ostatni bajt fastbin_victim.fd
, możliwe jest, aby fastbin_victim
wskazywał na main_arena + 0x68
Aby wykonać powyższe działania, atakujący musi mieć możliwość modyfikacji wskaźnika fd fastbin_victim
.
Następnie main_arena + 0x68
nie jest zbyt interesujące, więc zmodyfikujmy to, aby wskaźnik wskazywał na __malloc_hook
.
Zauważ, że __memalign_hook
zazwyczaj zaczyna się od 0x7f
i zer przed nim, więc możliwe jest sfałszowanie go jako wartości w szybkim binie 0x70
. Ponieważ ostatnie 4 bity adresu są losowe, istnieje 2^4=16
możliwości, aby wartość kończyła się tam, gdzie jesteśmy zainteresowani. Dlatego tutaj przeprowadzany jest atak BF, aby kawałek kończył się jak: 0x70: fastbin_victim -> fake_libc_chunk -> (__malloc_hook - 0x23)
.
(Aby uzyskać więcej informacji na temat pozostałych bajtów, sprawdź wyjaśnienie w how2heap przykładzie). Jeśli BF nie zadziała, program po prostu się zawiesza (więc zaczynaj od nowa, aż zadziała).
Następnie wykonuje się 2 malloci, aby usunąć 2 początkowe kawałki szybkiego binu, a trzeci jest alokowany, aby uzyskać kawałek w __malloc_hook:
Aby uzyskać więcej informacji, możesz sprawdzić:
Unsorted Bin AttackAle zasadniczo pozwala to na zapisanie main_arena + 0x68
w dowolnej lokalizacji określonej w chunk->bk
. A do ataku wybieramy __malloc_hook
. Następnie, po nadpisaniu go, użyjemy względnego nadpisania, aby wskazać na one_gadget
.
W tym celu zaczynamy od uzyskania chunk i umieszczamy go w unsorted bin:
Użyj UAF w tym kawałku, aby wskazać unsorted_bin_ptr->bk
na adres __malloc_hook
(wcześniej to brutalnie wymusiliśmy).
Zauważ, że ten atak psuje niesortowany bin (a więc mały i duży również). Dlatego możemy teraz używać tylko alokacji z szybkiego binu (bardziej złożony program może wykonać inne alokacje i się zawiesić), a aby to wywołać, musimy alokować tę samą wielkość, inaczej program się zawiesi.
Aby wywołać zapis main_arena + 0x68
w __malloc_hook
, po ustawieniu __malloc_hook
w unsorted_bin_ptr->bk
musimy po prostu wykonać: malloc(0x80)
W pierwszym kroku zakończyliśmy kontrolując kawałek zawierający __malloc_hook
(w zmiennej malloc_hook_chunk
), a w drugim kroku udało nam się zapisać main_arena + 0x68
tutaj.
Teraz nadużywamy częściowego nadpisania w malloc_hook_chunk
, aby użyć adresu libc, który tam zapisaliśmy (main_arena + 0x68
), aby wskazać adres one_gadget
.
Tutaj potrzebne jest brutalne wymuszenie 12 bitów losowości (więcej informacji w how2heap przykład).
Na koniec, gdy poprawny adres zostanie nadpisany, wywołaj malloc
i wyzwól one_gadget
.
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)