Pular para o conteúdo
Todos os conceitos

Burlar o login

Uma condição sempre verdadeira faz o banco aceitar um login sem a senha certa.

Um login pergunta ao banco se existe alguém com aquele usuário e aquela senha. Quando a pergunta é montada colando o texto digitado, uma injeção troca a lógica da pergunta por uma que é sempre verdadeira.

A consulta típica é SELECT ... FROM users WHERE username = '<u>' AND password = '<p>'. Digitando no usuário ' OR '1'='1' -- , ela vira:

SELECT ... FROM users WHERE username = '' OR '1'='1' -- ' AND password = ''

A aspa fecha o nome vazio, OR '1'='1' é verdadeiro para toda linha, e -- comenta o resto, apagando a checagem da senha. O banco devolve linhas, e muitos sistemas logam você como a primeira delas (um fetchone() ou LIMIT 1), que costuma ser a conta de menor id: o administrador.

Repare que o atacante não descobriu nenhuma senha. Ele reescreveu a pergunta para que a resposta fosse sim. O conserto é a consulta parametrizada, que faz a aspa virar só um caractere do nome.

no campo de usuario ' OR '1'='1' -- WHERE username = '' OR '1'='1' sempre verdadeiro -- ' AND password = '' virou comentario: a senha nao e checada a consulta devolve todas as linhas 1 admin ... 2 bruna ... 3 tiago ... fetchone pega a primeira: admin
O login com a aspa injetada vira sempre verdadeiro e comenta a checagem da senha: a consulta devolve todas as linhas e o fetchone pega a primeira, o admin.

Aparece nestes desafios