DarcJC
本帖最后由 z25096708 于 2015-1-30 13:05 编辑

关于这个漏洞的具体消息可以在RedHat看到
大致受影响的系统:全部使用glibc库2.2-2.17版本的Linux发行版本都受到影响

[bedrock]←收藏

先讲检测事宜(怎么利用可以跟我买= =去死把,我不会卖的
检测代码由@X60发布,与我无关

使用GCC编译器编译以下代码(嗯...Windows就别去编译了= =,动动自己脑洞,这是啥语言的C
  
#include <netdb.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#define CANARY "in_the_coal_mine"struct {  char buffer[1024];  char canary[sizeof(CANARY)];} temp = { "buffer", CANARY };int main(void) {  struct hostent resbuf;  struct hostent *result;  int herrno;  int retval;  /*** strlen (name) = size_needed - sizeof (*host_addr) - sizeof (*h_addr_ptrs) - 1; ***/  size_t len = sizeof(temp.buffer) - 16*sizeof(unsigned char) - 2*sizeof(char *) - 1;  char name[sizeof(temp.buffer)];  memset(name, '0', len);  name[len] = '\0';  retval = gethostbyname_r(name, &resbuf, temp.buffer, sizeof(temp.buffer), &result, &herrno);  if (strcmp(temp.canary, CANARY) != 0) {    puts("vulnerable");    exit(EXIT_SUCCESS);  }  if (retval == ERANGE) {    puts("not vulnerable");    exit(EXIT_SUCCESS);  }  puts("should not happen");  exit(EXIT_FAILURE);}//23333333333333,这个蛋疼的注释

(终于把颜色弄好了)
如果输出为not wulnerable则代表你的系统是安全的【目测ubuntu 14.4 应该没事。。。等下上我服务器测试下


修复方法--ubuntu:
sudo apt-get update
sudo apt-get install libc6
//讲解下,sudo apt-get update是为了更新软件包。而sudo apt-get install libc6是安装新版本的glibc。如果更新不到,请检查自己的软件源。一般外国的都会有.
//还有,等sudo apt-get update执行完了之后再执行libc6指令
RHEL:
yum install update
yum install libc6

//同理



好了,到了讲利用方法了.

我只讲一个无关紧要的= =
可以通过发送一个包,试探这个系统是64位的还是32位的


@1076742624 求精



哦对了,windows想玩的可以看这里

DarcJC
占楼,帖子里貌似有什么错的呢~

lymenglei
新人magnus绑定了,代码我都懂

DarcJC
lymenglei 发表于 2015-1-30 12:37
新人magnus绑定了,代码我都懂

o(∩_∩)o 哈哈
来我们技术组吧= =

wdsjwzzz
windows8.1路过。。。
而且不懂C语言

lymenglei
lymenglei 发表于 2015-1-30 12:37
新人magnus绑定了,代码我都懂

{:10_523:}{:10_523:}

ylmars
windows编译不编译跟是不是C语言有毛关系

DarcJC
ylmars 发表于 2015-1-30 12:41
windows编译不编译跟是不是C语言有毛关系

你想想windows有gcc么...

ylmars
本帖最后由 ylmars 于 2015-1-30 12:48 编辑
z25096708 发表于 2015-1-30 12:43
你想想windows有gcc么...

有啊。。版本还多的是呢,而且C语言和gcc和glibc也没有必然联系啊

(我就是来挑刺的)

manageryzy
反正一般黑客也利用不了缓冲区漏洞

manageryzy
http://www.openwall.com/lists/oss-security/2015/01/27/9
漏洞详情

DarcJC
manageryzy 发表于 2015-1-30 12:53
反正一般黑客也利用不了缓冲区漏洞

我是担心我服务器了 ==

iSteven
Windows就不能编译C? Windows下C语言编译工具多了。而且Windows内核就是C和C++的

DarcJC
iSteven 发表于 2015-1-30 13:24
Windows就不能编译C? Windows下C语言编译工具多了。而且Windows内核就是C和C++的

这个我知道= =
问题是你编译来有什么用先

iSteven
z25096708 发表于 2015-1-30 16:06
这个我知道= =
问题是你编译来有什么用先

编译完发给Linux用户啊

DarcJC
iSteven 发表于 2015-1-30 19:39
编译完发给Linux用户啊

好吧,你牛,,,,,,,
(纯属蛋疼= =)
别找我的茬了

1901803382
iSteven 发表于 2015-1-30 19:39
编译完发给Linux用户啊
  1. #include <netdb.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <errno.h>
  6. #define CANARY "in_the_coal_mine"

  7. struct {
  8.         char buffer[1024];
  9.         char canary[sizeof(CANARY)];
  10. }

  11. temp = {"buffer", CANARY};

  12. int main(void) {
  13.         struct hostent resbuf;
  14.         struct hostent *result;
  15.         int herrno;
  16.         int retval;
  17.         /*** strlen (name) = size_needed - sizeof (*host_addr) - sizeof (*h_addr_ptrs) - 1; ***/
  18.         size_t len = sizeof(temp.buffer) - 16 * sizeof(unsigned char) - 2 * sizeof(char *) - 1;
  19.         char name[sizeof(temp.buffer)];
  20.         memset(name, '0', len);
  21.         name[len] = '\0';
  22.         retval = gethostbyname_r(name, &resbuf, temp.buffer, sizeof(temp.buffer), &result, &herrno);
  23.         if (strcmp(temp.canary, CANARY) != 0) {
  24.                 puts("vulnerable");
  25.                 exit(EXIT_SUCCESS);
  26.         }
  27.         if (retval == ERANGE) {
  28.                 puts("not vulnerable");
  29.                 exit(EXIT_SUCCESS);
  30.         }
  31.         puts("should not happen");
  32.         exit(EXIT_FAILURE);
  33. }
复制代码


楼主你把代码都弄到一行里有意义么

efsg
windows7路过

维他命の淡蓝
完全不懂,我是个大小白