Z tego co wiem, to rzeczywiście nic nie jest idealne, ale np. w bankach są systemy monitorujące całość i zatrudnione zespoły do obsługi włamań, co znacznie utrudnia włamanie.
Z tego, co wuiem, do szukania dziur używa się między innymi takich narzędzi jak disassemblery, debuggery i fuzzery. Oczywiście te 2 pierwsze, to raczej do plików wykonywalnych, ale jak się szuka błędów na stronach, niestety nie wiem.
Co do nauki hackingu, polecam pobawić się aplikacjami typu crackme. Możesz je znaleźć np. na polecanej przez Huberta Murawskiego stronie lub tutaj: http://crackmes.de/