粉碎堆栈:溢出

时间:2012-05-28 13:25:30

标签: c++ c stack overflow

我刚读过 Smashing the Stack for Fun and Profit http://insecure.org/stf/smashstack.html),想要探索更多。然后我在这里找到了这段代码:https://github.com/yangsu/Stack-Smashing

我非常清楚这里所说的原则,并且我严格遵循了这些步骤,但却出现了一些错误。我打开了2个终端。

在第一个终端:(在另一个终端输入“cat”行后出现“Segmentation fault”行)

$ sudo sysctl -w kernel.randomize_va_space=0
$ gcc -z execstack -fno-stack-protector webserver.c -o server
$ ./server 5000
Segmentation fault.  Shutting down peacefully, then rebooting.
$

在第二个终端,

$ g++ generate.cpp -o generate
$ ./generate
$ cat data.dat | nc 127.0.0.1 5000
$ 

错误的格式或“cat”行的参数导致错误?或任何其他原因?

此外,正如函数 sigsegv 中所写,服务器应在2秒后重新启动。但在我的执行中,它没有。这是为什么?

非常感谢!

1 个答案:

答案 0 :(得分:2)

学会粉碎筹码首先要注意最细微的细节 成功的漏洞利用和简单的流程崩溃几乎完全相同。你必须找到好的差异并改变利用。

首先调试崩溃的程序 为什么它会崩溃?什么写在堆栈的哪里?
它是否因为返回地址被修改而崩溃(在这种情况下,你是在那里的一半),还是出于其他原因?

如果你不能回答这些问题,那么即使你把事情搞定了,你也什么都不会学到。