Но как они их находят? Везение? Опыт (а если его нет)?
Скорее куча факторов.
Один из основных - мышление. Люди думают по разному смотрят на ситуацию с разных углов.
В общем нужно иметь практические и теоретические знания и думать как их применить для взлома.
Обычный человек поставил на дверь хороший замок и думает что он в безопасности.
А человек умеющий находить уязвимости сразу видит что стены дома из газобетона и их проковырять легче чем замок ломать, потолок не слишком прочный можно проломить без особого шума, и.т.д.
Т.е это образ мышления взломщика. И это не относится именно к сайтам, это именно отношение ко всему что нас окружает.
Это очень гениальные люди.
Именно так. Гениальность это такой выверт сознания, который концентрирует человека на определенной проблематике в ущерб другим темам.
Может ли быть такого, чтоб не было ни единого бага, уязвимости, логической ошибки на сайте?
Нет.
Во первых в любых системах присутствуют ошибки, и чем сложнее система, тем ошибок больше.
Во вторых даже если ошибок нет - все равно можно найти слабые места.
А даже если и представить абсолютно безопасную систему - ей просто невозможно будет пользоваться.
Чем больше мы увеличиваем безопасность, тем сложнее и неудобнее пользоваться такой системой. Поэтому всегда приходится идти на компромисс.
Ну и не стоит забывать что исправления багов и уязвимостей в большинстве своем усложняют систему - тем самым повышая в ней количество багов и уязвимостей.
Поставили обновление безопасности - закрыли одну известную дыру, и как бонус получили десяток неизвестных.