O que é SQL Injection? Como funciona o ataque?
Neste post mostramos como Injetar dados a partir de Inputs, um Ataque ao Google e Como Proteger-se.
No dia 03 de janeiro de 2017 a maior ferramenta de buscas da internet, a Google, sofreu um ataque DNS (feito com SQL Injection). De acordo com as imagens obtidas pelos usuários da internet o autor do ataque se identifica como Kuroi’SH e a invasão aconteceu apenas “por diversão”.
De acordo com o hacker, a ação foi realizada por meio de um SQL Injection, injeção de SQL. Foi com esta ferramenta que Kuroi’SH redirecionou os acessos e realizou o deface, cunho popular inglês para identificar uma modificação na aparência de algum objeto ou site.
O que é SQL Injection ?
O SQL Injection é uma falha na codificação de uma aplicação qualquer (web ou local) que possibilita por meio de um input qualquer, a manipulação de uma consulta SQL. Esta manipulação é chamada de injeção, por isso o termo Injeção SQL. Resumindo: É uma técnica de ataque baseada na manipulação do código SQL, que é a linguagem utilizada para troca de informações entre aplicações e bancos de dados relacionais.
É a linguagem de padrão universal para manipulação de dados em bancos de dados relacionais através dos SGBDs (Sistema de Gerenciamento de Banco de Dados Relacionais). É um tipo de ataque onde o “Hacker” consegue inserir comandos maliciosos (sql querys) no banco de dados através dos campos de formulários ou de URLs de uma aplicação vulnerável, ambicionando extrair informações guardadas no banco de dados.
“Pense em SQL Injection como uma simples falha lógica, é simplesmente uma falha que, por deixar aberta a interpretações, ocorrem manipulações indesejáveis.”
A Inurl Brasil, um grupo de pesquisa de segurança, desenvolvimento de ferramentas e ativismo digital, disse: “A computação é perfeita, mas quem programa os dispositivos e aplicações são estúpidos, eles não veem todas as possibilidades, eles não se importam com nada além do ‘caminho que determinei’, se esquecem que existem sempre muitos outros caminhos e que é função do desenvolvedor e do testador de software (algo que não existe muito nas empresas) fazer todos esses caminhos e garantir que o software se comporte adequadamente; caso não faça isso, um hacker fará”.
Narrando como é feita uma injeção SQL.
Imagine que você está viajando e seu carro perde a capacidade da bateria, ou seja, ela morre. O que fazer? Se você possui um carregador no carro poderá tentar algo para se salvar. Mas se não tiver, existem outros métodos para fazer com que a bateria funcione, por exemplo, a famosa “chupeta”, que é quando você conecta a sua bateria em outra que esteja em funcionamento.
Digamos que você não possui esse carregador, então precisa encontrar outro motorista que forneça a bateria. Você o encontra e faz a seguinte pergunta: “Amigo, eu preciso de uma recarga, será que daria?”. O outro motorista não vai entender o que você quer, correto?
Isso porque você não detalhou que precisa de uma recarga na bateria do seu carro. Você não foi explícito e o mesmo acontece na questão do SQL: são várias interpretações. Quando uma consulta normal com entrada de filtro é feita com vulnerabilidade, um hacker pode injetar um código malicioso na sua consulta e manipulá-la, já que você a deixou aberta a várias interpretações.
Por exemplo, voltando ao motorista que você pediu a recarga, seria como se ele te emprestasse um carregador de smartphone ou um carregador com a capacidade para danificar o seu carro.
Como é feita uma injeção(tecnicamente falando) ?
Basicamente, injeção é a pessoa inserir comandos indevidos de forma remota num servidor através de uma aplicação vulnerável.
Agora vou demonstrar um exemplo de injeção SQL de forma mais “técnica”. Então se você não tem conhecimento em programação, irá notar uma certa dificuldade, mas acredito que não seja o caso neste blog.
Veja uma aplicação de consulta SQl sem filtro de entrada:
$sql = “SELECT * FROM tabelaCM WHERE campoCM = ‘$_POST[“valor”]’ “;
No exemplo acima temos uma consulta que está completamente vulnerável. Como pode-se perceber existe apenas uma concatenação de uma variável POST recebida de fora, seja pelo INPUT de algum usuário ou até mesmo pela submissão de um formulário. A consulta demonstrada acima funciona da seguinte maneira:
“SELECIONE TUDO DA TABELA ONDE A COLUNA SEJA IGUAL AO VALOR RECEBIDO”
No PHP temos o uso do $_POST, que é uma variável global indicando a requisição pelo método HTTP POST, muito utilizado em submissão de formulário na web onde existe a passagem de variáveis na submissão, no nosso caso chamada de “valor”. Supondo que o valor do POST seja “Scriptcase”, a consulta seria:
“SELECT * FROM tabelaCM WHERE campoCM = ‘Scriptcase’”
O resultado seria uma consulta no BD(Banco de Dados) que traria da tabela “tabelaCM” onde a coluna “campoCM” seja igual a “Scriptcase” e retornaria todos os valores correspondentes a cláusula ‘where’. Porém, um hacker explora a falha injetando valores não tão normais. Pensando num cenário que tenha um hacker, vamos supor que o valor passado pelo POST seja:
“; SELECT * FROM information_schema.tables WHERE table_name != ””
No final a consulta seria:
“SELECT * FROM tabelaCM WHERE campoCM = ”; SELECT * FROM information_schema.tables WHERE table_name != ””
Neste exemplo, pudemos mudar a consulta para que ela retornasse também o nome de todas as tabelas existentes no banco de dados MYSQL(considerado o mais popular).
Assim funciona uma injeção SQL manual, “na prática, são utilizadas ferramentas que automatizam e traduzem todas as consultas para cada banco de dados até chegar no objetivo, bastando que exista a vulnerabilidade injetável”.
Agora eu te pergunto: Essa é uma técnica de hacking que exige muito conhecimento?
Não. Uma pessoa com um conhecimento básico em branco de dados e na linguagem SQL consegue executar esse tipo de ataque.
Então é isso pessoal, espero que vocês tenham gostado do post, no próximo irei mostrar como se defender do SQL Injection dentro e fora do Scriptcase.
Fonts: www.tecmundo.com.br, www.w3schools.com, www.devmedia.com.br.
Você pode gostar também…