Ret2ret & Reo2pop
Last updated
Last updated
Ucz się i praktykuj Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i praktykuj Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Głównym celem tej techniki jest próba obejścia ASLR poprzez nadużycie istniejącego wskaźnika na stosie.
W skrócie, przepełnienia stosu zazwyczaj są spowodowane ciągami znaków, a ciągi kończą się bajtem null na końcu w pamięci. Pozwala to spróbować zmniejszyć miejsce wskazywane przez istniejący już wskaźnik na stosie. Jeśli stos zawierał 0xbfffffdd
, to przepełnienie mogłoby przekształcić go w 0xbfffff00
(zauważ ostatni zerowy bajt).
Jeśli ten adres wskazuje na nasz kod powłoki na stosie, możliwe jest skierowanie przepływu do tego adresu poprzez dodawanie adresów do instrukcji ret
aż do momentu ich osiągnięcia.
Atak wyglądałby więc następująco:
NOP sled
Kod powłoki
Nadpisanie stosu z EIP za pomocą adresów do ret
(RET sled)
0x00 dodane przez ciąg znaków modyfikujące adres ze stosu, powodując, że wskazuje on na NOP sled
Klikając ten link możesz zobaczyć przykład podatnego pliku binarnego, a w tym exploit.
W przypadku znalezienia idealnego wskaźnika na stosie, którego nie chcesz modyfikować (w ret2ret
zmienialiśmy ostatni najniższy bajt na 0x00
), można przeprowadzić ten sam atak ret2ret
, ale długość RET sled musi być skrócona o 1 (aby finalne 0x00
nadpisało dane tuż przed idealnym wskaźnikiem), a ostatni adres RET sled musi wskazywać na pop <reg>; ret
.
W ten sposób dane przed idealnym wskaźnikiem zostaną usunięte ze stosu (są to dane dotknięte przez 0x00
) i ostatni ret
wskaże na idealny adres na stosie bez żadnych zmian.
Klikając ten link możesz zobaczyć przykład podatnego pliku binarnego, a w tym exploit.
Ucz się i praktykuj Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i praktykuj Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)