Jump to content
AnthonyKamers

Site "exploited"/"hacked" pelo SQL PHP

Recommended Posts

Olá

Fiz um site e ao pôr online, depois de duas semanas ele foi "hackeado"/"exploited".

 

Uso MySQLI para me conectar pelo banco de dados e descobri que é só quando eu uso 

"SELECT * FROM"

e eu uso a variável, que o exploit se "instala".

 

Como no seguinte código:

$sql4 = mysqli_query($con, "SELECT * FROM ... WHERE ... != '1' ORDER BY RAND() LIMIT 1") or die(mysqli_error($con));
$ln4 = mysqli_fetch_assoc($sql4);
$teste = $ln4['teste'];

 

Quando eu coloco "echo" na variável $teste, o exploit "começa".

 

Mas se eu não me conectar com o banco de dados, o exploit não funciona.

 

Há como evitar isso?

Não uso prepared statement, se eu usá-lo, não poderá mais ser hackeado?

 

Como posso eviar isso?

 

Conto com a ajuda de todos.

 

Desde já agradeço

Share this post


Link to post
Share on other sites

Você tento usar uma fuction SQL FILTER

 

 

function SqlFilter($str)
{
    if (!is_numeric($str)) {
        $str = get_magic_quotes_gpc() ? stripslashes($str) : $str;
        $str = function_exists('mysql_real_escape_string') ? mysqli_real_escape_string($str) : mysqli_escape_string($str);
    }
    return trim($str);
}

 

METHOD POST você chama SQL FILTER para escape string

 

exemplo:

 

 

<?php 

$nome = $_POST["nome"];

// você usa 

$nome = SqlFilter($_POST["nome"]);

// ou tenta 

$nome = addslashes($_POST["nome"]);

?>

 

Share this post


Link to post
Share on other sites

Eu nem estou dando POST para pegar os resultados, pois estou quero listar todos os resultados do DB.

 

Dessa forma, eu não preciso usar.

 

Mas o problema é quando eu uso mysql ou mysqli, aí entra a tela de exploit:

 

Share this post


Link to post
Share on other sites

Usei o seguinte código com prepared statement:

<?php
	$idDif="1";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
$link = new PDO("mysql:host=$host;dbname=$db", "$user", "$pass", $options);
$stmt = $link->prepare("SELECT * from `teste` WHERE idTeste!=?");
$stmt->execute([$idDif]);
$result = $stmt->fetchAll();

foreach ($result as $row):
?>

<h2 style="text-align:center;margin:0 auto">
    <?=$row["nomeTeste"]?>
</h2>
<br/>
<div>
    <p>
        <?=$row["valorTeste"]?>
    </p>
    <hr style="color:black;width:10%"/>
</div>

<?php endforeach;?>

e mesmo assim, o exploit continua.

 

Não sei como fizeram para inserir dados no servidor e quando eu acesso meu banco de dados ele bloqueia.

 

 

Como posso resolver?

Share this post


Link to post
Share on other sites

pode ser que seja suspeita de invasão ou de site malicioso ou pode ser seu ip que tá bloqueado, tem um site que controla isso e se for esse o caso tu pode solicitar desbloqueio clicando num link que aparece na tela nesses caso mas tem que ter certeza se é isso porque se tiver um link malicioso ferra mais ainda

Share this post


Link to post
Share on other sites

Não foi hackeado. Se está exibindo apenas quando você retorna no banco de dados, apenas está no seu banco de dados.

O nome disso é XSS, você precisa retirar os códigos antes de salvar algo no banco de dados.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By borgeskey
      Boa tarde, estou com um probleminha ao retornar uma consulta quando clica na noticia...
       
      a página retorna em braco, veja o código.

      <?php $variables = (strtolower($_SERVER['REQUEST_METHOD'])== 'GET') ? (isset($_GET)) : $_POST; foreach ($variables as $k=> $v); $$k=$v; $tabela1 = "noticias"; $tabela2 = "users"; $tabela3 = "cidades"; $file = "$tabela1"; if($acao == "ver"){ $busca = "SELECT * FROM $tabela1 WHERE id='$id'"; $views = mysqli_query($conexao, "SELECT cont FROM noticias WHERE id=$id"); while($nt = mysqli_fetch_assoc($views)){ $count = $nt['cont'] + 1; } mysqli_query($conexao, "UPDATE noticias SET cont=$count WHERE id=$id "); $sql = mysqli_query($conexao, $busca); $dados = mysqli_fetch_array($sql); $data1 = strftime("%d/%m/%Y às %Hh%M", strtotime($dados['data'])); $data2 = strftime("%d/%m/%Y às %Hh%M", strtotime($dados['data2'])); $data = "$data1 - Atualizada em $data2";  $sql2 = "SELECT * FROM $tabela2 WHERE id='$dados[id_user]'"; $sql2 = mysqli_query($conexao, $sql2); $dados2 = mysqli_fetch_array($sql2); $dadosc = mysqli_fetch_array(mysqli_query($conexao, "SELECT * FROM noticias_cat where id='$id_cat'")); $sql3 = "SELECT * FROM $tabela3 WHERE id='$dados2[id_cidade]'"; $sql3 = mysqli_query($conexao, $sql3); $dados3 = mysqli_fetch_array($sql3); $contatamanho = strlen($dados['subtitulo']); if(empty($quantidade)){ $quantidade = 30; } if($contatamanho > $quantidade){ $subtitulo = substr_replace($dados['subtitulo'], "...", $quantidade, $contatamanho - $quantidade); } else { $subtitulo = "$dados[subtitulo]"; } $categoriasbt = amigaveis("$dadosc[nome]"); $categoria = str_replace($subst1, $subst2, $categoriasbt); $sql3 = "SELECT * FROM $tabela3 WHERE id='$dados2[id_cidade]'"; $sql3 = mysqli_query($conexao, $sql3); $dados4 = mysqli_fetch_array($sql3); echo $id; ?> <title><?=$dados['titulo']?> - <?=$tsite?></title> <script type='text/javascript' src='<?=$usite?>galery/1.js?ver=1.11.1'></script> <script type='text/javascript' src='<?=$usite?>galery/2.js?ver=1.2.1'></script> <script type='text/javascript' src='<?=$usite?>galery/3.js?ver=1.3.14'></script> <link rel='stylesheet' id='colorbox-theme1-css'  href='<?=$usite?>galery/galeria.css?ver=1.3.14' type='text/css' media='screen' /> <script type="text/javascript"> // <![CDATA[ jQuery(document).ready(function($){ $(".gallery").each(function(index, obj){ var galleryid = Math.floor(Math.random()*10000); $(obj).find("a").colorbox({rel:galleryid, maxWidth:"95z%", maxHeight:"95%"}); }); $("a.lightbox").colorbox({maxWidth:"95%", maxHeight:"95%"}); }); // ]]> </script> <style> .tooltip:before { border: 10px solid #<?=$categoria?>; border-right-color: #ffffff; content: ""; left: -20px; position: absolute; } </style> <div id="pos-conteudo-not2"> <div id="top-box-notc2"> <p style="color: #<?=$categoria?>; font-size: 25px; margin-bottom: 2px; "><b><?=$dadosc['nome']?></b></p> <div style="position: absolute;width: 50px;border-bottom: 5px solid #<?=$categoria?>;"></div> </div> <div id="posic-noticia2"> <p><span style="color: #999999; font-size: 12px;"><?=$data?></span></p> <p><span style="font-size: 32px; color: #000000;"><?=$dados['titulo']?></span></p> <div id="box-info2"> <div id="pos-autor"> <div id="pos-autor2"> <img style="border-radius: 50px; position: absolute; width: 62px; height: 62px; background: #<?=$categoria?>;" width="62" height="62" src="<?php if($dados2['imagem'] != "") { echo "".$usite."images/users/$dados2[imagem]"; } else { echo "".$usite."thumbs.php?w=62&h=62&imagem=img/sem-foto.jpg"; } ?>"/> </div> <div style="margin-left: -27px;float: right;padding: 2px 20px 2px 34px;height: 15px;background: #<?=$categoria?>;color: #ffffff;font-size: 13px;"> <?="$dados2[nome]";?><div id="toltip"><div class="tooltip"></div></div> <div id="pos-autor4"><?="$dados4[nome]";?> - <?="$dados4[estado]";?><div id="toltip"><div class="tooltip2"></div></div></div> </div> </div> <div id="pos-bt-social"><div class="a2a_kit a2a_kit_size_32 a2a_default_style"> <a class="a2a_button_whatsapp" href="https://www.blogger.com/null"></a> <a class="a2a_button_facebook" href="https://www.blogger.com/null"></a> <a class="a2a_button_twitter" href="https://www.blogger.com/null"></a> <a class="a2a_button_google_plus" href="https://www.blogger.com/null"></a> <a class="a2a_dd" href="http://www.addtoany.com/share_save"></a> </div> </div> <?php if($dados['creditos_fotos'] != "") {echo"<div id='fonte-crdt'><b>FONTE:</b> $dados[creditos_fotos]</div>";}else{echo "";}?> </div> <div id="pos-text"> <?php  $pixel = "px"; $alinhara = ($dados['alinhamento_foto']=="R")?"right":"left"; $larguraG = ($dados['largura_foto']=="")?"400":"$dados[largura_foto]"; $alturaG = ($dados['altura_foto']=="")?"h=":"h=$dados[altura_foto]"; if($dados['foto'] != "") { echo " <style> div.figura { float: left; margin-right: 10px; } div.figura p { padding: 0px 0px 10px 0px; text-align: left; font-size: 13px; width: $larguraG$pixel; color: #000000; text-indent: 0; } </style> <div class='figura'> <p><img src='".$usite."thumbs.php?w=$larguraG&h=$alturaG&imagem=images/$tabela1/$dados[id]/$dados[foto]' width='$larguraG' title='$dados[titulo]'>"; ?> <p><em><?php echo "$dados[descricao_foto]"; ?></em></p> </div> <?php }else { echo ""; } ?> <?php $texto1 = "$dados[texto]"; $texto2 = str_replace('', "", "$texto1"); $texto3 = str_replace('', "", "$texto2"); echo nl2br($texto3); ?> <div id='gallery-1' class='gallery galleryid-2684 gallery-columns-3 gallery-size-thumbnail'><?php if ($fotos == "S"){ if ($dados['fotos_extras'] == "S"){ echo "<br><br><p><span style='font-size: 13px;'><span style='color: #$categoria;'>CLIQUE NAS IMAGENS PARA AMPLIAR:</span></span></p>"; $wh1 = "WHERE id='$id' "; $busca = "SELECT * FROM $tabela1 $wh1 ORDER BY data desc"; //echo "$busca<br>"; $sql = mysqli_query($conexao, $busca); $total = mysqli_num_rows($sql); $dados = mysqli_fetch_array($sql); $dir = "images/$tabela1/$id/"; //echo $dir; $dirhandle = opendir($dir); $fotos = array(); while ($file = readdir($dirhandle)) { $files = $file; $arr_basename=explode(".",$files);  $file_type=strtolower("$arr_basename[1]"); //if ($file_type == "jpg"){ if($file_type == "jpg" && $file != "$dados[foto]"){  $fotos[] = $files; } } closedir($dirhandle); sort($fotos); for($i=0;$i<count($fotos);$i++){ // para exibir em ordem alfabética //for ($i=count($fotos);$i>0;$i--){ // para exibir em ordem alfabética inversa echo "<dl class='gallery-item'> <dt class='gallery-icon landscape'> <a href='../../$dir$fotos[$i]'><img width='100' height='80' src='../../$dir$fotos[$i]' class='attachment-thumbnail' alt='images' /></a> </dt></dl>"; } } } ?> </div></div> <p style="margin-top: 10px;"><span style="font-size: medium;"><strong>ESTA MAT&Eacute;RIA FOI VISTA <span style="color: #<?=$categoria?>;"><?=$count?></span> VEZES</strong></span></p> <p style="margin-top: 20px;"><span style="font-size: x-large; color: #888888;">Coment&aacute;rios</span></p> <div id="mais-noticias"><div class="fb-comments" data-href="<?=$usite?>noticia/<?=$id?>/<?echo amigaveis($dados[titulo]);?>.html" data-width="700" data-numposts="5" data-colorscheme="light"></div></div> <p style="margin-top: 20px;"><span style="font-size: x-large; color: #888888;">Veja tamb&eacute;m</span></p> <div id="mais-noticias"><?php $limite2 = 3; $cor = "$categoria"; $idcat = $dados[id_cat]; $colunas = 1; $qt_letras1 = 160; $qt_letras2 = 160; $palavra = "Not&iacute;cias"; $link_page = "not&iacute;cia"; $link_page2 = "?pg=noticias"; $img_thumb = "S"; $paginacao = "N"; $ordem = "order by data desc"; $acao = "ultimas_noticias"; include "estrutura/noticias/exibe.php"; ?></div> </div> </div> <?php }?>
       
      estou utilizando php 5.6
    • By CyrusSouza
      Olá a todos.
       
      Estou com um problema na abertura de imagem quando a pasta está em outro servidor. Aparece uma ? no lugar da imagem, mesmo usando file_exists("Z:/img.jpg") que diz que reconheceu o arquivo. Este é o caminho para abrir:  echo '<img src="\\\\192.168.0.113\\images\\img.jpg" />'; .
      Foi mapeado a rede usando este comando no php : system("net use Z: \\\\192.168.0.113\\images images /user:images") funcionou tudo certo e  no iexplorer 9  a imagem aparece correto, mas nos outros navegadores (chrome, firefox, safari) não tem como, somente aparece "?' no lugar da imagem. Já inverti as barras (assim  \  ou assim /) não vai,  somente o iexplorer 9 aceita até invertendo
      exemplo  1: echo '<img src="\\\\192.168.0.113\\images\\img.jpg" />'; * No ie 9 tudo certo também sempre após mapear rede. Teste é feito com windows 7 ie9.
       
      exemplo 2:  Funciona somente no ie9 
       
            $teste1="Z:/img.jpg"; 
       
             if (file_exists($teste1)) {
                           echo "O arquivo existe : ".$teste1."<br>";
                           ?> 
                               <A href="rxnew.php"><img src="\\192.168.0.113\images\img.jpg" /></div>   <?php
                               }
                                     else {
                                            echo "O arquivo não existe";
                                          }
                   
       Agradeço se alguém me ajudar.
    • By gramosiri2
      Olá, estou tentando visualizar uma receita utilizando um modal.
      O problema é que não consigo passar os dados de acordo com o id selecionado.
      Ao clicar no botão de visualizar, mostra apenas o primeiro registro da consulta.
      Gostaria de um help, visualizar a consulta de acordo com o registro.
      Obrigado.
       
      Segue o codigo:
       
      <table class="table table-bordered tabela" id="receita2" width="100%" cellspacing="0"> <thead> <tr> <th>COD.</th> <th>Data Receita</th> <th>Nome Receita</th> <th>Categoria</th> <th>Visualizar</th> <th>Editar</th> <th>Deletar</th> </tr> </thead> <tfoot> <tr> <th>COD.</th> <th>Data Receita</th> <th>Nome Receita</th> <th>Categoria</th> <th>Visualizar</th> <th>Editar</th> <th>Deletar</th> </tr> </tfoot> <tbody> <?php while($linha = mysqli_fetch_array($consulta_receita)){ echo '<tr><td>000'.$linha['id_receita'].'</td>'; echo '<td>'.$linha['data_receita'].'</td>'; echo '<td>'.$linha['nome_receita'].'</td>'; echo '<td>'.$linha["nome_categoria"].'</td>'; ?> <!-- MODAL --> <!-- ----------------------- --> <?php echo '<div id='.$linha["id_receita"].'>';?> <div class="modal fade" id="visuReceitaModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalLabel">Receita</h5> <button class="close" type="button" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div class="modal-body"> <?php echo '<p><span class="visuReceita">Data de criação: </span>'.$linha['data_receita'].'</p>'; echo '<p><span style="font-weight: bold;">Nome da receita: </span>'.$linha['nome_receita'].'</p>'; echo '<p><span style="font-weight: bold;">Categoria: </span>'.$linha['nome_categoria'].'</p>'; echo '<br>'; ?> <h5 class="modal-title" id="exampleModalLabel">Ingredientes</h5> </div> <div class="modal-footer"> <button class="btn btn-secondary" type="button" data-dismiss="modal">Fechar</button> </div> </div> </div> </div> </div> <!-- Fim MODAL --> <!-- ----------------------- --> <td><?php echo '<a class="btn btn-primary" href="#'.$linha['id_receita'].'" data-toggle="modal" data-target="#visuReceitaModal"><i class="fas fa-fw fa-eye"></i></a>'; ?></td> <td><a class="btn btn-warning" href="?pagina=inserir_receita&editar=<?php echo $linha['id_receita']; ?>"><i class="fas fa-fw fa-edit"></i></a></td> <td><?php echo "<a class='btn btn-danger' href='deleta_receita.php?id_receita=" . $linha["id_receita"] . "' data-confirm='Tem certeza de que deseja excluir o item selecionado?'>";?><i class="fas fa-fw fa-trash"></i></a></td></tr> <?php } ?> </tbody> </table>  
    • By JonasFloripa
      Boa tarde pessoal,
      Estou atualizando um sistema de comunicação interna e hoje ele primeiro cadastra a CI, depois abre e anexa todos os documentos pedidos. É feito desta forma por cada CI gera uma pasta como o ID dele e dentro desta pasta fica os arquivos anexados a esta CI.
      Eu gostaria de fazer pra que na hora que elaborar a CI eu pudesse anexar vários arquivos e uma única vez, mas esses arquivos deveriam ficar dentro de uma pasta com o id da CI como anterior.
      Os exemplos que estou achando, todos colocam todos os arquivos dentro de um único diretório. Minha preocupação é quando for abrir uma CI em meu nome, ele carregue arquivos de outra CI.
      Como faço isso, jogando todos os arquivos dentro desse diretório, sendo que o ID da CI não foi gerado ainda porque não realizei o cadastro da mesma ainda.
       
      Obrigado
    • By ejmachado
      Olá, tudo bem?

      Tenho o seguinte select no mysql que está retornando exatamente o que preciso. Porém, na hora de exibir no site os dados não aparecem o que preciso.
      select * from evento_atirador EVATIRADOR inner join evento EVE on EVATIRADOR.evento=EVE.evento inner join evento_local EVALOCAL on EVALOCAL.evento=EVE.evento inner join clube CLUBE on EVALOCAL.clube=CLUBE.clube where EVATIRADOR.atirador=4241 group by evento_atirador;  
      <?php $sql = mysqli_query($this->conexao, "select * from evento_atirador EVATIRADOR inner join evento EVE on EVATIRADOR.evento=EVE.evento inner join evento_local EVALOCAL on EVALOCAL.evento=EVE.evento inner join clube CLUBE on EVALOCAL.clube=CLUBE.clube where EVATIRADOR.atirador='".$idAtirador."'group by evento_atirador;"); $visualizar = "<table width=\"100%\" border=\"1\" cellpadding=\"0\" cellspacing=\"0\">"; $visualizar .= "<tr>"; $visualizar .= "<td style='text-align: center'>Local</td>"; $visualizar .= "<td style='text-align: center'>Data Início</td>"; $visualizar .= "<td style='text-align: center'>Data Término</td>"; $visualizar .= "<td style='text-align: center'>Prova</td>"; $visualizar .= "</tr>"; while($ctcb = mysqli_fetch_object($sql)){ //Esse trecho de código traz dados de uma outra tabela. $sqlProva = mysqli_query($this->conexao,"SELECT * FROM evento_prova EVPROVA INNER JOIN prova PRO ON EVPROVA.prova = PRO.prova WHERE EVPROVA.evento_prova = '".$ctcb->evento_prova."'"); $ctcbProva = mysqli_fetch_object($sqlProva); list($anoI,$mesI,$diaI) = explode("-",$ctcb->data_inicio); $dataInicio = $diaI.'/'.$mesI.'/'.$anoI; list($anoT,$mesT,$diaT) = explode("-",$ctcb->data_termino); $dataTermino = $diaT.'/'.$mesT.'/'.$anoT; $visualizar .= "<tr>"; $visualizar .= "<td style='font-size: 13px'>".$ctcb->nome."</td>"; $visualizar .= "<td style='font-size: 13px'>".$dataInicio."</td>"; $visualizar .= "<td style='font-size: 13px'>".$dataTermino."</td>"; $visualizar .= "<td style='font-size: 13px'>".$ctcbProva->nome."</td>"; $visualizar .= "</tr>"; } $visualizar .= "</table>"; return $visualizar; } ?>
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.