Solução

Nome Valor
Vulnerabilidade SQL Injection (SQLi)
CWE CWE-89
OWASP Top Ten A03_2021-Injection

Esse é o clássico SQL Injection, que é quando o input do usuário não é devidamente tratado e acaba contendo instruções SQL que são executadas no banco de dados.

Nesse exercício, você pode simplesmente colocar a' UNION SELECT email, password FROM users -- (com um espaço em branco no final) como input no campo de email e notará que o resultado será a lista de todos os usuários do banco de dados e suas respectivas senhas (que esperamos que sejam hashes e não senhas em texto claro).

Como você pode executar SQL livremente, dá para fazer muito mais do que isso. Inclusive em condições específicas é até possível obter uma shell no sistema operacional.

Tente fazer um mapeamento do banco de dados explorando esse SQLi. Obtenha: nome do banco de dados, lista de tabelas e colunas da tabela users.

Tente montar um laboratório local para obter uma shell explorando o SQLi.

Tente mitigar a vulnerabilidade nesse código. O que você precisa alterar para garantir que o SQLi seja impossível de ser feito?