Ret2plt
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)
Celem tej techniki byłoby wycieknięcie adresu z funkcji z PLT, aby móc obejść ASLR. Dzieje się tak, ponieważ jeśli na przykład wycieknie adres funkcji puts
z libc, można wtedy obliczyć, gdzie znajduje się baza libc
i obliczyć przesunięcia, aby uzyskać dostęp do innych funkcji, takich jak system
.
Można to zrobić za pomocą ładunku pwntools
, takiego jak (stąd):
Zauważ, jak puts
(używając adresu z PLT) jest wywoływane z adresem puts
znajdującym się w GOT (Global Offset Table). Dzieje się tak, ponieważ w momencie, gdy puts
drukuje wpis GOT dla puts, ten wpis będzie zawierał dokładny adres puts
w pamięci.
Zauważ również, jak adres main
jest używany w exploicie, aby gdy puts
zakończy swoje wykonanie, binarne wywołuje main
ponownie zamiast kończyć (więc wyciekający adres będzie nadal ważny).
Zauważ, że aby to zadziałało, binarne nie może być skompilowane z PIE lub musisz znaleźć wyciek, aby obejść PIE, aby znać adres PLT, GOT i main. W przeciwnym razie musisz najpierw obejść PIE.
Możesz znaleźć pełny przykład tego obejścia tutaj. To był ostateczny exploit z tego przykładu:
64 bity, ASLR włączone, ale bez PIE, pierwszym krokiem jest wypełnienie przepełnienia do bajtu 0x00 kanarka, aby następnie wywołać puts i wyciek. Z kanarkiem tworzony jest gadżet ROP do wywołania puts, aby wyciekł adres puts z GOT, a następnie gadżet ROP do wywołania system('/bin/sh')
64 bity, ASLR włączone, brak kanarka, przepełnienie stosu w main z funkcji podrzędnej. Gadżet ROP do wywołania puts, aby wyciekł adres puts z GOT, a następnie wywołanie jednego gadżetu.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)