Como funciona um ataque por 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
Tenho 22 anos, sou estudante de Ciência da Computação, trabalho com desenvolvimento web há 6 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.

Lucas que post bacana vlw mesmo pelo tutorial e por mostrar o problema e a solução.
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
Assunto muito importante, vou ficar mais atento a isto.
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.
No meu caso não funcionou, testei com a ferramenta sqlmap e o site continuou vulnerável.
Gleidson, atualizei o código da função, tente novamente
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 !!!!!!!!
haha! não foi eu não cara, ainda não estou tão famoso assim kk
Amigo você poderia me Falar Se os metodos Sql injection Funcionam em blog’s? o.O
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.
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!!!
Bom dia, pelo que vi o script nao testa
if (!get_magic_quotes_gpc()) {
$str = addslashes($str);
}
isso nao seria um problema?
Seria um complemento a função.