Stack Shellcode
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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 analizi, basit bir C örneği ve buna karşılık gelen bir istismar yazmanın nasıl olabileceği, pwntools kullanarak.
Savunmasız bir C programının basit bir örneğiyle başlayalım:
Bu program, gets()
fonksiyonunun kullanımı nedeniyle bir buffer overflow'a karşı savunmasızdır.
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.
İşte pwntools kullanarak ret2shellcode saldırısı gerçekleştirmek için Python'da bir exploit yazmanın yolu:
Bu script, bir NOP kaydırma, shellcode ve ardından EIP'yi NOP kaydırmaya işaret eden adresle yazan 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ı" artırmak için kullanılır. p32()
argümanını, tamponunuzun başlangıç adresine artı bir offset ekleyerek NOP kaydırmasına ulaşacak şekilde ayarlayın.
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 ele geçirilmiş EIP dönüş adresi asla takip edilmeyecektir.
NX yığın koruması, yığın içindeki shellcode'un çalıştırılmasını engeller çünkü o bölge çalıştırılabilir olmayacaktır.
64bit, ASLR ile yığın adres leak, shellcode yaz ve ona atla
32 bit, ASLR ile yığın leak, shellcode yaz ve ona atla
32 bit, ASLR ile yığın leak, exit() çağrısını önlemek için karşılaştırma, bir değişkeni bir değerle yaz ve shellcode yaz ve ona atla
arm64, ASLR yok, yığın çalıştırılabilir hale getirmek için ROP gadget ve yığında shellcode'a atla
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)