Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, então estou criando um segundo topico, pois tenho uma outra duvida, eu estava usando sqlmap para tentar invadir meu priprio site, e tentar achar vulnerabilidades, não consegui das formas que eu sei, então passei para outra etapa e usei o acunetix para verificar as vulnerabilidades do meu php, no meu site de verdade, ele não encontra vulnerabilidade de SQL Injection (a unica que quero tratar neste topico), encontra outra, (CSRF), até ai tudo bem, o problema começa quando eu rodo o acunetix no sistema que está no meu
localhost(no meu computador), ele acha inumeras vulnerabilidades, e 2 arquivos com vulnerabilidades de sql Injection, ele acha de uma forma tão pesada, que deleta o meu banco de dados, e as vezes ele inseri outros bancos de dados ao lado do meu, e torna meu sistema impossível de se conectar com o banco.
lembrando que o mesmo sistema do site, é o mesmo do meu servidor local(computador)
dados servidor do site, (IIS 7.5, mysql 5...) apache não me lembro bem, PHP 7.0.9 Orientado a Objetos com PDO
dados do servidor local (xampp mais atual) PHP 7.0.9 Orientado a Objetos com PDO
como ele acha a vulnerabilidade na index onde se faz o login, vou apresentar para vocês o codigo da index, apenas o php, e o formulario
nota-se que eu uso alguns métodos próprios para fazer verificação da entrada, e alguns nativos do php,
verificação para login
IF(ISSET($_POST['logar'])){
$nome = filter_input(INPUT_POST, 'nome' ,FILTER_SANITIZE_STRING ,FILTER_FLAG_ENCODE_AMP);
$senha = filter_input(INPUT_POST, 'senha',FILTER_SANITIZE_STRING ,FILTER_FLAG_ENCODE_AMP);
$nome = trim($nome);
$nome = limpar_stringl($nome);
$nome = addslashes($nome);
$nome = strip_tags($nome, '');
$senha = trim($senha);
$senha = limpar_stringl($senha);
$senha = addslashes($senha);
$senha = strip_tags($senha, '');
IF ($nome == "" || $senha == ""){
$errors .= "✖ Campos vasios!<br>";
}ELSE IF($nome != "" && $senha != ""){
$userPDo = new UsuarioPdo();
$dados = $userPDo->estou_banido($nome);
if($dados == TRUE){
$sessao = new Sessao();
$sessao->banSessao();
}else{
$_username = $nome;
$header = new HeaderPdo();
$_password = $header->criptografia_Hash_MD5($senha);
$usuario = new Usuario($_username, $_password);
$tentativa = new UsuarioPdo();
$logou = $tentativa->fazer_login($usuario, $_password);
IF($logou == TRUE){
$sessao = new Sessao();
$sessao->carregaSessao($logou);
}else{
$errors .="✖ Dados invalidos!";
}
}
}
}
Função utilizada no login $nome = limpar_stringl($nome);
function limpar_stringl($string){ // replace para limpar variaveis
$string = str_replace(' ','', $string);
$string = str_replace('(','', $string);
$string = str_replace(')','', $string);
$string = str_replace('[','', $string);
$string = str_replace(']','', $string);
$string = str_replace('{','', $string);
$string = str_replace('}','', $string);
$string = str_replace('&','', $string);
$string = str_replace('/','', $string);
$string = str_replace('\\','', $string);
$string = str_replace('?','', $string);
$string = str_replace('*','', $string);
$string = str_replace('+','', $string);
$string = str_replace('"','', $string);
$string = str_replace("'",'', $string);
$string = str_replace("Ç",'', $string);
$string = str_replace("ç",'', $string);
return $string;
}
formulario html
<form method="POST" action="">
<table>
<tr>
<td colspan="2"><h1 style="margin-bottom: 25px;">▾ Fazer Login</h1></td>
</tr>
<tr>
<td><div style="
border-top-left-radius: 3px; border-bottom-left-radius: 3px;
margin-left: 20px; width:40px; height:40px; background: white;">
<img class="icon_login"src="imagens/icons/index/user.png" alt=""/></div></td>
<td><input class="campo_texto" name="nome" min="4" max="15" placeholder="Usuário" type="text"></td>
</tr>
<tr>
<td><div style="
border-top-left-radius: 3px; border-bottom-left-radius: 3px;
margin-left: 20px; width:40px; height:40px; background: white;">
<img class="icon_login" src="imagens/icons/index/password.png" alt=""/></div></td>
<td><input class="campo_texto" name="senha" min="1" max="15" placeholder="************" type="password"></td>
</tr>
<tr>
<td colspan="2"><input class="campo_btn" type="submit" name="logar" value="➲ Confirmar Login"</td>
</tr>
<tr>
<td colspan="2">
<p class="resposta">
<i class="fa fa-check-circle" aria-hidden="true"></i> Ao fazer login no <?php echo NOMEHOTEL ?>, você concorda com todas as regras e termos de uso.
</p>
</td>
</tr>
</table>
<p style="color:red; font-family: verdana; font-weight: bold; padding-left: 20px; padding-top: 30px;"><?php echo $errors; ?></p>
</form>
aqui um pedaço da função de login do php com PDO
public function fazer_login($usuario){
try{
$nome = $usuario->get_username();
$senha = $usuario->get_password();
$query = "SELECT * FROM users WHERE username = :nome AND password = :senha";
$this->Select = $this->Conn->prepare($query);
$this->Select->bindParam(':nome', $nome, PDO::PARAM_STR);
$this->Select->bindParam(':senha', $senha, PDO::PARAM_STR);
$this->Select->execute();
if($this->Select->rowCount() == 1){
$dados = $this->Select->fetch(PDO::FETCH_ASSOC);
return $dados;
}
} catch (PDOException $ex) {
exibeMensagens($Msg, $ErrNo);
}
}
eu não consigo entender, como ele consegue invadir com SQL injection e deletar meu banco de dados???
Carregando comentários...