Ret2plt
Podstawowe informacje
Celem tej techniki jest wyciek adresu funkcji z PLT, aby móc ominąć ASLR. Dzieje się tak dlatego, że jeśli na przykład wyciekniesz adres funkcji puts
z biblioteki libc, możesz obliczyć bazę libc
i obliczyć przesunięcia, aby uzyskać dostęp do innych funkcji, takich jak system
.
Można to zrobić za pomocą ładunku pwntools
, na przykład (stąd):
Zauważ, jak puts
(korzystając z adresu z PLT) jest wywoływany z adresem puts
znajdującym się w GOT (Global Offset Table). Dzieje się tak dlatego, że w momencie, gdy puts
drukuje wpis GOT puts, ten wpis będzie zawierał dokładny adres puts
w pamięci.
Zauważ również, jak adres main
jest używany w eksploacie, więc gdy puts
zakończy swoje wykonanie, binarny ponownie wywołuje main
zamiast zakończyć działanie (dzięki czemu wyciekły adres będzie nadal ważny).
Zauważ, że aby to działało, binarny nie może być skompilowany z PIE lub musisz znaleźć wyciek, aby ominąć PIE i poznać adresy PLT, GOT i main. W przeciwnym razie najpierw musisz ominąć PIE.
Możesz znaleźć pełny przykład tego bypassu tutaj. To był ostateczny exploit z tego przykładu:
Inne przykłady i odnośniki
64 bity, włączone ASLR, ale brak PIE, pierwszym krokiem jest przepełnienie aż do bajtu 0x00 canary, a następnie wywołanie puts w celu wycieku. Z canary tworzony jest ROP gadżet do wywołania puts w celu wycieku adresu puts z GOT, a następnie ROP gadżet do wywołania
system('/bin/sh')
.64 bity, włączone ASLR, brak canary, przepełnienie stosu w funkcji głównej z funkcji potomnej. ROP gadżet do wywołania puts w celu wycieku adresu puts z GOT, a następnie wywołanie one gadget.
Last updated