SQL

Injeção de SQL (SQL Inject)

A Injeção de SQL (SQL Inject), mais conhecida através do termo americano SQL Injection, é um tipo de ameaça de segurança que se aproveita de falhas em sistemas que interagem com bases de dados via SQL.

A injeção de SQL ocorre quando o atacante consegue inserir uma série de instruções SQL dentro de uma consulta (query) através da manipulação das entradas de dados de uma aplicação.

Para exemplificar o funcionamento da injeção de SQL, consideremos uma instrução SQL comum:

SELECT id, nome FROM autores;

Essa instrução, que representa uma consulta na base de dados, retorna todos os registros das colunas “id”, “nome” e “sobrenome” da tabela “autores”.

A partir desta mesma instrução, os registros a serem retornados podem ser restritos através da inclusão da cláusula WHERE, como é visto no exemplo abaixo:

SELECT id, nome FROM autores WHERE nome = 'benedito' AND sobrenome = 'silva';

Com base nesta instrução, é fácil supor que “benedito” e “silva” são strings, cujo conteúdo será preenchido pela entrada feita por algum usuário que estiver fazendo uso da aplicação.

Portanto, supondo que a aplicação não faça o tratamento apropriado do conteúdo inserido pelo usuário, o mesmo pode fazer o uso acidental do caractere de aspas simples. Gerando a entrada:

nome = bene’dito
sobrenome= silva

E fazendo com que a aplicação gere o código:

SELECT id, nome FROM autores WHERE nome = 'bene'dito' AND sobrenome = 'silva';

De acordo com a especificação da linguagem SQL, existe um erro de sintaxe nessa instrução, uma vez que a string passada para o campo nome é a apenas palavra “jo”, pois a adição das aspas simples quebrou a delimitação das aspas simples originais da consulta.

O interpretador do SQL espera que o restante da instrução seja outros comandos SQL válidos que complementem a instrução principal.

No entanto, como “dito” não é um identificador válido, essa instrução não será executada e retornará um erro.

Com base neste problema, um possível atacante pode manipular os dados de entrada a fim de gerar um comportamento não esperado na base de dados.

Para exemplificar este conceito, consideremos na mesma consulta apresentada, a entrada dos seguintes dados pela aplicação:

nome = bene’; DROP TABLE autores;
sobrenome = silva

Fazendo com que a aplicação gere o código:

SELECT id, nome FROM autores WHERE nome = 'bene'; DROP TABLE autores;

Neste caso, a instrução será executada normalmente, pois não há um erro de sintaxe, no entanto, com a adição do caractere ponto-e-vírgula, a instrução foi dada como finalizada de modo prematuro dando espaço para uma nova instrução.

Essa nova instrução, que poderia ser qualquer uma escolhida pelo atacante, pode ser a responsável por retornar dados confidenciais armazenados na base de dados ou de executar instruções que comprometam o sistema, como a remoção de dados e/ou tabelas, como pode ser visto no exemplo apresentado.

Quer se aprofundar em Segurança de Redes de Computadores e Cibersegurança?

Conheça o curso de Segurança em Redes de Computadores e entenda os diversos tipos de ataques que existem, bem como as peças do quebra-cabeça que integram a defesa de uma rede, entre elas: Firewall, IPS, Proxy, Anti-Spam, Anti-vírus, Anti-Malware, VPN, Sandboxing, NAC, etc.

CLIQUE NA IMAGEM ABAIXO E SAIBA MAIS DETALHES:

Link do curso:  https://go.hotmart.com/A69498318E

Cláusulas UNION/UNION ALL

Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
https://youtube.com/criandobits

Bene Silva Júnior

Bacharel em Sistemas de Informação pelo Instituto Paulista de Pesquisa e Ensino IPEP. Apaixonado por tecnologias e games do tempo da vovó!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *