Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. /*
  2.  * Defcon Quals 2013 - incest
  3.  *
  4.  * ELF binary - sis , reverse to C
  5.  * by timhsu@chroot.org, June 2013
  6.  *
  7.  */
  8.  
  9. #include <sys/types.h>
  10. #include <sys/stat.h>
  11. #include <unistd.h>
  12. #include <signal.h>
  13. #include <sys/mman.h>
  14. #include <sched.h>
  15.  
  16. void quit(int n)
  17. {
  18.     exit(0);
  19. }
  20. int main(int argc, char *argv[])
  21. {
  22.     struct stat buf;
  23.     void (*func)();
  24.     char *key_buffer;
  25.     char *sock_buffer;
  26.     int key_fd;
  27.     int sock_fd;
  28.    
  29.     signal(SIGCHLD, SIG_IGN);
  30.     signal(SIGALRM, quit);
  31.     alarm(15);
  32.     key_fd  = atoi(argv[1]);
  33.     sock_fd = atoi(argv[2]);
  34.     if (!fork()) {
  35.         close(key_fd);
  36.         sock_buffer = mmap(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
  37.         recv(sock_fd, sock_buffer, 512, 0);
  38.         func = sock_buffer;
  39.         func();
  40.  
  41.     }
  42.     close(sock_fd);
  43.     fstat(key_fd, &buf);
  44.     key_buffer = calloc(1, buf.st_size);
  45.     read(key_fd, key_buffer, buf.st_size);
  46. yield: 
  47.     sched_yield();
  48.     goto yield;
  49.  
  50. }