Вопрос

Я прочитал две статьи о кучном распылении: Викиэпдия и это сообщение в блоге.Я понимаю, как код оболочки вводится в память программы.Но как программа сделана для перехода / вызова к адресной памяти, расположенной в куче?

Какой сбой вызывает вызов heap?

Должна ли такая атака проводиться с помощью своего рода атаки переполнения буфера?

Есть ли какое-нибудь золотое правило, подобное тому, что касается переполнения буфера, т. е. используйте n версию функций (strncpy вместо этого strcpy)?

Это было полезно?

Решение

Если я правильно понимаю,

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

Они говорят о подобной ситуации:

char buffer[10];
FuncPtr p;

И когда вы читаете в buffer защита от переполнения отсутствует, и вы можете записывать данные непосредственно в ячейку памяти для p.Позже, когда ваш код попытается вызвать p, он переместится туда, куда хочет, чтобы он переместился злоумышленник, предположительно туда, где они внедрили исполняемый код в ваше приложение.

Простое решение:Не используйте статические буферы (предпочитайте std:: классы коллекции) и всегда проверяйте наличие переполнений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top