1. 漏洞说明

1.1 漏洞原理

glibc是GNU发布的libc库,即c运行库,在glibc库中的__nss_hostname_digits_dots()函数存在一个缓冲区溢出的漏洞,这个漏洞可以经过gethostbyname*()函数被本地或者远程触发。

1.2 漏洞危害

攻击者可以利用该漏洞执行指令,控制存在漏洞的系统。

1.3 漏洞利用条件(攻击者成功利用漏洞必要条件)

1)、存在漏洞系统中存在使用gethostbyname() 函数的程序

2)、程序必须能接收攻击者发送的数据,并且将数据作为gethostbyname
()的参数

3)、攻击者发送的攻击数据(亦作:payload,载荷)必须符合特定条件,如下:

a) Payload 首字符必须为数字

b) Payload 最后字符不能为点号

c) Payload 中只能包含数字和点号

d) Payload 必须符合ipv4或者ipv6的地址格式

e) Payload 必须足够长,具体长度需要攻击者不断尝试来确定影响范围

1、该漏洞影响使用GNU libc库版本2.2-2.17的Linux操作系统

2、影响的操作系统类型包括:

  CentOS 6 & 7

  Debian 7

  Red Hat Enterprise Linux 6 & 7

  Ubuntu 10.04 & 12.04

  各Linux发行版

2. 验证方法

第一、 将漏洞验证代码代码保存成 ghost.c 文件并且上传到要验证的linux主机中

第二、 使用 gcc ghost.c –o testghost指令编译,会生成testghost

第三、 使用 ./testghost 执行漏洞测试程序,如果程序输出vulnerable 则说明存在漏洞

2.1 漏洞验证代码

#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);
}

3. 修复方法

将linux中的libc升级到最新版本

#最新的libc包
[root@SHQZ-PS-IOT-SV2-WEB06 ghost]# ll
total 20576
-rw-r----- 1 root root 944 Apr 18 14:11 ghost.c
-rw-r----- 1 root root 4007948 Apr 18 14:11 glibc-2.12-1.209.el6_9.2.x86_64.rpm
-rw-r----- 1 root root 14924228 Apr 18 14:11 glibc-common-2.12-1.209.el6_9.2.x86_64.rpm
-rw-r----- 1 root root 1014476 Apr 18 14:11 glibc-devel-2.12-1.209.el6_9.2.x86_64.rpm
-rw-r----- 1 root root 634508 Apr 18 14:11 glibc-headers-2.12-1.209.el6_9.2.x86_64.rpm
-rwxr-x--- 1 root root 8309 May 22 10:39 testghost
-rw-r----- 1 root root 464672 Apr 18 14:11 tzdata-2016j-1.el6.noarch.rpm
#当前libc版本
[root@SHQZ-PS-IOT-SV2-WEB06 ~]# rpm -qa|grep glibc
glibc-common-2.12-1.107.el6.x86_64
glibc-devel-2.12-1.107.el6.x86_64
glibc-2.12-1.107.el6.x86_64
glibc-headers-2.12-1.107.el6.x86_64
#升级libc到最新版本
[root@SHQZ-PS-IOT-SV2-WEB06 ghost]# rpm -U *.rpm
#升级后libc版本
[root@SHQZ-PS-IOT-SV2-WEB06 ghost]# rpm -qa|grep glibc
glibc-2.12-1.209.el6_9.2.x86_64
glibc-common-2.12-1.209.el6_9.2.x86_64
glibc-devel-2.12-1.209.el6_9.2.x86_64
glibc-headers-2.12-1.209.el6_9.2.x86_64
#验证幽灵漏洞是否修复
[root@SHQZ-PS-IOT-SV2-WEB06 ghost]# ./testghost
not vulnerable

OK,libc升级成功,幽灵漏洞已修复

Linux幽灵漏洞修复的更多相关文章

  1. Linux Glibc幽灵漏洞紧急修补方案【转】

    转自:http://blog.csdn.net/chen19870707/article/details/43560823 幽灵漏洞是Linux glibc库上出现的一个严重的安全问题,他可以让攻击者 ...

  2. LInux系统木马植入排查分析 及 应用漏洞修复配置(隐藏bannner版本等)

    在日常繁琐的运维工作中,对linux服务器进行安全检查是一个非常重要的环节.今天,分享一下如何检查linux系统是否遭受了入侵? 一.是否入侵检查 1)检查系统日志 检查系统错误登陆日志,统计IP重试 ...

  3. 关于阿里云ECS Centos 5/6/7 Linux Glibc库严重安全漏洞修复方法

    日前Linux GNU glibc标准库的 gethostbyname函数爆出缓冲区溢出漏洞,漏洞编号为CVE-2015-0235.黑客可以通过gethostbyname系列函数实现远程代码执行,获取 ...

  4. Linux TCP漏洞 CVE-2019-11477 CentOS7 修复方法

    CVE-2019-11477漏洞简单介绍 https://cert.360.cn/warning/detail?id=27d0c6b825c75d8486c446556b9c9b68 RedHat用户 ...

  5. Mysql漏洞修复方法思路及注意事项

    [系统环境] 系统环境:Red Hat Enterprise Linux Server release 5.4 (Tikanga)  +  5.7.16 MySQL Community Server  ...

  6. PrestaShop 网站漏洞修复如何修复

    PrestaShop网站的漏洞越来越多,该网站系统是很多外贸网站在使用的一个开源系统,从之前的1.0初始版本到现在的1.7版本,经历了多次的升级,系统使用的人也越来越多,国内使用该系统的外贸公司也很多 ...

  7. discuzX3.2 X3.4网站漏洞修复 SQL注入与请求伪造攻击利用与修复

    2018年12月9日,国内某安全组织,对discuz X3.2 X3.4版本的漏洞进行了公开,这次漏洞影响范围较大,具体漏洞是discuz 的用户前段SQL注入与请求伪造漏洞,也俗称SSRF漏洞,漏洞 ...

  8. Drupal 网站漏洞修复以及网站安全防护加固方法

    drupal是目前网站系统使用较多一个开源PHP管理系统,架构使用的是php环境+mysql数据库的环境配置,drupal的代码开发较为严谨,安全性较高,但是再安全的网站系统,也会出现网站漏洞,dru ...

  9. 【渗透测试】NSA Windows 0day漏洞+修复方案

    这个漏洞是前段时间爆出来的,几乎影响了全球70%的电脑,不少高校.政府和企业都还在用Windows服务器,这次时间的影响力堪称网络大地震. ------------------------------ ...

随机推荐

  1. Ubuntu 18.04 安装、配置和美化

    本文章修改自inkss的博文 为什么要修改原文? 本来我是想自己写这么一篇的,但是没想到在百度一搜,居然一篇好文.我之前没看到,真是可惜. 这篇文章主要是帮助我记录一些东西,如题. 原文虽然不错,但是 ...

  2. 【Leetcode 做题学算法周刊】第八期

    首发于微信公众号<前端成长记>,写于 2020.05.07 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 15 ...

  3. SSRF 跨站请求伪造学习笔记

    参考文章: 了解SSRF,这一篇就足够了 SSRF 学习之路 SSRF绕过方法总结 Weblogic SSRF漏洞 What-是什么 SSRF(Server-Side Request Forgery) ...

  4. 实现图像的二值化(java+opencv)

    书里的解释: 其他的没找到什么资料,直接参考百度百科 https://baike.baidu.com/item/%E5%9B%BE%E5%83%8F%E4%BA%8C%E5%80%BC%E5%8C%9 ...

  5. 在string.replace中使用具名组匹配

    let reg = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/; let re = '2015-01-02'. r ...

  6. JS手写call、bind、apply

    call方法的实现 Function.prototype.MyCall = function(content,...args){ const self = content || window; con ...

  7. neighbor和neigh_modify(转载)

    (转载:http://blog.sina.com.cn/s/blog_b48a7ac30102w4mg.html###) 以下取自:http://simulation.haotui.com/viewt ...

  8. 前端 的一些css的写法

    攒一下小技巧 1.select 默认提示但是不显示在选择列表中 <option selected="selected" disabled="disabled&quo ...

  9. RabbitMQ配置文件(advanced.config)

    这是advanced.config配置文件示例: [ %% ------------------------------------------------ --------------------- ...

  10. 2. Bean Validation声明式校验方法的参数、返回值

    你必须非常努力,才能干起来毫不费力.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众 ...