Aula 48 | Passo a Passo SQL Injection
Passo a Passo SQL Injection
O que é SQL Injection?
SQL Injection (Injeção de SQL) é uma das falhas mais conhecidas e exploradas na segurança de aplicações web. Ela permite que um invasor interfira nas queries SQL executadas pelo sistema, podendo:
-
Obter informações confidenciais (usuários, senhas, emails, etc.);
-
Modificar, excluir ou inserir dados;
-
BURLAR autenticação (login);
-
Obter acesso total ao banco de dados;
-
Em alguns casos, até executar comandos no sistema operacional.
⚠️ Importante: SQL Injection não depende da linguagem (PHP, Python, JavaScript, etc.) nem da versão do banco.
A falha está na falta de validação e tratamento dos dados de entrada pelo desenvolvedor.
Como acontece a SQL Injection?
Comunicação entre cliente, back-end e banco de dados:
-
O usuário interage com a aplicação (por exemplo, preenchendo um formulário de login).
-
O back-end (código da aplicação) pega esses dados e monta uma query SQL.
-
A query é enviada ao banco de dados, que processa e responde.
-
Se não houver validação, o invasor pode injetar comandos SQL no meio dessa quer
Exemplo de Funcionamento
Cenário:
-
Backend em Python (mas poderia ser PHP, JS, Java etc.)
-
Banco de dados MySQL
-
Tabela de login:
users
-
Campos:
username
epassword
Código (com falha):
# Atenção: esse código tem falha proposital para estudo query = f"SELECT * FROM users WHERE username='{username}' AND password='{password}';" |
Se o usuário digitar:
-
username: admin' --
-
password: qualquercoisa
A query gerada será:
SELECT * FROM users WHERE username='admin' --' AND password='qualquercoisa'; |
O --
comenta o resto da query. O banco ignora a checagem da senha. Resultado: login sem senha.
Vamos imaginar um exemplo parecido:
-
O site tem um campo de login com username e password
-
O usuário digita:
-
Username:
daniel
-
Password:
admin
-
-
O back-end, por exemplo em Python, vai montar uma query assim:
Se houver uma falha de validação, o invasor pode injetar algo assim:
-
Username:
admin' --
-
Password: (qualquer coisa)
O back-end vai interpretar:
O que acontece?
O comentário --
ignora o restante da query, burlando a senha.
Tipos de SQL Injection
Existem vários métodos e técnicas que um atacante pode usar. Vamos conhecer os principais:
SQL Injection Clássica / Injeção Direta
' OR 1=1 -- |
Query resultante:
SELECT * FROM users WHERE username='' OR 1=1 --' AND password=''; |
1=1
é sempre verdadeiro → retorna todos os usuários.
Injeta diretamente na cláusula WHERE
, alterando a lógica da query:
Boolean-Based Blind SQL Injection (Cega baseada em resposta)
O atacante não vê os dados diretamente, mas percebe mudanças no comportamento da aplicação (página muda ou não).
Teste:
' AND 1=1 -- |
Se a resposta for diferente de: