Vulnerabilidade em Auto Surfs por SQL Injection
Autor: Marcelo E. Schinaecher | Publicado: 2012-12-23T15:04:00-02:00




Olá amigos!
Venho hoje trazer para vocês algo que vai deixar muito dono de auto surf com o cabelo em pé!
Há alguns meses atrás com a ajuda de um amigo e parceiro de auto surf, descobrimos uma terrível falha de segurança em scripts de auto surfs.
TODOS OS AUTO SURFS, EU DISSE TODOS!
Que possuam sistema de rotação de banner com link de redirecionamento desta forma:
http://seusite/banner.php?action=r&amp;id=(id do banner) possuem vulnerabilidade a SQL Injection.
Infelizmente o programador que criou o arquivo original, deixou algumas brechas de segurança no script, permitindo que com programinhas medíocres seja possível explorar todo o banco de dados do site e obter senhas e o que mais o invasor desejar.
E aí ficou de cabelos em pé? Eu também fiquei! pois afinal meu site também tinha este problema e eu desconhecia!
Pois bem, eu não poderia deixar tudo como está e correr riscos.
Reescrevi o sistema de banners rotativos com as devidas medidas preventivas e filtros para barrar este tipo de invasão.
Mas como se trata de algo tão sério.. não posso ficar só pra mim e deixar que meus colegas administrem seus auto surfs a dura sorte como eu fiz a mais de 3 anos.
Estou compartilhando com vcs o script modificado junto com as modificações necessárias:
O download pode ser efetuado logo abaixo.
Outra vantagem está no tamanho do arquivo, sendo que o original ocupava cerca de 7 KB ou mais.
Esta nova versão não passa de míseros 700 bytes significando menor consumo de banda de seu site, simplicidade e maior segurança aliados. 

Importante: o sistema de banners antigos era chamado por java script no site (na páginas: header.php, ptcbar.php, surfbar.php, headermem.php)
Após esta modificação o sistema funciona apenas via include. Portanto é necessário pequenas alterações nas páginas acima citadas. veja abaixo o que precisa fazer:
Baixe o anexo abaixo e envie para seu diretório principal.

Em header.php e headermem.php

Antigamente era assim:

&lt;div id="divbanner"&gt;
&lt;script language="JavaScript" src="/banner.php?style=non_ssi"&gt;&lt;/script&gt;&lt;/div&gt;
Você deve deixar assim: 

&lt;div id="divbanner"&gt;
&lt;? include ("banner.php")?&gt;&lt;/div&gt;


Em surfbar.php

Antigamente era assim:

echo("&lt;/font&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width=\"50%\"&gt;&lt;div align=\"center\"&gt;$surf_ban_rotator&lt;br&gt;&lt;font size=1&gt; Usu&amp;aacute;rio #&lt;b&gt;" . ......resto do código não importante para nós
$surf_ban_rotator&nbsp; Este carinha fazia a chamada do arquivo banner.php

Você deve deixar assim:


echo("&lt;/font&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width=\"50%\"&gt;&lt;div align=\"center\"&gt;");
include ("banner.php");
echo("&lt;br&gt;&lt;font size=1&gt; Usu&amp;aacute;rio #&lt;b&gt;" .  ......resto do código não importante para nós
include ("banner.php");&nbsp;&nbsp;&nbsp; Este é o novo carinha. Observe que tive que cortar o "echo" em duas partes para adicionar o include e apenas o $surf_ban_rotator foi removido nada mais! 

Em bars.html&nbsp; e&nbsp; bars_done.html
Apenas remova o trecho abaixo pois o mesmo é responsável por mostrar o banner na página de ptc 

&lt;script language='JavaScript' src='/banner.php?style=non_ssi'&gt;&lt;/script&gt;

Em ptcbar.php

Você precisa criar uma tabela logo abaixo de: echo($ptcbarhtmla); e 
echo($ptcbarhtmlb);



Cole este código abaixo do código citado acima:

echo("&lt;table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\"&gt;&lt;tr&gt;&lt;td width=\"31%\"&gt;&lt;div align=\"center\"&gt;");
echo("&lt;/font&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width=\"50%\"&gt;&lt;div align=\"center\"&gt;");
include ("../banner.php");
echo("&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;");
Nossa página de surf:
&nbsp;Se vc usa recursos de surfar sem logar.. é óbvio que a url de surf capture dados via $_GET do PHP.
isso significa que se seu script não tiver um bom sistema de proteção, ele também é um alvo fácil:
Este é um exemplo do que usamos para filtrar o id do usario passado pela url.

$usrid = $_GET['user'];
$usrid = mysql_real_escape_string($usrid);
$usrid = preg_replace( '/([%_])/u', '\\\\$1', $usrid );
$usrid = preg_replace("/[^0-9]/","", $usrid);
Confesso que é um pouquinho de exagero kkkkk mas nunca é demais!

Evite que suas páginas de surfar sem logar e logout.php sejam inseridos em outros sites para derrubar seus surfistas!
Insira nas primeiras linhas dentro destas páginas e outras que vc não queira que sejam aberta em iframes:

&lt;script type="text/javascript"&gt;
if (window.location != window.top.location) {
&nbsp;&nbsp;&nbsp; window.top.location = window.location;
}
&lt;/script&gt;


UFA!!!!!!!!!! Achou demais meu filho? Pois bem acredite em mim! Você vai achar bem pior se um dia alguem avacalhar contigo e acabar com seu trabalho que vc deve ter levado anos para fazer.
Então&nbsp; por mais foda e cansativo que seja, se é por motivo de segurança e proteção de seu trabalho... nenhum esforço é o bastante ok! Pense que com isso vc estará mais protegido e evitando dores de cabeça futuras.

*** Antes de aplicar qualquer alteração em seu script sempre efetue um backup do mesmo.
O Kebra Gaio Auto Surf faz uso destas medidas de segurança, mas não nos resposnsabilizamos por eventuais incompatibilidades em seu script.
Ao fazer alterações tenha certeza que vc sabe fazer ou peça para alguem que saiba ok!

Faça aqui o Download dos arquivos de banner corrigidos!

Caso as tabelas de seu banco de dados não possuam o mesmo nome ou colunas de nomes diferentes, vc deverá efetuar as devidas alterações. (creio que não seja necessário, mas acho que pode acontecer)