Site hackeado, como evitar ? - PHP - Portugal-a-Programar
Site hackeado, como evitar ?
Por optus, 28 de Dezembro de 2011 em PHP
Ultimamente tenho sofrido N ataques de hackers, designados como anonymous tugas. Varios dos ataques deles ja foram resolvidos... como por exemplo, conseguirem injectar um index html para o servidor.
Neste momento preciso da vossa ajuda para algo diferente.
O site esta construido com php, e segundo o ataque deles, faz com que nós, ao entrarmos no site, seja-mos redireccionados para outra página, por norma á escolha deles.
Isto acontece com uma meta tag '' <META HTTP-EQUIV="refresh" CONTENT="0;URL=http://site que eles querem"> " que eles conseguem injectar. Ja repus os ficheiros no servidor, mas continua o mesmo.
Esta tag, por norma encontra-se sempre dentro de um ciclo FOR, que gera ID's para serem passados por $_GET para outra pagina..
Ha alguma forma de conseguir remover isto do codigo ? ou seja, no que eu fiz, o codigo esta bem, e em localhost ele funciona perfeitamente, so que quando vai online, ele cria esta meta... ou seja, carrega o site, e com o refresh desta meta, ele mandanos para o outro site deles..
Alguem ja teve algum problema identico, ou alguem sabe como retificar isto ?
Simples: muda a password do ftp, porque se eles te "injectam" ficheiros é porque o fazem com uma conta de ftp
Depois verifica se não tens módulos no teu site que sejam inseguros e permitam SQL injection.
Verifica se tens problemas de XSS.
Desactiva o JavaScript no teu browser e vê se o redireccionamento continua.
Ja testei desactivar o Java-script, e continua a redireccionar.
Nao inserira mais nenhum ficheiro no servidor, porque as passwords ja foram alteradas.
Acontece exactamente igual como esta neste site : http://jf-estreito.pt/
De certeza que estás as tratar os $_GETs (por exemplo problemas de xss como o pmg referiu)? Eles são guardados permanentemente em algum lado? É que sem vermos o código em concreto é sempre difícil conseguir saber o que está mal.
não sei se estou a perceber bem..se vires o código fonte nesta altura da tua página aparece esta tag:
<META HTTP-EQUIV="refresh" CONTENT="0;URL=http://site que eles querem">?
Nao, nada disso. è assim, na programação que tenho feita está da seguinte forma:
<td><img src="gfx/noticia_destaque.gif" width="275" height="21" />
<?php if(noticias){	for($i=0;$i<1;$i++){ ?>
<span class="title-home-news">
<?=$noticiasn[$i][titulo]?>
<span class="default-text-small">Por
<?=$noticiasn[$i][autor_nome]?>
<?=substr($noticiasn[$i][data],0,10);?>
| </span> <span class="link-news"><a href="/noticias/detalhe.php?id=<?=$noticiasn[$i][id]?>">Ler Mais...</a></span>
<p> <span class="default-text">
<?=$noticiasn[$i][resumo]?>
agora, online, antes da pagina ser redireccionada, fazendo ESC para parar o load da pagina, e fazendo o atalho ctrl + u, neste mesmo sitio é-me dado o seguinte:
<META HTTP-EQUIV="refresh" CONTENT="0;URL=http://localhost.nl/stuff/flash/idiot.swf">              </span><br />
optus|
2011-11-28               | </span> <span class="link-news"><a href="/noticias/detalhe.php?id=118">Ler Mais...</a></span>
<img width="275" height="386" src="/ficheiros/conteudos/imagem.jpg" alt="" />
<div id="cookieInjectorDiv" style="display: none; position: fixed; opacity: 0.9; top: 40%; background: none repeat scroll 0% 0% rgb(221, 221, 221); left: 40%; width: 20%;">
<div align="center">Wireshark Cookie Dump:<br />
<input type="text" id="cookieInjectorCookie" /><br />
<button onclick="cookieInjector.writeCookie();">OK</button><button onclick="cookieInjector.hide();">Cancel</button></div>
</div>              </span></p>
Pois, penso que vais buscar as noticias à BD, certo? Se sim, vai lá procurar a ver se não está o meta no campo do titulo das noticias... Deveria ter sido tratado antes de ser inserido. Apesar de na minha opinião nem todos poderem inserir notícias, certo? Logo ainda deve haver outro problema de segurança em que alguém anda a introduzir noticias sem permissões provavelmente.
😲 Está mesmo no campo titulo 😲
exacto. No website que é dado acima tem lá na parte dos destaques a tag <meta HTTP-EQUIV="REFRESH" content="0; url=http://pastehtml.com/view/bi6zkii08.html">
Isto deve ter sido inserido no backoffice. É alterar as senhas de acesso ao backoffice, encontrar este registo na bd e por fim editá-lo.
Sim, tudo isto funciona por backoffice. Bem pessoal, terei de verificar entao todas as passes, e alterar as definições do campo :dontgetit:
E não deves usar as short tags do PHP, uma vez que o uso delas é desaconselhado e elas muito provavelmente deixarão de funcionar em futuras versões do PHP.
EDIT: Não é política do fórum remover os tópicos depois de resolvidos. Assim se alguém tiver uma dúvida semelhante, pode encontrar o tópico e resolver a sua dúvida. Para além do mais, a segurança de um site não é obtida através do desconhecimento do código fonte, mas sim da robustez do mesmo.
Publicado 28 de Dezembro de 2011 (editado)
regra nº x dos formlários web para disposição direta para o utilizador:
Nunca permitir que um utilizador escreva HTML diretamente para a DB. Todo o HTML precisa de 1 das seguintes coisas:
[*]Alterar todos os carateres <, & e > para o correspondente <, & e >
[*]Apagar todas as tags HTML. Procurar por < e > e apagar tudo entre cada um desses carateres.
[*]Analizar todas as tags HTML e verificar se aceitas essa tag no teu site, se acitas, tudo bem, senão aplicar o 1. ou o 2.
Exceto a short tag "<?=". Esta tag, está previsto a partir do php 5.4, estar disponível sempre e para sempre. Agora só a shorttag "<?" é que está previsto ser removida algures no futuro.