Stack Shellcode
Temel Bilgiler
Yığın kabuk kodu, bir saldırganın zayıf bir programın yığınına kabuk kodu yazdığı ve ardından Komut İşaretçisi (IP) veya Genişletilmiş Komut İşaretçisi (EIP)'yi bu kabuk kodunun konumuna yönlendirdiği binary exploitation tekniğidir. Bu, yetkisiz erişim elde etmek veya hedef sistemde keyfi komutlar çalıştırmak için kullanılan klasik bir yöntemdir. İşte bu sürecin ayrıntıları, basit bir C örneği ve pwntools ile Python kullanarak buna karşılık gelen bir saldırıyı nasıl yazabileceğiniz.
C Örneği: Zayıf Bir Program
Basit bir zayıf C programı örneğiyle başlayalım:
Bu program, gets()
fonksiyonunun kullanımından kaynaklanan bir tampon taşması saldırısına açıktır.
Derleme
Bu programı derlemek için çeşitli korumaları devre dışı bırakarak (zafiyetli bir ortamı simüle etmek için) aşağıdaki komutu kullanabilirsiniz:
-fno-stack-protector
: Yığın korumasını devre dışı bırakır.-z execstack
: Yığını yürütülebilir yapar, yığında depolanan shellcode'un yürütülmesi için gereklidir.-no-pie
: Konum Bağımsız Yürütülebilir'i devre dışı bırakır, shellcode'un yerleşeceği bellek adresini tahmin etmeyi kolaylaştırır.-m32
: Programı 32 bitlik yürütülebilir olarak derler, genellikle exploit geliştirme sürecinde basitlik için kullanılır.
Pwntools Kullanarak Python Exploit'i
İşte pwntools kullanarak bir ret2shellcode saldırısı gerçekleştirmek için Python'da nasıl bir exploit yazabileceğinizi:
Bu betik, bir NOP kaydırması, shellcode ve ardından EIP'yi NOP kaydırmasına işaret eden bir adrese üzerine yazarak shellcode'un yürütülmesini sağlayan bir yük oluşturur.
NOP kaydırması (asm('nop')
), yürütmenin tam adresinden bağımsız olarak shellcode'a "kaydırılmasını" sağlamak için kullanılır. p32()
argümanını, tam adresinizin başlangıç adresine ve NOP kaydırmasına inmek için bir ofset ekleyerek ayarlayın.
Korumalar
ASLR adresin her yürütmede güvenilir olması için devre dışı bırakılmalıdır veya işlevin depolanacağı adres her zaman aynı olmayacak ve kazan işlevinin nerede yüklendiğini bulmak için bir sızıntıya ihtiyacınız olacaktır.
Stack Canaries da devre dışı bırakılmalıdır veya tehlikeye atılan EIP dönüş adresi asla takip edilmeyecektir.
NX stack koruması, stack içindeki shellcode'un yürütülmesini engelleyecektir çünkü bu bölge yürütülebilir olmayacaktır.
Diğer Örnekler ve Referanslar
64 bit, ASLR ile stack adres sızıntısı, shellcode yazma ve ona atlamak
32 bit, ASLR ile stack sızıntısı, shellcode yazma ve ona atlamak
32 bit, ASLR ile stack sızıntısı, çıkış çağrısını önlemek için karşılaştırma, değişkeni bir değerle üzerine yazma ve shellcode yazma ve ona atlamak
arm64, ASLR yok, stack'i yürütülebilir yapmak için ROP cihazı ve stack'teki shellcode'a atlamak
Last updated