【问题标题】:gethostbyname buffer overflowgethostbyname 缓冲区溢出
【发布时间】:2015-04-10 11:33:50
【问题描述】:

我研究了 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 有什么区别。我对此有很多研究。有谁能够帮助我? 谢谢。

【问题讨论】:

  • 你能澄清一下你到底遇到了什么问题吗?
  • char buf[2000000]; 你确定吗?好像太大了
  • 当我在 GHOST 程序中调用 gethostbyname_r 时,它会导致覆盖金丝雀变量中的内存,但在这种情况下不会。听到的是 GHOST.c 来源:webshare.uchicago.edu/orgs/ITServices/itsec/Downloads/GHOST.c
  • 覆盖内存应该很长。

标签: c buffer-overflow gethostbyname


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-12-16
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 2013-11-06
    • 2013-04-11
    • 2015-07-07
    • 2012-02-05
    • 2013-07-21
    相关资源
    最近更新 更多