Como funciona um ataque por Blind SQL Injection

Blind SQL Injection

Em tempos onde o mundo trabalha quase que inteiramente na Internet, a segurança das suas informações torna-se questionável. Como num jogo de perguntas e respostas, ensinarei neste tutorial como descobrir se o seu site é vulnerável a esta falha, simplesmente perguntando ao servidor através de instruções SQL em parâmetros na URL. Mostrarei também a forma correta de conseguir estas informações e algumas soluções.

É comum encontrar na Internet vários tutoriais sobre SQL Injection, tanto para invadir quanto para defender. Esta era uma falha muito comum antigamente, mas estima-se que hoje menos de 5% dos sites tenham esta vulnerabilidade, até pela quantidade de informação acerca do assunto. Ao contrário do Blind SQL Injection, que é pouco divulgado, estima-se que cerca de 20% dos sites possuam esta falha.

A diferença do SQL Injection para o Blind SQL Injection, é que no primeiro caso o site nos revela as informações escrevendo-as no próprio conteúdo, já no Blind SQL, eu preciso perguntar ao servidor se algo é verdade ou mentira. Se eu perguntar se o usuário é “x”, ele me dirá se isso é verdade ou não, carregando o site ou não. Simples, eu pergunto, se o site carregar isso é verdade, se o site não carregar isso é mentira.

Vejam a vídeo-aula abaixo:
Detalhe, este é mais um tutorial com o intuito de ensinar os administradores de sistemas a protegerem os seus conteúdos. Se você se considera um hacker, você usará o seu conhecimento para o bem, assim como eu estou fazendo neste tutorial.

 

Viram o quanto é grave este problema? Apenas perguntando ao servidor, eu consigo obter qualquer informação, não tão fácil quanto no SQL Injection (confesso), mas para quem tem paciência, isto é um prato cheio! Vamos à solução para este problema!

 

Não confie no usuário!

Em primeiro lugar, temos que nos concentrar na ação do usuário, de modo a prever comportamentos inesperados. Ou seja, não confie no usuário, pois existem os usuários normais que irão acessar o seu site e aproveitar o seu conteúdo, assim como existem os usuários com conhecimento sobre hacking (alguns maliciosos), que irão tentar invadir o seu servidor apenas por diversão.

 

Filtre todos os tipos de entrada de dados

Seja ela por POST, GET, PUT, enfim. Acredite, é possível enviar um exploit inteiro por um campo de um formulário do seu site. Se você não filtrar corretamente, suas informações e os seus usuários podem ficar a mercê de qualquer pessoa com mais conhecimentos. Mas e ai Lucas Peperaio, como eu filtro as entradas de dados?

Desenvolvi em conjunto com alguns amigos programadores, uma função em PHP para filtrar todo tipo de dado malicioso. Através desta função, o seu site estará protegido de SQL e Blind SQL Injection, XSS Cross Script e outras vulnerabilidades conhecidas na WEB. Se o seu site não é em PHP, e sim em ASP ou Python, analise a função e transcreva-a para a sua linguagem de programação, não é muito complicado afinal de contas..

function protect( $str )
{
/**
* Função para retornar uma string protegida contra SQL/Blind/XSS Injection
* @param Mixed str
* @access public
* @return string
*/
if( !is_array( $str ) ) {
$str = preg_replace("/(from|select|insert|delete|where|drop table|show tables)/i","",$str);
$str = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $str);
$str = preg_replace('~&#([0-9]+);~e', 'chr("\\1")', $str);
$str = str_replace("<script","",$str);
$str = str_replace("script>","",$str);
$str = str_replace("<Script","",$str);
$str = str_replace("Script>","",$str);
$str = trim($str);
$tbl = get_html_translation_table(HTML_ENTITIES);
$tbl = array_flip($tbl);
$str = addslashes($str);
$str = strip_tags($str);
return strtr($str, $tbl);
}
else return $str;
}

A forma correta de usá-la é filtrando os dados vindos por POST, GET e etc, antes de usá-los em sua aplicação:

//Simples não?
$variavel = protect( $_POST['variavel_exemplo'] );

 

Proteja o seu servidor

Algumas extensões e módulos ajudam a proteger o seu servidor WEB, como a Mod_Security. Mas a proteção mesmo vem de você, Administrador de Sistemas. Use e abuse do firewall, esteja constantemente em alerta sobre possíveis meios de invasão e principalmente, mantenha os seus softwares sempre atualizados, pois são através deles que boa parte das falhas se originam.

É isso gente, qualquer dúvida ou sugestão, postem nos comentários.
Vale lembrar, não estou incentivando ninguém a invadir sites.
Até uma próxima

 

Lucas Peperaio

Estudante de Ciência da Computação, trabalho com desenvolvimento web há 5 anos e com hardware há 8. Nas horas vagas, sou entusiasta de Overclock, Casemod e Benchmarks, além é claro dos Games. Apaixonado por informática e pela vida, procuro compartilhar meus conhecimentos e assim, ajudar as pessoas. Siga-me no youtube, posto semanalmente muito material sobre Hardware, tecnologia e games em geral: Clique aqui

Receba gratuitamente em seu E-mail
Novos artigos do meu Blog!


Após o Cadastro você receberá um Email Automático. Clique no link enviado para Ativar e receber as novidades.

Categorias do site





20 Comentários Deixe o seu

  1. Alexandre Broggio

    Lucas que post bacana vlw mesmo pelo tutorial e por mostrar o problema e a solução.

  2. Silvia

    Bom dia Lucas, Possuo um blog desenvolvido no Blogger, sempre leio os seus posts e estou com um entrave no meu blog e queria ver a possibilidade de vc me ajudar. Vamos lá: As fotos inseridas no meu blog sempre clico em cima delas com o botão direito para ter a opção de aumentá-las e/ou deletá-las. De uns posts prá cá somente para as primeiras fotos consigo tal recurso depois não mais consigo mexer nas fotos, vc pode me ajudar? Obrigada, Abs, Silvia

  3. Lucas

    Assunto muito importante, vou ficar mais atento a isto.

  4. Java Progressivo

    Parabéns pelo excelente conteúdo, Lucas!

    Um dica pra esse tipo de coisa é aprender as benditas Expressões Regulares. É possível fazer muito com elas, escrevendo pouco. Porém exige uma certa engenhosidade, mas vale bastante a pena.

  5. Gleidson

    No meu caso não funcionou, testei com a ferramenta sqlmap e o site continuou vulnerável.

    • Lucas Peperaio

      Gleidson, atualizei o código da função, tente novamente

  6. leonardo

    Cara vc tenho certeza que foi vc que deu intrevista para o cqc na materia dos hackers la vc que editou o site do governo la certeza !!!!!!!!

    • Lucas Peperaio

      haha! não foi eu não cara, ainda não estou tão famoso assim kk

  7. Jorge

    Amigo você poderia me Falar Se os metodos Sql injection Funcionam em blog’s? o.O

    • Lucas Peperaio

      Em 99% não, pois os maiores softwares de blog (WordPress e Blogger) são protegidos naturalmente. Só é possível explorar falhas de plug-ins mau programados.

      • Jorge

        Então como pegar o dominio do blog e modificar..?

        existe alguns metodos? sem ser o de pegar o Email e senha do Google?

        Obrigado!!!

  8. Diego

    Bom dia, pelo que vi o script nao testa if (!get_magic_quotes_gpc()) { $str = addslashes($str); }

    isso nao seria um problema?

  9. Cesar

    Legal kra, mto bom mesmo… Mas seu numero ali… 20% dos sites tem Bind Sql… eu acho q é um pouco mais que 20%, não que eu fiquei procurando sites vul, mas a maioria dos sites que eu faço um scan para simples estudo ou para consultoria, tem blindsql depois de uns 4000 pacotes… pois como vc falou, é um sql que não tem uma resposta de erro… e mtas vezes o desenvolvedor nem se atem a esse detalhe… Na minha opnião, mudaria esse numero de 20% para 40% dos sites que utilizam php+conexao com banco. Enfim, mto bom seu artigo… parabens…

  10. Noob

    Quando eu for da o GET, eu coloco: $variavel = protect( $_GET[‘id’] ); por exemplo??

  11. Lucas

    Amigo esse codigo esta atualizado?

  12. kiko

    Excelente dica, segurança nunca é demais!

  13. Daniel

    Olá,

    Você pode enviar este vídeo p/ meu e-mail, o qual eu utilizei neste comentário?

    Porquê ele esta indisponível no youtube, parabéns pelo site e Obrigado!

  14. Jeferson Fernandes

    Ola amigo, li o seu artigo sobre blind sql , achei muito legal e vim aqui pedir uma ajuda sua se for possivel Vou academico de TADS da faculdade Unic, estou levantando a documentação do meu tcc para desenvolver uma ferramenta de analise de vulnerabilidade.

    Voce poderia me indicar algum livro para isso,