Перезапись данных через уязвимости массива - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь продемонстрировать переполнение буфера через индекс массива (когда нет проверки границ). Я пытаюсь изменить 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

Я надеялся, что, передав int больше 4, я смогу переписать эту позицию в true, но она не работает. Мне любопытно, неправильно ли поняли мою память или я что-то упустил?

Edit: Я распечатал места как предложено и получил следующее:

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

Похоже, что bool authenticated до того, как мой массив и моя память были неверны. Однако я все еще не понимаю, почему это происходит до моего массива.

1 Ответ

0 голосов
/ 10 ноября 2018

Наиболее вероятная реализация автоматического хранения, стек, растет вниз по мере размещения объектов. Это означает, что array назначается определенный адрес, а затем authenticated выделяется нижний адрес. Вы можете сделать несколько быстрых экспериментов, чтобы убедиться, что это так. Либо посмотрите на состояние объекта, определенного до array, либо напечатайте адреса объектов.

...