Ret2ret & Reo2pop
Last updated
Last updated
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)
Głównym celem tej techniki jest próba obejścia ASLR poprzez nadużycie istniejącego wskaźnika na stosie.
W zasadzie, przepełnienia stosu są zazwyczaj spowodowane przez ciągi, a ciągi kończą się bajtem zerowym na końcu w pamięci. To pozwala spróbować zmniejszyć miejsce wskazywane przez istniejący wskaźnik już obecny na stosie. Jeśli stos zawierał 0xbfffffdd
, to to przepełnienie mogłoby przekształcić go w 0xbfffff00
(zauważ ostatni zera bajt).
Jeśli ten adres wskazuje na nasz shellcode na stosie, możliwe jest skierowanie przepływu do tego adresu poprzez dodawanie adresów do instrukcji ret
aż do momentu, gdy ta zostanie osiągnięta.
Dlatego atak wyglądałby tak:
NOP sled
Shellcode
Nadpisanie stosu z EIP z adresami do ret
(RET sled)
0x00 dodane przez ciąg modyfikujący adres ze stosu, sprawiając, że wskazuje na NOP sled
Podążając za tym linkiem możesz zobaczyć przykład podatnego binarnego i w tym exploit.
W przypadku, gdy możesz znaleźć idealny wskaźnik na stosie, którego nie chcesz modyfikować (w ret2ret
zmieniamy ostatni najniższy bajt na 0x00
), możesz przeprowadzić ten sam atak ret2ret
, ale długość RET sled musi być skrócona o 1 (tak, aby końcowe 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 (to są dane dotknięte przez 0x00
), a końcowy ret
będzie wskazywał na idealny adres na stosie bez żadnych zmian.
Podążając za tym linkiem możesz zobaczyć przykład podatnego binarnego i w tym exploit.
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)