Primeiramente, precisamos saber o que é SQL e banco de dados. Um banco de dados é uma coleção de informações organizadas em colunas e linhas, formando uma tabela. A linguagem SQL é muito poderosa e precisamos ter conhecimento sobre ela para entender o ataque. No exemplo abaixo, observamos que é normal que existe uma página onde o usuário digite o login e senha para acessar sua conta. Abaixo podemos ver uma consulta simples de SQL:

select * from login where usuario = 'Luke' and senha = 'skyw@lk3r!' 

A consulta SQL acima mostra a tabela onde existe um usuário chamado Luke, e sua respectiva senha. Mas o que aconteceria se você só tivesse acesso ao nome do usuário? Talvez você tenha pensado que não conseguiríamos acessar a tabela, porém, podemos comentar a parte que pede a senha do usuário, comentando esse pequeno trecho do código, usando: ‘ — ‘.

Injetando esse comentário, tudo que estiver escrito após os sinais será desconsiderado e ignorado.

No caso, percebe-se que mesmo digitando uma senha diferente do banco de dados, poderíamos acessar a tabela da mesma forma, pois o trecho que solicita a senha seria ignorado por causa do código que serve com comentário.

select * from login where usuario = 'Luke' -- and senha = 'skyw@lk3r!'

Outra forma de conseguir acesso via SQL Injection, é quando não possuímos usuário e nem a senha. Usamos então a seguinte string no código no campo do nome e também no campo da senha: ‘or’ 1 = 1 —

A instrução or diz ao banco que se alguma condição não puder ser completada, outra pode ser feita.

Usando esse código, nossa query ficaria assim:

select * from login where usuario = '' or 1 = 1 -- and senha = 'teste senha'

Verficamos que como o nome está vazio passará para a instrução or, que vai perguntar se 1 é igual a 1. (Óbvio que é) Ela, assim, acessará o primeiro usuário que estiver cadastrado e ignorará a senha.

STRINGS DE ATAQUE PARA COLOCAR NOS CAMPOS:
1º) — ‘
2º) ‘ — ‘
3º) ‘or’ 1=1
4º) ‘or’ 1=1 —

Atualmente, as empresas de softwares, junto aos seus programadores, já fazem o tratamento desse tipo de falha. Porém, ainda são comuns falhas como essas em aplicações criadas por iniciantes ou pessoas que focam na usabilidade sem pensar na segurança.