Ret2ret & Reo2pop
Ret2ret
Bu teknikteki ana amaç, mevcut bir işaretçiyi kötüye kullanarak ASLR'yi atlamaya çalışmaktır.
Temelde, yığın taşmaları genellikle dizilerden kaynaklanır ve diziler bellekte sonunda bir nul bayt ile biter. Bu, yığında zaten mevcut olan bir işaretçinin gösterdiğ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 o adres yığında shellcode'umuza işaret ediyorsa, akışın o 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ısı
Shellcode
Yığını EIP'den
ret
adreslerine kadar üzerine yazın (RET kaydırıcısı)Yığını değiştirerek bir adresi 0x00 ile ekleyerek (yığınındaki bir adresi NOP kaydırıcısına işaret edecek şekilde değiştirerek)
Bu bağlantıyı takip ederek savunmasız bir ikili örneğini ve bu bağlantıdaki saldırıyı görebilirsiniz.
Ret2pop
Eğer değiştirmek istemediğiniz yığında 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ısının uzunluğu 1 azaltılmalıdır (böylece son 0x00
mükemmel işaretçiden önceki veriyi üzerine yazar), ve RET kaydırıcısı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ı takip ederek savunmasız bir ikili örneğini ve bu bağlantıdaki saldırıyı görebilirsiniz.
Referanslar
Last updated