Stack Shellcode
Temel Bilgiler
Stack shellcode, bir saldırganın savunmasız bir programın yığınında shellcode yazdığı ve ardından Instruction Pointer (IP) veya Extended Instruction Pointer (EIP)'yi bu shellcode'un konumuna işaret edecek şekilde değiştirdiği binary exploitation'da kullanılan bir tekniktir. Bu, yetkisiz erişim sağlamak veya hedef sistemde rastgele komutlar çalıştırmak için kullanılan klasik bir yöntemdir. İşte sürecin bir dökümü, basit bir C örneği ve buna karşılık gelen bir istismar yazmanın nasıl olabileceği ile birlikte pwntools kullanarak.
C Örneği: Savunmasız Bir Program
Savunmasız bir C programının basit bir örneği ile başlayalım:
Bu program, gets()
fonksiyonunun kullanımı nedeniyle bir buffer overflow'a karşı savunmasızdır.
Derleme
Bu programı çeşitli korumaları devre dışı bırakarak (savunmasız bir ortam simüle etmek için) derlemek için aşağıdaki komutu kullanabilirsiniz:
-fno-stack-protector
: Yığın korumasını devre dışı bırakır.-z execstack
: Yığını çalıştırılabilir hale getirir, bu da yığında saklanan shellcode'un çalıştırılması için gereklidir.-no-pie
: Konumdan bağımsız çalıştırılabilir dosyayı devre dışı bırakır, bu da shellcode'un nerede bulunacağını tahmin etmeyi kolaylaştırır.-m32
: Programı 32-bit çalıştırılabilir olarak derler, genellikle istismar geliştirmede basitlik için kullanılır.
Python Exploit using Pwntools
İşte pwntools kullanarak Python'da bir ret2shellcode saldırısı gerçekleştirmek için bir exploit yazmanın yolu:
Bu script, bir NOP kaydırma, shellcode ve ardından EIP'yi NOP kaydırmaya işaret eden adresle geçersiz kılmayı içeren bir yük oluşturur, böylece shellcode'un çalıştırılmasını sağlar.
NOP kaydırma (asm('nop')
), yürütmenin tam adrese bakılmaksızın shellcode'umuza "kaymasını" sağlama şansını artırmak için kullanılır. p32()
argümanını, tamponunuzun başlangıç adresine NOP kaydırmaya inmek için bir offset ekleyerek ayarlayın.
Koruma Önlemleri
ASLR devre dışı bırakılmalıdır ki adres, yürütmeler arasında güvenilir olsun veya fonksiyonun saklanacağı adres her zaman aynı olmayacak ve kazanma fonksiyonunun nerede yüklü olduğunu anlamak için bir leak'e ihtiyacınız olacak.
Stack Canaries da devre dışı bırakılmalıdır yoksa tehlikeye atılmış EIP dönüş adresi asla takip edilmeyecektir.
NX stack koruması, bu bölge yürütülebilir olmadığından shellcode'un stack içinde çalıştırılmasını engelleyecektir.
Diğer Örnekler & Referanslar
64bit, ASLR ile stack adres leak, shellcode yaz ve ona atla
32 bit, ASLR ile stack leak, shellcode yaz ve ona atla
32 bit, ASLR ile stack leak, exit() çağrısını önlemek için karşılaştırma, bir değişkeni bir değerle geçersiz kıl ve shellcode yaz ve ona atla
arm64, ASLR yok, stack'i yürütülebilir hale getirmek için ROP gadget ve stack'teki shellcode'a atla
Last updated