本帖最后由 z25096708 于 2015-1-30 13:05 编辑 
关于这个漏洞的具体消息可以在RedHat看到
大致受影响的系统:全部使用glibc库2.2-2.17版本的Linux发行版本都受到影响
[bedrock]←收藏
先讲检测事宜(怎么利用可以跟我买= =去死把,我不会卖的)
检测代码由@X60发布,与我无关
使用GCC编译器编译以下代码(嗯...Windows就别去编译了= =,动动自己脑洞,这是啥语言的C)
(终于把颜色弄好了)
如果输出为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想玩的可以看这里
关于这个漏洞的具体消息可以在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想玩的可以看这里
占楼,帖子里貌似有什么错的呢~
新人magnus绑定了,代码我都懂
windows8.1路过。。。
而且不懂C语言
而且不懂C语言
lymenglei 发表于 2015-1-30 12:37
新人magnus绑定了,代码我都懂
{:10_523:}{:10_523:}
windows编译不编译跟是不是C语言有毛关系
ylmars 发表于 2015-1-30 12:41
windows编译不编译跟是不是C语言有毛关系
你想想windows有gcc么...
 本帖最后由 ylmars 于 2015-1-30 12:48 编辑 
有啊。。版本还多的是呢,而且C语言和gcc和glibc也没有必然联系啊
(我就是来挑刺的)
z25096708 发表于 2015-1-30 12:43
你想想windows有gcc么...
有啊。。版本还多的是呢,而且C语言和gcc和glibc也没有必然联系啊
(我就是来挑刺的)
反正一般黑客也利用不了缓冲区漏洞
manageryzy 发表于 2015-1-30 12:53
反正一般黑客也利用不了缓冲区漏洞
我是担心我服务器了 ==
Windows就不能编译C? Windows下C语言编译工具多了。而且Windows内核就是C和C++的
iSteven 发表于 2015-1-30 13:24
Windows就不能编译C? Windows下C语言编译工具多了。而且Windows内核就是C和C++的
这个我知道= =
问题是你编译来有什么用先
z25096708 发表于 2015-1-30 16:06
这个我知道= =
问题是你编译来有什么用先
编译完发给Linux用户啊
iSteven 发表于 2015-1-30 19:39
编译完发给Linux用户啊
- #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);
 
- }
 
楼主你把代码都弄到一行里有意义么
windows7路过
完全不懂,我是个大小白