【发布时间】: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