Ret2ret & Reo2pop
Ret2ret
Glavni cilj ove tehnike je pokušaj bypass-ovanja ASLR-a zloupotrebom postojećeg pokazivača na steku.
U osnovi, prekoračenja steka obično su uzrokovana stringovima, a stringovi se završavaju nulom na kraju u memoriji. To omogućava pokušaj smanjenja mesta na koje pokazuje već postojeći pokazivač na steku. Dakle, ako je stek sadržao 0xbfffffdd
, ovo prekoračenje bi moglo da ga transformiše u 0xbfffff00
(primetite poslednji nula bajt).
Ako ta adresa pokazuje naš shellcode na steku, moguće je usmeriti tok ka toj adresi dodavanjem adresa instrukciji ret
dok se ne dostigne ta adresa.
Stoga bi napad bio sledeći:
NOP klizaljka
Shellcode
Prepisivanje steka od EIP sa adresama instrukcije
ret
(RET klizaljka)0x00 dodat stringom menjajući adresu sa steka tako da pokazuje na NOP klizaljku
Pomoću ovog linka možete videti primer ranjivog binarnog fajla i u ovom eksploit.
Ret2pop
U slučaju da možete pronaći savršen pokazivač na steku koji ne želite da menjate (u ret2ret
smo promenili poslednji najniži bajt u 0x00
), možete izvesti isti napad kao ret2ret
, ali dužina RET klizaljke mora biti skraćena za 1 (tako da konačni 0x00
prepisuje podatke neposredno pre savršenog pokazivača), a poslednja adresa RET klizaljke mora pokazivati na pop <reg>; ret
.
Na ovaj način, podaci pre savršenog pokazivača će biti uklonjeni sa steka (ovo su podaci pogođeni sa 0x00
) i konačni ret
će pokazivati na savršenu adresu na steku bez ikakve promene.
Pomoću ovog linka možete videti primer ranjivog binarnog fajla i u ovom eksploit.
Reference
Last updated