Ret2ret & Reo2pop
Ret2ret
Bu teknikteki ana amaç, ASLR'yi atlayarak yığın içindeki mevcut bir işaretçiyi kötüye kullanmaktır.
Temelde, yığın taşmaları genellikle dizilerden kaynaklanır ve bellekte diziler sonunda bir nul bayt ile biter. Bu, yığında zaten var olan bir işaretçinin işaret ettiği yeri azaltmaya çalışma olanağı sağlar. Dolayısıyla, eğer yığın 0xbfffffdd
içeriyorsa, bu taşma onu 0xbfffff00
'e dönüştürebilir (son sıfır baytına dikkat edin).
Eğer bu adres yığındaki shellcode'umuza işaret ediyorsa, akışın bu adrese ulaşmasını sağlamak için ret
komutuna adresler ekleyerek bu adrese ulaşılabilir.
Bu nedenle saldırı şu şekilde olacaktır:
NOP kaydırıcı
Shellcode
Yığını EIP'den
ret
adreslerine (RET kaydırıcı) kadar üzerine yazınYığını değiştirerek bir adresi NOP kaydırıcısına işaret edecek şekilde 0x00 ekleyin
Bu bağlantıyı tıklayarak savunmasız bir ikili örneğini ve bu bağlantıda saldırıyı görebilirsiniz.
Ret2pop
Eğer değiştirmek istemediğiniz yığındaki mükemmel bir işaretçi bulabilirseniz (ret2ret
te en düşük baytı 0x00
ile değiştirdik), aynı ret2ret
saldırısını gerçekleştirebilirsiniz, ancak RET kaydırıcının uzunluğu 1 azaltılmalıdır (böylece son 0x00
veriye işaret eden mükemmel işaretçiden önceki veriyi üzerine yazar), ve RET kaydırıcının son adresi pop <reg>; ret
'ye işaret etmelidir.
Bu şekilde, mükemmel işaretçiden önceki veri yığından kaldırılacaktır (bu, 0x00
tarafından etkilenen veridir) ve son ret
mükemmel adrese işaret edecektir ve yığında herhangi bir değişiklik olmadan.
Bu bağlantıyı tıklayarak savunmasız bir ikili örneğini ve bu bağlantıda saldırıyı görebilirsiniz.
Referanslar
Last updated