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 kukamax
      Bom dia, alguém me indicaria alguma biblioteca para imprimir do laravel direto para uma impressora terrmica Bermatech MP-2800 TH.
    • By Danado_
      Galera estou com uma dúvida!
      como eu posso pular linha dentro de um while da seguinte forma:
      $contato = '5';
       
      id: 1
      id: 2
      id: 3
      <br>
      id: 4
      id: 5
      <br>
       
      como eu monto essa logica?
       
      while(){ if(){} }  
    • By KABEst
      boa noite, é meu primeiro post aqui, eu preciso de ajuda pra colocar um "churrascômetro" no meu site do wordpress, nao tenho noçao nenhuma de como fazer isso, alguem pode me dar um norte? é pra um trabalho da faculdade. obrigado

      exemplo de como eu quero fazer:
      http://www.epa.com.br/churrascometro/
    • By tiagosp
      Em uma classe, tenho um método que realiza o select no sql, até o momento funciona com requisições que solicitam uma única linha, porém quando é solicitado todas as linhas, ele retorna apenas o primeiro registro contido no MySQL.
      <?php class SQL { private $SQLUsuario = "root"; private $SQLSenha = ""; private $SQLHost = "127.0.0.1"; private $SQLBD = "database1"; public function SQLSelecionar($Comando){ #Executa o comando Select no SQL $Conn2 = mysqli_connect($this->SQLHost, $this->SQLUsuario, $this->SQLSenha, $this->SQLBD); $resultado = mysqli_query($Conn2, $Comando); if (mysqli_num_rows($resultado) > 0){ return mysqli_fetch_assoc($resultado); } else{ #Select retornou sem resultado(s) return null; } mysqli_close($Conn2); } }  
×

Important Information

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