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 alisonalves
      Boa tarde Pessoal. Meu site passou por uma nova reestruturação e algumas páginas mudaram de nome e outras antes eram ".html" e agora são ".php". Acontece que muitas dessas páginas antigas são bastante visitadas e eu não queria perder a visitação delas. Vou dar um exemplo. Tenho uma página chamada carros_minas-gerais.html que passará a ser chamar carros_minas-gerais.php. Como faço para esta página antiga não perder visitação? Pensei em mantê-la com um redirecionamento para a página nova via "refresh". E com o passar do tempo quando estas páginas antigas perderem visitação eu as deletaria. Está certo meu raciocínio ou não? Valeu
    • By AndersonWS
      Tenho um código que aparentemente estaria certo porém ele "trava" e  não mostra os resultados.
      Creio que o problema está na parte de "buscar" o json apenas.
      Segue o código:
      <style>.carregando{color:#666;display:none;}</style> <div class="col-md-7"> <label for="empreendimento">Escolha o empreendimento</label> <select name="empreendimento" class="form-control" required="" id="empreendimento"> <option value="">-- Escolha um empreendimento --</option> <?php $sqlVs = "SELECT `id`,`nm` FROM `empreend` WHERE `dis`='1' ORDER BY `nm` ASC"; $queryVs = mysqli_query($link, $sqlVs); $total = mysqli_num_rows($queryVs); if ($total > 0){ while($r = mysqli_fetch_array($queryVs)){ $id = $r['id']; $nm = $r['nm']; echo '<option value="'.$id.'">'.$nm.'</option>'; } } else { echo '<option value="0">Não há empreendimentos disponíveis</option>'; } ?> </select> </div> <div class="col-md-5"> <label for="unidades">Unidade</label> <span class="carregando">Aguarde, carregando...</span> <select name="unidades" id="unidades" class="form-control" required=""> <option value="">-- Escolha uma unidade --</option> </select> </div> <script src="http://www.google.com/jsapi"></script> <script type="text/javascript"> google.load('jquery', '1.3'); </script> <script type="text/javascript"> $(function(){ $('#empreendimento').change(function(){ if( $(this).val() ) { $('#unidades').hide(); $('.carregando').show(); $.getJSON('ajax/busca_emp.php?search=',{empreendimento: $(this).val(), ajax: 'true'}, function(j){ var options = '<option value=""></option>'; for (var i = 0; i < j.length; i++) { options += '<option value="' + j[i].id + '">' + j[i].nm + '</option>'; } $('#unidades').html(options).show(); $('.carregando').hide(); }); } else { $('#unidades').html('<option value="">– Escolha um empreendimento –</option>'); } }); }); </script> if(!empty($_GET["search"])) { $empreendimento = trim($_GET["search"]); $empreendimento = mysqli_real_escape_string($link, $empreendimento); $unidades = array(); $sqlVs = "SELECT `id`,`nm` FROM `empreendimento` WHERE `id`='$empreendimento' ORDER BY `nm` ASC"; $queryVs = mysqli_query($link, $sqlVs); $total = mysqli_num_rows($queryVs); if ($total > 0){ while($r = mysqli_fetch_array($queryVs)){ $unidades[] = array( 'id' => $r['id'], 'nm' => $r['nm'], ); } } echo( json_encode( $unidades ) ); } else { echo 'vazio'; } Ele trava e fica apenas mostrando:
      Aguarde, carregando...
       
      Olhei o json e ele está recuperando:
      [{"id":"1","nm":"Condominio"}]
    • By Augusto Developer
      Olá, Developers.
      Bom, estou tentando somente colocar uma cor (um círculo - CSS) , em cada número que esta vindo do banco de dados, e até agora sem sucesso. Não estou usando FUNÇÃO, e somente coisa básica com PHP.
       
      Estou com duvida de colocar isso, com PHP, pois ja fiz com implode, explode e ate mesmo outros. Eu só preciso mesmo deixar cada número com cor separadamente, se vocês puderem me ajudar eu agradeço, pois o que voces verá aqui é a Cartela final para impressão de um Bingo.
       
      Esse aqui é onde eu tenho minha Conexão(Leitura do Banco), e  dou um echo, percorrendo o foreach, codigo abaixo para visualização.
      Obs: Código que esta aqui, ja é a versão que gera o DomPDF. - Ja esta funcionando.
       
      Segue a imagem, como esta a estrutura ate o momento.
      Código abaixo, para melhor analise.
       

       
       
      <?php     include '../conexao/load.php';     require_once  '../plugins/phpqrcode/qrlib.php';       ob_start();     session_start(); ?>       <style>         table{             width: 100%;             border: 1px solid #555;             margin: 0;             padding: 0;         }         th {             text-transform: uppercase;         }           table, th, td{             border:  1px solid #555;             border-collapse: collapse;             text-align: left;             padding: 10px;         }           tr:nth-child(2n+0) {             background: #eee;         }           .banner{               display: flex;             justify-content: center;            }           .imagem{         margin: 0 300px;         text-align: center;         }           .text-gerado{             text-align: center;             background-color: #2dce89;             margin: 0 180px;             font-size: 16px;             padding: 10px;             margin-top: -20px;               }           .numbers_generators{             display: flex;             justify-content: center;              align-items: center;            }           .circulo{             width: 100px;             height: 100px;             border-radius: 50%;              background-color: red;             margin: 50px;         }     </style>       <?php         $read = Conexao_Find("SELECT * FROM cartela WHERE status_cartela = 'Aguardando pagamento' ORDER BY id_cartela");         if($read){             $mostrarResultado = [];             foreach ($read as $key => $print):                 $mostrarResultado[$key] = str_split($print['numbers_generators'], 2);                      //echo "<pre>", var_dump($print) ,"</pre>"                   ?>       <table class="table">         <tr>             <th><span class="badge badge-secondary">APOSTADOR INDIVIDUAL</span></th>         </tr>           <tr>             <td>                 <img alt="Image placeholder" src="../assets/img/theme/concurso.jpeg" class="img-fluid rounded" style="width: 710px; height: 300px;">              </td>              </tr>           <tr>             <td>                 <?php                      $user_id = $_SESSION['userlogin']['user_id'];                     $dadosuser = Conexao_ReadAll('user',"WHERE user_id = " . (int)$user_id );                     $dadosuser = $dadosuser['0'];                     //$userlogin = $user['0'];                                      $path = '../images/';                     $file = $path.uniqid()."png";                       $text = "Empresa: PARÁ BINGO DA SORTE";                     $text .= "Nome Jogador: '" . $dadosuser['user_name'] ."'";                     $text .= "Email: '" . $dadosuser['user_email'] ."' ";                     $text  .= "Fone: '" . $dadosuser['user_phone'] ."' ";                       QRcode::png($text, $file, 'L', 2, 2);                     echo "<p class=\"banner\"><img class=\"imagem\" src='". $file ."'></p>";                 ?>                   <p class="text-gerado">JOGO GERADO - <b>CARTELA #<?= $print['cod_reference']; ?></p>             </td>         </tr>           <tr>             <td>                 <span class="numbers_generators"><b><?= implode(" - ", $mostrarResultado[$key]); ?></b></span>             </td>         </tr>     </table>       <?php endforeach; } ?>  
       
       
       
       
       
    • By ViniciusRamoa
      Eu peguei um site já pronto em laravel, minha ideia era só pegar o site que o cara distribuiu e mudar layout aos poucos para se adaptar para mim, eu sei, digamos, o intermediário de css e básico de Php e html, e o que eu quero alterar é só o básico como: cores, background e etc, mas mesmo eu alterando os arquivos css ou até mesmo apagando todos os arquivos css, NADA muda no site, como se fosse inútil os arquivos css, mudar a aparência no laravel é diferente? Qual o método?
      Vale lembrar que possui vários arquivos .blade (index.blade, footer.blade etc), isso tem algo a ver? Obrigado
×

Important Information

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