通过数组漏洞覆盖数据

时间:2018-11-09 21:07:20

标签: c++ arrays memory buffer-overflow exploit

我正试图通过数组索引来演示缓冲区溢出(没有任何边界检查时)。我正在尝试通过传递错误的值来将bool authenticated = false更改为true。
我正在使用GCC 4.8.5

arrayVulnerability(int size)
{
   int array[4];
   bool authenticated = false;

   for (int i = 0; i < size; i++)
   {
      array[i] = size;
   }
}

我的理解是,我的记忆设置如下: enter image description here

我希望通过传递大于4的int可以将那个位置改写为true,但它不起作用。我很好奇我是否对记忆有误解,或者是否想念一些东西?

编辑: 我按照建议打印了位置,并得到以下信息:

bool authenticated = 0x7ffc4741612f
array[0] = 0x7ffc47416130
array[1] = 0x7ffc47416134
array[2] = 0x7ffc47416138
array[3] = 0x7ffc4741613c
array[4] = 0x7ffc47416140

所以看来bool authenticated在我的数组之前,并且我的内存布局错误。我仍然对为什么它在我的数组之前感到困惑。

1 个答案:

答案 0 :(得分:2)

自动存储最有可能的实现是堆栈,随着对象的分配,其向下扩展 。这意味着为array分配了一个特定的地址,然后为authenticated分配了一个地址。您可以做一些快速实验来验证是否是这种情况。查看之前 array中定义的对象的状态,或打印对象的地址。