Ret2ret & Reo2pop

Reading time: 3 minutes

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks

Ret2ret

Głównym celem tej techniki jest próba obejścia ASLR poprzez wykorzystanie 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 na próbę zmniejszenia miejsca wskazywanego 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 ten zostanie osiągnięty.

Dlatego atak wyglądałby tak:

  • NOP sled
  • Shellcode
  • Nadpisanie stosu z EIP za pomocą adresów do ret (RET sled)
  • 0x00 dodane przez ciąg modyfikujący adres ze stosu, aby wskazywał na NOP sled

Podążając za tym linkiem możesz zobaczyć przykład podatnego binarnego i w tym exploit.

Ret2pop

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 żadnej zmiany.

Podążając za tym linkiem możesz zobaczyć przykład podatnego binarnego i w tym exploit.

References

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks