我正在阅读有关BOF(缓冲区溢出)攻击的信息,一种防止这种攻击的方法是通过使堆栈或堆变为不可执行。但这并不意味着我们不能拥有局部变量。通过使堆栈不可执行,我没有看到新的行为。就BOF而言,Executable和NX堆栈之间的主要区别是什么?
答案 0 :(得分:0)
基于堆栈的缓冲区溢出攻击的工作原理
寄信人地址的新值指向恶意代码内的正确位置。函数返回后,它将返回到恶意代码,该代码开始执行。
但是请记住它在堆栈中。如果堆栈不可执行,则程序只会崩溃,而不会执行坏东西。
答案 1 :(得分:0)
我现在已经掌握了可执行堆栈的含义,计算机指令存储在.text节中。堆栈部分包含函数参数,局部变量,我们也可以存储指令,因为它们是字节码。但是默认情况下,CPU不会执行存储在堆栈中的指令,因此要使CPU执行存储在堆栈中的代码,我们必须使堆栈具有可执行性。
gcc -m32 -z execstack -o shell exploit.c