1) Случайно. Серьёзно - каждый юзер является тестером, шанс найти баг (если он есть) велик, когда ищут миллионы.
2) Опытным путём, пробуют всякое-разное, брутфорс, инжект.
3) Если есть доступ к исходникам, то можно долгими вечерами медитировать и в одну звёздную ночь достигнуть просветления.
4) Есть также соц. инженеринг - это "баги" в людях и в правилах, которым они следуют. И это важный пункт. Много атак происходит именно через слабости людей.
Вообще поиском багов должен заниматься тестировщик перед релизом. Но у взломщика больше свободного времени (заняться нечем, или вообще школьник) или мотивации (реальный профит, а не з/п).