-2

我研究了 GHOST 或 CVE-2015-0235 漏洞。我发现我的系统很脆弱。我写了一个测试程序来看看这个效果。但我什么都看不到。听到是我的尝试:

    user@debian:~$ uname -a 
    Linux debian 3.2.0-4-686-pae #1 SMP Debian 3.2.57-3 i686 GNU/Linux
    user@debian:~$ ./GHOST
    vulnerable
    user@debian:~$ cat ghost-example.c 
    #include <string.h>
    #include <stdio.h>
    #define len 2000000

    struct{
    char buf[len];
    char canary[32];
    }buffer;

    void main()
    {
        memset(buffer.buf,'9',len);
        buffer.buf[len-1]='\0';
        strcpy(buffer.canary,"the vulnerable part of program\n");
        gethostbyname(buffer.buf);
        printf(buffer.canary);
    }
    user@debian:~$ gcc ghost-example.c -o ghost-example
    user@debian:~$ ./ghost-example 
    the vulnerable part of program

我不知道发生了什么?gethostbyname()、gethostbyname_r()、gethostbyname2() 或 gethostbyname2_r 有什么区别。我对此有很多研究。有谁能够帮我?谢谢。

4

1 回答 1

0

也许您没有使用足够大的缓冲区?我觉得这很难相信,因为2000000在缓冲区溢出的世界中是巨大的。

或者,巧合的是,或的ret地址完全有效。我觉得这很难相信。您应该看到一个段错误,其跟踪结束于该地址附近的某处。0x393939390x3939393939393939

最有可能的gethostbyname是,没有溢出。也许您的诊断不正确,您的机器不再容易受到影响。

于 2015-04-10T11:50:12.697 回答