我正在阅读brute-forcing stack canary。但我很困惑,为什么服务器可以在可崩溃的服务器上一次被强制执行一个字节,这个fork-and-accept是什么意思?
为什么堆栈金丝雀可以一次暴力破解一个字节?
逆向工程
开发
堆
漏洞分析
2021-06-15 23:40:40
1个回答
在对服务器进行编程时,一个常见的错误是使用 afork()来启动它并在它崩溃时重新生成它。
a 的问题fork()在于它使用内存的副本重新开始。当然,使用副本意味着重生的服务器将卡在完全相同的金丝雀中,即使它已经崩溃并重生。不知何故,它的内存布局和它的金丝雀被冻结,直到它真正从可执行文件重新运行。
对服务器进行编程的好方法是系统地使用execve()代替fork(). 这确保内存从头开始并重新初始化所有内存设置(ASLR、金丝雀等)。
但是,实际上,大多数野外服务器都在使用execve(),我们只能fork()在旧实现或教育安全挑战中找到。
其它你可能感兴趣的问题