我刚读过 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秒后重新启动。但在我的执行中,它没有。这是为什么?
非常感谢!
答案 0 :(得分:2)
学会粉碎筹码首先要注意最细微的细节 成功的漏洞利用和简单的流程崩溃几乎完全相同。你必须找到好的差异并改变利用。
首先调试崩溃的程序
为什么它会崩溃?什么写在堆栈的哪里?
它是否因为返回地址被修改而崩溃(在这种情况下,你是在那里的一半),还是出于其他原因?
如果你不能回答这些问题,那么即使你把事情搞定了,你也什么都不会学到。