Injeção SQL
O que é Injeção SQL?
Injeção SQLAtaque de injeção de código que insere SQL controlado pelo atacante numa consulta à base de dados, permitindo ler, alterar ou destruir dados.
A injeção SQL (SQLi) explora aplicações que concatenam entradas não confiáveis em instruções SQL em vez de usar consultas parametrizadas. Ao injetar aspas, comentários ou cláusulas UNION, o atacante reescreve a consulta pretendida para extrair tabelas, contornar a autenticação, escalar privilégios ou executar comandos na base de dados. As variantes incluem a clássica in-band, a baseada em erros, a cega booleana/baseada em tempo (inferindo dados um bit de cada vez a partir das respostas ou dos atrasos de resposta) e a de segunda ordem, em que uma entrada armazenada é disparada quando reutilizada mais tarde.
A SQLi tem décadas, mas continua devastadora. A CVE-2023-34362, uma injeção SQL de dia zero no Progress MOVEit Transfer, foi explorada a partir do final de maio de 2023 pelo grupo de ransomware Cl0p: atacantes não autenticados injetaram SQL para implantar a web shell LEMURLOOT e exfiltrar o conteúdo das bases de dados, propagando-se em cascata para milhares de organizações a jusante. A violação da TalkTalk em 2015, que expôs cerca de 157.000 registos de clientes, foi igualmente uma injeção SQL contra uma página web legada. A SQLi insere-se no OWASP Top 10 A03:2021 (Injeção).
A defesa primária são as consultas parametrizadas / prepared statements, que separam o código dos dados, de modo que a entrada nunca possa alterar a estrutura da consulta. Reforce com frameworks ORM usados de forma segura, validação de entradas por lista de permissões (allow-list), contas de base de dados com privilégios mínimos (sem direitos de DBA para os logins da aplicação), boas práticas com stored procedures e um WAF como defesa em profundidade. O escape manual por si só é frágil e desencorajado.
flowchart TD
U[Entrada não confiável] --> C{Como é construída a consulta?}
C -->|Concatenação de strings| I["' OR 1=1 -- injetado no SQL"]
I --> DB[(Base de dados executa o SQL do atacante)]
DB --> X[Extração de dados / contorno da autenticação]
C -->|Consulta parametrizada| S[Entrada vinculada como dados, não como código]
S --> OK[Estrutura da consulta preservada — segura]● Exemplos
- 01
Um formulário de login onde introduzir ' OR '1'='1 devolve o primeiro registo de utilizador e contorna a autenticação.
- 02
Um endpoint de relatórios em que um parâmetro manipulado dispara um UNION SELECT para extrair hashes de palavras-passe.
● Perguntas frequentes
O que é Injeção SQL?
Ataque de injeção de código que insere SQL controlado pelo atacante numa consulta à base de dados, permitindo ler, alterar ou destruir dados. Pertence à categoria Ataques e ameaças da cibersegurança.
O que significa Injeção SQL?
Ataque de injeção de código que insere SQL controlado pelo atacante numa consulta à base de dados, permitindo ler, alterar ou destruir dados.
Como se defender contra Injeção SQL?
As defesas contra Injeção SQL costumam combinar controles técnicos e práticas operacionais, conforme detalhado na definição acima.
Quais são outros nomes para Injeção SQL?
Nomes alternativos comuns: SQLi.