Tutorial de injeção de SQL: Aprenda com o exemplo

Índice:

Anonim

Os dados são um dos componentes mais vitais dos sistemas de informação. Os aplicativos da web baseados em banco de dados são usados ​​pela organização para obter dados dos clientes. SQL é a sigla para Structured Query Language. É usado para recuperar e manipular dados no banco de dados.

O que é injeção SQL?

SQL Injection é um ataque que envenena instruções SQL dinâmicas para comentar certas partes da instrução ou anexar uma condição que sempre será verdadeira. Ele tira proveito das falhas de design em aplicativos da web mal projetados para explorar instruções SQL para executar código SQL malicioso.

Neste tutorial, você aprenderá técnicas de injeção de SQL e como proteger aplicativos da Web contra esses ataques.

  • Como funciona a injeção SQL
  • Atividade de hack: SQL injetar um aplicativo da Web
  • Outros tipos de ataque de injeção SQL
  • Ferramentas de automação para injeção de SQL
  • Como prevenir contra ataques de injeção de SQL
  • Atividade de hack: use Havji para injeção de SQL

Como funciona a injeção SQL

Os tipos de ataques que podem ser executados usando injeção de SQL variam dependendo do tipo de mecanismo de banco de dados. O ataque funciona em instruções SQL dinâmicas . Uma instrução dinâmica é uma instrução gerada em tempo de execução usando senha de parâmetros de um formulário da web ou string de consulta URI.

Vamos considerar um aplicativo da web simples com um formulário de login. O código para o formulário HTML é mostrado abaixo.

AQUI,

  • O formulário acima aceita o endereço de e-mail e a senha, em seguida, os envia para um arquivo PHP denominado index.php.
  • Tem a opção de armazenar a sessão de login em um cookie. Deduzimos isso da caixa de seleção Remember_me. Ele usa o método post para enviar dados. Isso significa que os valores não são exibidos no URL.

Vamos supor que a instrução no backend para verificar o ID do usuário seja a seguinte

SELECT * FROM users WHERE email = $ _POST ['email'] AND password = md5 ($ _ POST ['password']);

AQUI,

  • A instrução acima usa os valores do array $ _POST [] diretamente, sem higienizá-los.
  • A senha é criptografada usando o algoritmo MD5.

Ilustraremos o ataque de injeção de SQL usando sqlfiddle. Abra o URL http://sqlfiddle.com/ em seu navegador. Você obterá a seguinte janela.

Nota: você terá que escrever as instruções SQL

Etapa 1) Insira este código no painel esquerdo

CREATE TABLE `users` (`id` INT NOT NULL AUTO_INCREMENT,`email` VARCHAR(45) NULL,`password` VARCHAR(45) NULL,PRIMARY KEY (`id`));insert into users (email,password) values ('This email address is being protected from spambots. You need JavaScript enabled to view it.',md5('abc'));

Etapa 2) Clique em Build Schema

Etapa 3) Insira este código no painel direito

selecione * dos usuários;

Etapa 4) Clique em Executar SQL. Você verá o seguinte resultado

Suponha que o usuário forneça Este endereço de e-mail está protegido contra spambots. Você deve habilitar o JavaScript para visualizá-lo. e 1234 como a senha. A instrução a ser executada no banco de dados seria

SELECT * FROM users WHERE email = ' Este endereço de email está protegido contra spambots. Você deve habilitar o JavaScript para visualizá-lo. ' AND senha = md5 ('1234');

O código acima pode ser explorado comentando a parte da senha e acrescentando uma condição que sempre será verdadeira. Vamos supor que um invasor forneça a seguinte entrada no campo de endereço de e-mail.

Este endereço de e-mail está protegido contra spambots. Você deve habilitar o JavaScript para visualizá-lo. ' OU 1 = 1 LIMITE 1 - ']

xxx para a senha.

A declaração dinâmica gerada será a seguinte.

SELECT * FROM users WHERE email = ' Este endereço de email está protegido contra spambots. Você deve habilitar o JavaScript para visualizá-lo. ' OU 1 = 1 LIMITE 1 - '] E senha = md5 (' 1234 ');

AQUI,

  • Este endereço de e-mail está protegido contra spambots. Você deve habilitar o JavaScript para visualizá-lo. termina com uma aspa simples que completa a aspa da string
  • OR 1 = 1 LIMIT 1 é uma condição que sempre será verdadeira e limita os resultados retornados a apenas um registro.
  • - 'AND… é um comentário SQL que elimina a parte da senha.

Copie a instrução SQL acima e cole-a na caixa de texto SQL FiddleRun SQL como mostrado abaixo

Atividade de hack: SQL injetar um aplicativo da Web

Temos um aplicativo da web simples em http://www.techpanda.org/ que é vulnerável a ataques de injeção de SQL apenas para fins de demonstração. O código do formulário HTML acima é retirado da página de login. O aplicativo fornece segurança básica, como higienizar o campo de e-mail. Isso significa que nosso código acima não pode ser usado para ignorar o login.

Para contornar isso, podemos explorar o campo de senha. O diagrama abaixo mostra as etapas que você deve seguir

Vamos supor que um invasor forneça a seguinte entrada

  • Passo 1: Digite Este endereço de email está protegido contra piratas. Você deve habilitar o JavaScript para visualizá-lo. como o endereço de email
  • Etapa 2: digite xxx ') OU 1 = 1 -]
  • Clique no botão Enviar
  • Você será direcionado para o painel

A instrução SQL gerada será a seguinte

SELECT * FROM users WHERE email = ' Este endereço de email está protegido contra spambots. Você deve habilitar o JavaScript para visualizá-lo. ' AND senha = md5 ('xxx') OR 1 = 1 -] ');

O diagrama abaixo ilustra que a instrução foi gerada.

AQUI,

  • A declaração assume de forma inteligente que a criptografia md5 é usada
  • Completa aspas simples e colchete de fechamento
  • Acrescenta uma condição à afirmação que sempre será verdadeira

Em geral, um ataque de injeção SQL bem-sucedido tenta várias técnicas diferentes, como as demonstradas acima, para realizar um ataque bem-sucedido.

Outros tipos de ataque de injeção SQL

As injeções de SQL podem causar mais danos do que apenas passar os algoritmos de login. Alguns dos ataques incluem

  • Excluindo dados
  • Atualizando dados
  • Inserindo dados
  • Executar comandos no servidor que podem baixar e instalar programas maliciosos, como cavalos de Tróia
  • Exportar dados valiosos, como detalhes de cartão de crédito, e-mail e senhas para o servidor remoto do invasor
  • Obter detalhes de login do usuário etc.

A lista acima não é exaustiva; apenas dá uma ideia do que SQL Injection

Ferramentas de automação para injeção de SQL

No exemplo acima, usamos técnicas de ataque manual com base em nosso vasto conhecimento de SQL. Existem ferramentas automatizadas que podem ajudá-lo a realizar os ataques com mais eficiência e no menor tempo possível. Essas ferramentas incluem

  • SQLSmack - https://securiteam.com/tools/5GP081P75C
  • SQLPing 2 - http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
  • SQLMap - http://sqlmap.org/

Como prevenir contra ataques de injeção de SQL

Uma organização pode adotar a política a seguir para se proteger contra ataques de injeção de SQL.

  • A entrada do usuário nunca deve ser confiável - ela sempre deve ser limpa antes de ser usada em instruções SQL dinâmicas.
  • Procedimentos armazenados - podem encapsular as instruções SQL e tratar todas as entradas como parâmetros.
  • Instruções preparadas - instruções preparadas para funcionar criando primeiro a instrução SQL e, em seguida, tratando todos os dados do usuário enviados como parâmetros. Isso não tem efeito na sintaxe da instrução SQL.
  • Expressões regulares - podem ser usadas para detectar códigos potencialmente prejudiciais e removê-los antes de executar as instruções SQL.
  • Direitos de acesso do usuário para conexão com o banco de dados - somente os direitos de acesso necessários devem ser concedidos às contas usadas para se conectar ao banco de dados. Isso pode ajudar a reduzir o que as instruções SQL podem executar no servidor.
  • Mensagens de erro - não devem revelar informações confidenciais e onde exatamente ocorreu um erro. Mensagens de erro personalizadas simples, como “Desculpe, estamos enfrentando erros técnicos. A equipe técnica foi contatada. Tente novamente mais tarde ”pode ser usado em vez de exibir as instruções SQL que causaram o erro.

Atividade de hack: use Havij para injeção de SQL

Neste cenário prático, usaremos o programa Havij Advanced SQL Injection para verificar vulnerabilidades em um site.

Nota: seu programa antivírus pode sinalizá-lo devido à sua natureza. Você deve adicioná-lo à lista de exclusões ou pausar seu software antivírus.

A imagem abaixo mostra a janela principal do Havij

A ferramenta acima pode ser usada para avaliar a vulnerabilidade de um site / aplicativo da web.

Resumo

  • SQL Injection é um tipo de ataque que explora instruções SQL ruins
  • A injeção SQL pode ser usada para ignorar algoritmos de login, recuperar, inserir e atualizar e excluir dados.
  • As ferramentas de injeção de SQL incluem SQLMap, SQLPing e SQLSmack, etc.
  • Uma boa política de segurança ao escrever instruções SQL pode ajudar a reduzir os ataques de injeção de SQL.