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?