BOF中的可执行vs NX堆栈?

时间:2019-01-19 15:51:33

标签: c security stack buffer-overflow

我正在阅读有关BOF(缓冲区溢出)攻击的信息,一种防止这种攻击的方法是通过使堆栈或堆变为不可执行。但这并不意味着我们不能拥有局部变量。通过使堆栈不可执行,我没有看到新的行为。就BOF而言,Executable和NX堆栈之间的主要区别是什么?

2 个答案:

答案 0 :(得分:0)

基于堆栈的缓冲区溢出攻击的工作原理

  • 覆盖寄信人地址,并且
  • 将恶意代码放在堆栈的更远处。

寄信人地址的新值指向恶意代码内的正确位置。函数返回后,它将返回到恶意代码,该代码开始执行。

但是请记住它在堆栈中。如果堆栈不可执行,则程序只会崩溃,而不会执行坏东西。

答案 1 :(得分:0)

我现在已经掌握了可执行堆栈的含义,计算机指令存储在.text节中。堆栈部分包含函数参数,局部变量,我们也可以存储指令,因为它们是字节码。但是默认情况下,CPU不会执行存储在堆栈中的指令,因此要使CPU执行存储在堆栈中的代码,我们必须使堆栈具有可执行性。

gcc -m32 -z execstack -o shell  exploit.c