As formas mais comuns de identificar as vulnerabilidades são:
Testes Manuais:
Entradas de Usuário: Inserindo dados nas caixas de texto e formulários para ver como o sistema os trata. Tentando inserir caracteres especiais, aspas simples ou duplas para ver se há algum tipo de manipulação inadequada.
URLs e Parâmetros: Analisando as URLs para encontrar parâmetros que possam ser manipulados e modificar esses parâmetros para ver se há algum comportamento inesperado.
Ferramentas de Teste Automatizado:
SQLMap: É uma ferramenta popular para automatizar testes de SQL injection. Ela pode detectar e explorar vulnerabilidades automaticamente.
Burp Suite: Uma suíte de ferramentas para testar a segurança de aplicações web. A funcionalidade de Proxy e Scanner pode ajudar a identificar vulnerabilidades.
Teste de Union: Tentando usar a instruções UNION para combinar resultados de diferentes consultas. Se o sistema for vulnerável, ele pode retornar informações adicionais.
Teste de Boolean: Introduzindo condições booleanas para explorar se o sistema responde de maneira diferente com consultas verdadeiras ou falsas.
Respondendo à sua pergunta sobre por que o SQL injection funciona mesmo sem uma senha:
Quando você fornece ' OR '1'='1' -- como uma entrada no campo de senha, a instrução SQL resultante se torna algo como:
SELECT * FROM users WHERE username = 'algumUsuario' AND password = '' OR '1'='1' --'
O ' OR '1'='1' -- faz com que a condição password = '' OR '1'='1' seja sempre verdadeira. Assim, o sistema autentica o usuário sem a necessidade de uma senha válida.
Em vez de verificar sua senha, cria uma pergunta confusa para o banco de dados, algo como "Existe alguém com esse nome de usuário e senha, ou a senha é '1' é igual a '1'?".
É por isso é como se você tivesse dado um "passe mágico" ao sistema.