1.
Статья: Smashing The Stack For Fun And Profit
2.
WASM.RU > Ошибки переполнения буфера
3. журнал «Хакер: лопнуть как мыльный пузырь».
Вкраце о уязвимости:
1. При вызове функции в стек кладется адрес возврата.
2. Ее локальные переменные тоже хранятся в стеке, причем сразу после адреса возврата ;)
Таким образом записав в переменную больше чем она может ( по идее программиста ) вместить, есть возможность либо испортить абрес возврата ( скажем записав NULL и убить таким образом уронить программу ), либо записать туда «то что нужно» ( адрес своего кода ).