Обычного переполнения буфера уже давно недостаточно, чтобы просто записать shellcode в стек и забрать управление. В реальной эксплуатации всё упирается в защитный профиль бинарника: NX запрещает исполнение из данных, ASLR ломает фиксированные адреса, а значит эксплоит приходится собирать уже не грубой силой, а аккуратной логикой.
PWN: Buffer Overflow с обходом ASLR через ret2libc
Источник: codeby.net