BOF中的可执行vs NX堆栈?

问题描述 投票:1回答:2

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

c security stack buffer-overflow
2个回答
0
投票

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

  • 覆盖返回地址,和
  • 将恶意代码放在堆栈中。

返回地址的新值指向恶意代码中的适当位置。当函数返回时,它返回到恶意代码,该代码开始执行。

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


0
投票

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

gcc -m32 -z execstack -o shell  exploit.c
© www.soinside.com 2019 - 2024. All rights reserved.