87 Shares 2874 views

O que é a injeção de SQL?

O número de sites e páginas da web está crescendo de forma constante. Tomado para o desenvolvimento de todos os que puder. E desenvolvedores Web iniciantes costumam usar código inseguro e idade. E isso cria uma série de brechas para os criminosos e hackers. Do que são. Uma das vulnerabilidades mais clássicos – injeção SQL.

Um pouco de teoria

Muitas pessoas sabem que a maioria dos sites e serviços na rede estão usando o armazenamento de banco de dados SQL. Esta é uma linguagem de consulta estruturada que permite controlar e gerenciar o armazenamento de dados. Há muitas versões diferentes do banco de dados do sistema de gestão de banco de dados – Oracle, MySQL, Postgre. Independentemente do nome e tipo, eles usam os mesmos dados de consulta. É aqui que reside o potencial vulnerabilidade. Se o desenvolvedor não conseguiu tratar adequadamente e com segurança solicitar, um atacante pode tirar proveito disso e usar táticas especiais para ter acesso ao banco de dados, e então – e por todo o gerenciamento do site.

Para evitar tais situações, você precisa para otimizar adequadamente o código e acompanhar de perto de uma maneira em que uma solicitação está sendo processada.

Verifique se há injeção SQL

Para determinar a presença de uma vulnerabilidade na rede tem um peso de sistemas de software automatizado acabados. Mas é possível realizar uma verificação simples manualmente. Para fazer isso, vá para um dos locais de teste e na barra de endereços para tentar provocar um erro de banco de dados. Por exemplo, um script no site não pode lidar com o pedido e não cortá-las.

Por exemplo, há nekiy_sayt / index.php? Id = 25

A maneira mais fácil – para colocar 25 após a citação e enviar o pedido. Se nenhum erro ocorreu, tanto no site e filtram todos os pedidos são tratados corretamente, ou está desabilitada nas configurações de sua produção. Se uma página é recarregada com os problemas, então a vulnerabilidade de injeção SQL é.

Depois que ela descobriu, você pode tentar se livrar dele.

Para implementar esta necessidade vulnerabilidade a saber um pouco sobre as equipes SQL-consultas. Um deles – UNION. Reúne vários resultados da consulta em um. Assim, podemos calcular o número de campos na tabela. EXEMPLO primeira consulta é:

  • nekiy_sayt / index.php? id = 25 UNION SELECT 1.

Na maioria dos casos, esse registro deve gerar um erro. Isso significa que o número de campos não é igual a 1. Assim, escolher as opções de 1 ou maior, é possível estabelecer seu número exato:

  • nekiy_sayt / index.php? id = 25 UNION SELECT 1,2,3,4,5,6.

Isto é, quando o erro não aparecerá mais, isso significa que o número de campos de adivinhar.

Há também uma solução alternativa para este problema. Por exemplo, quando um grande número de campos de – 30, 60 ou 100. Este grupo de comando. Ele agrupa os resultados de uma consulta por qualquer motivo, por exemplo ID:

  • nekiy_sayt / index.php? id = 25 GROUP BY 5.

Se o erro não foi recebido, em seguida, os campos mais de 5. Assim, substituindo opções a partir de uma gama bastante ampla, é possível calcular quantos deles realmente.

Este exemplo injeção SQL – para iniciantes que querem tentar-se no teste de seu site. É importante lembrar que para o acesso não autorizado a um outro artigo disponível do Código Penal.

Os principais tipos de injeção

Implementar vulnerabilidade SQL-injecção em várias formas de realização. Em seguida, estão os métodos mais populares:

  • A UNIÃO a consulta do SQL injeção. Um exemplo simples deste tipo já foi examinada acima. Realiza-se devido a um erro de verificação dos dados de entrada, os quais não são filtrados.

  • -Erro com base injeção de SQL. Como o nome indica, este tipo também usa um erro, o envio de expressões compostas sintaticamente incorreto. Depois, há a intercepção dos cabeçalhos de resposta, analisando quais podem ser realizadas depois de injeção SQL.

  • Stacked consulta o SQL injeção. Esta vulnerabilidade é determinada através da realização de pedidos sucessivos. Caracteriza-se por meio da adição no final do sinal ";". Esta abordagem é frequentemente implementada para acessar a implementação de ler e gravar dados ou sistema operacional funções, se privilégios permitir.

Software para pesquisar SQL-vulnerabilidades

Está lá para injeção SQL, o programa geralmente têm dois componentes – um site varredura para possíveis vulnerabilidades e usá-los para obter acesso a dados. Existem algumas ferramentas para plataformas de quase todos conhecidos. Sua funcionalidade facilita muito a verificação site para rachar sua injeção SQL.

SqlMap

Muito poderoso scanner que funciona com a maioria dos bancos de dados. Ele suporta vários métodos de implementação de injeção SQL. Ele tem a capacidade de reconhecer automaticamente o tipo de quebra de senha de hash e dicionário. upload de arquivos presente e funcional e download de um servidor.

Instalação em Linux é realizada usando os comandos:

  • git clone https://github.com/sqlmapproject/sqlmap.git SqlMap-dev,
  • cdsqlmap-dev /,
  • –wizard ./sqlmap.py.

Para Windows está disponível como uma opção com a linha de comando e interface gráfica do usuário.

Injeção jSQL

jSQL Injection – uma ferramenta multi-plataforma para testar o uso de vulnerabilidades de SQL. Escrito em Java, de modo que o sistema deve ser instalado JRE. Capaz de lidar com requisições GET, POST, cabeçalho, cookie. Ele tem uma interface gráfica conveniente.

A instalação deste pacote de software é a seguinte:

wget https://github.com/`curl -s https: //github.com/ron190/jsql-injection/releases | grep-E -o '/ron190/jsql-injection/releases/download/v[0-9]{1,2}.[0-9]{1,2}/jsql-injection-v[0-9] . {1,2} [0-9] {1,2} .jar '| cabeça-n 1`

Lançamento é usando o comando java -jar ./jsql-injection-v*.jar

A fim de iniciar o site de teste no SQL-vulnerabilidade, você precisa digitar o endereço no campo superior. Eles são separados por GET e POST. Com um resultado positivo, a lista de tabelas disponíveis aparecerá na janela esquerda. Você pode visualizá-los e aprender algumas informações confidenciais.

guia «página Admin» usada para encontrar os painéis administrativos. Por isso, por meio de modelos especiais procura automaticamente o sistema registra usuários privilegiados. A partir deles você pode obter apenas um hash da senha. Mas ele tem na caixa de ferramentas do programa.

Depois de encontrar todas as vulnerabilidades e de injeção de investigações necessárias, a ferramenta irá permitir que o servidor para preencher o arquivo ou, inversamente, baixá-lo de lá.

SQLi Dumper v.7

Este programa – ferramenta fácil de usar para encontrar e implementar as vulnerabilidades SQL. Ela produz a ONU é baseado na chamada Dorcas. Sua lista pode ser encontrado na Internet. Dorca para injeção SQL – estes são modelos especiais de consultas de pesquisa. Com a ajuda deles, você pode encontrar local potencialmente vulneráveis através de qualquer motor de busca.

Ferramentas para a formação

Itsecgames.com no local há um conjunto especial de ferramentas que permite que o exemplo mostra como fazer a injeção de SQL e testá-lo. A fim de beneficiar, é necessário baixar e instalar. O arquivo contém um conjunto de arquivos, que é a estrutura do site. Para instalá-lo será necessário no sistema existente de conjunto de servidor web Apache, MySQL e PHP.

Descompacte o arquivo em uma pasta do servidor web, você tem que ir para o endereço introduzido durante a instalação deste software. Uma página com o registro do usuário. Aqui você precisa inserir suas informações e clique «Criar». Movendo o usuário para uma nova tela, o sistema solicita que você selecione um dos casos de teste. Entre eles estão ambos descritos por injecção, e muitos outros itens de teste.

Vale a pena considerar um exemplo do tipo de injeção SQL GET / Search. Aqui você precisa selecioná-lo e clicar em «corte». Antes do usuário irá aparecer, e a imitação cadeia de pesquisa de um site do filme. Para classificar os filmes podem ser longo. Mas existem apenas 10. Por exemplo, você pode tentar entrar no Homem de Ferro. Ele vai indicar o filme, em seguida, o site funciona, e as tabelas que ele contém. Agora temos que verificar se os filtros de caracteres especiais de script, na citação particular. Para fazer isso, adicione 'na barra de endereço ". Além disso, isso deve ser feito após o título do filme. O site irá dar um erro de erro: Você tem um erro em sua sintaxe SQL; verifique o manual que corresponde ao seu servidor MySQL versão para o direito de utilizar sintaxe próximo a '%' 'at line 1, que afirma que os personagens ainda não são tratados corretamente. Então você pode tentar substituir o seu pedido. Mas devemos primeiro calcular o número de campos. Ele é usado para este fim por, que é introduzido após as aspas: http://testsites.com/sqli_1.php?title=Iron+Man 'ordem por 2 – & action = pesquisa.

Este comando só exibe informações sobre o filme, ou seja, o número de campos é maior do que 2. O hífen duplo informa ao servidor que os outros pedidos devem ser descartados. Agora temos que classificar para fora, colocando cada vez mais importância, desde que o erro não é impresso. No final, verifica-se que os campos serão 7.

Agora é hora de obter algo útil para fora da base. Irá modificar ligeiramente o pedido na barra de endereços, trazendo-a para um formulário: http://testsites.com/sqli_1.php?title=Iron+Man 'união selecionar 1, banco de dados (), usuário (), 4, senha, 6, 7 dos usuários – & action = pesquisa. Como resultado de sua implementação iria exibir a corda com os hashes de senha, que podem ser facilmente convertidos em símbolos compreensíveis usando um dos serviços on-line. A conjurou um pouco e pegou um nome de campo com um login, você pode ter acesso a entrada de outra pessoa, como administrador do site.

O produto tem uma espécie de peso tipos de injecção, em que para a prática. Deve ser lembrado que a aplicação destas habilidades na rede em sites reais pode ser uma ofensa criminal.

Injeção e PHP

Como regra geral, o código PHP e é responsável pelas solicitações de processamento necessárias provenientes do usuário. Portanto, a este nível, você precisa para construir uma defesa contra injeção SQL em PHP.

Primeiro, vamos dar algumas orientações simples, com base no que é necessário para fazê-lo.

  • Os dados devem ser sempre processados antes de serem colocados no banco de dados. Isso pode ser feito usando expressões existentes, ou através da organização de consultas manualmente. Aqui, também, deve levar em conta que os valores numéricos são convertidos para o tipo que é necessário;
  • Evitado solicitado várias estruturas de controle.

Agora um pouco sobre as regras de compilar consultas em MySQL para proteger contra injeção SQL.

Na elaboração de quaisquer expressões de consulta é importante para separar os dados das palavras-chave SQL.

  • SELECT * FROM tabela WHERE name = Zerg.

Nesta configuração, o sistema pode pensar que Zerg – o nome de qualquer campo, então você precisa colocá-lo entre aspas.

  • SELECT * FROM tabela WHERE name = 'Zerg'.

No entanto, há momentos em que o valor em si contém aspas.

  • SELECT * FROM tabela WHERE name = 'Côte d'Ivoire'.

Aqui apenas lidar com parte da Côte d, eo resto pode ser percebida como uma equipe, o que, naturalmente, não. Portanto, ocorre um erro. Então você precisa deste tipo de dados de rastreio. Para fazer isso, use uma barra invertida – .

  • SELECT * FROM tabela WHERE name = 'cat-d ' Ivoire'.

Todos os itens acima se refere às linhas. Se a ação ocorre com um número, então ele não precisa de aspas ou barras. No entanto, eles devem ser obrigados a levar à força para o tipo de dados desejado.

Há recomendações que o nome do campo deve ser colocado entre crase. Este símbolo está no lado esquerdo do teclado, juntamente com um til "~". Isso é para garantir que o MySQL poderia distinguir com precisão o nome do campo da sua palavra-chave.

trabalho dinâmico com dados

Muitas vezes, para obter todos os dados do banco de dados usando consultas, gerado dinamicamente. Por exemplo:

  • SELECT * FROM tabela onde o número = '$ number'.

Aqui, o $ número variável é passado como determinar o valor do campo. O que vai acontecer se ele fica 'Côte d'Ivoire? Error.

Para evitar este problema, é claro, você pode incluir as configurações de "magic quotes". Mas agora os dados serão exibidos sempre que necessário e não é necessário. Além disso, se o código é escrito à mão, você pode gastar um pouco mais de tempo para criar resistente a rachaduras do próprio sistema.

Para a adição independente de uma barra pode usar mysql_real_escape_string.

$ N = mysql_escape_string ($ número);

$ Ano = mysql_real_escape_string ($ ano);

$ Consulta = "INSERT INTO tabela (número, ano, classe) VALUES ( '$ number', '$ Ano', 11)".

Embora o código e aumento de volume, mas potencialmente ele iria trabalhar muito mais seguro.

espaços reservados

Placeholders – uma espécie de marcadores para o qual o sistema reconhece que este é o lugar que você precisa para substituir uma função especial. Por exemplo:

$ Sate = $ mysqli-> prepare ( "SELECT Distrito DE número onde Name =?");

$ Sate-> bind_param ( "s", $ number);

$ Sate-> execute ();

Esta seção do código tem um modelo de solicitação de treinamento e, em seguida, liga-se o número da variável, e executa-lo. Esta abordagem permite dividir o processamento de consultas e sua implementação. Assim, ele pode ser salvo a partir da utilização de códigos maliciosos são SQL-.

Para que um invasor

Sistema de Protecção – um fator muito importante, que não pode ser negligenciada. Claro, um site simples do cartão será mais fácil para restaurar. E se é um portal grande, serviço, fórum? Quais são as consequências se você não pensar em segurança?

Em primeiro lugar, um pirata pode quebrar a integridade de ambas a base e removê-lo completamente. E se o administrador do site ou hoster não faz um backup, você terá tempos difíceis. Acima de tudo, um intruso, quebrando um único site, pode ir para o outro registrado no mesmo servidor.

Em seguida é o roubo de informações pessoais dos visitantes. Como usar – tudo é limitado apenas pela imaginação de um hacker. Mas em qualquer caso, as consequências não será muito agradável. Especialmente se continha informações financeiras.

Além disso, o atacante pode mesclar banco de dados a si mesmo e, em seguida, extorquir dinheiro para seu retorno.

usuários de desinformação em nome do administrador do site, a pessoa que não está sendo, também pode haver consequências negativas como possíveis fatos de fraude.

conclusão

Todas as informações contidas neste artigo é fornecido apenas para fins informativos. Use-o apenas precisa testar seus próprios projetos quando detecta vulnerabilidades e resolvê-los.

Para um estudo mais aprofundado de técnicas de como conduzir injeção SQL, é necessário começar com as capacidades de pesquisa reais e características da linguagem SQL. Como consultas compiladas, palavras-chave, tipos de dados, eo uso de tudo isso.

Também não pode fazer sem a compreensão do funcionamento das funções PHP e elementos HTML. O uso primário pontos vulneráveis para injeção – uma linha de endereço, e vários campo de pesquisa. Aprender funções do PHP, o método de execução e recursos vão descobrir como evitar erros.

A presença de muitas ferramentas de software prontas permitir a análise em profundidade no site vulnerabilidades conhecidas. Um dos produtos mais populares – linux kali. Esta imagem de um sistema operacional baseado em Linux, que contém um grande número de ferramentas e programas que podem realizar análise abrangente de força local.

O que você precisa saber como cortar o site? É muito simples – é necessário estar ciente dos potenciais vulnerabilidades do seu projecto ou site. Especialmente se é uma loja online com pagamento online, onde os dados do usuário de pagamento pode ser comprometida por um invasor.

Para o estudo profissional do pessoal de segurança da informação existente será capaz de verificar o site para uma variedade de critérios e profundidade. A partir de um simples HTML-injeções e à engenharia social e phishing.