Hacking: Sömürü Sanatı kitabını okurken Jon Erickson, SHELLCODE
bir programı kullanmak için bir ortam değişkeninin adresini tahmin etmeye çalışıyorum .
Ben her çalıştırıldığında getenv("SHELLCODE");
yerini almak için, sonuç tamamen farklıdır.
Kabuğumdan çıkar:
> for i in $(seq 10); do ./a.out SHELLCODE; done
SHELLCODE is at 0xff9ab3a3
SHELLCODE is at 0xffcdb3a3
SHELLCODE is at 0xffb9a3a3
SHELLCODE is at 0xffa743a3
SHELLCODE is at 0xffdb43a3
SHELLCODE is at 0xfff683a3
SHELLCODE is at 0xffef03a3
SHELLCODE is at 0xffc1c3a3
SHELLCODE is at 0xff85a3a3
SHELLCODE is at 0xff8e03a3
Program adı değiştirilirse veya yeni ortam değişkenleri eklenirse, konumun biraz farklı olacağını, ancak konumun neden bu kadar değiştiğini anlıyorum.
getenv
Manuel o değişkenin değeri içeren bir dize bir gösterici ile döner diyor. Diğer her şey belirtilmedi, bu nedenle çekirdek ve / veya derleyiciniz, işaretçi vaadi doğru kaldığı sürece değeri istedikleri yere yapıştırabilir. Bunun kesin cevabının ağır sihirbazlık olabileceğini ve çeşitli bellek haritalama uygulama detaylarına ve ayın evresine bağlı olabileceğini tahmin ediyorum . (Sana kesin cevabı verecek kadar sihirbaz değilim.)