fbpx

Explorar sites usando SQL INJECTION

O QUE É BANCO DE DADOS SQL?

Banco de Dados é o agrupamento de informações que tratam do mesmo assunto, e que precisam ser armazenados para segurança ou conferência futura. 

SQL é uma linguagem declarativa padrão, usada para banco de dados relacionais. Mas afinal o que é um banco de dados relacional?

Nada mais é que um sistema que modela os dados de uma forma que eles sejam apresentados como tabelas.

O QUE É SQL INJECTION?

A falha de SQL INJECTION ainda é muito explorada, devido aos programadores web não terem cuidado com a segurança de seus sistemas. Para os iniciantes, SQL Injection é um tipo de ataque onde pode-se inserir ou manipular consultas criadas pela aplicação, que são enviadas diretamente para o banco de dados.

Com isso o atacante conseguirá fazer operações diretamente no banco de dados excluindo registros, tabelas ou até mesmo entrando no sistema sem permissão. Dependendo da versão do banco de dados, também é possível inserir comandos maliciosos e conseguir permissão total (acesso root) ao servidor web em que o banco de dados está em execução.

COMO OCORRE A FALHA DE SQL INJECTION?

Vamos Utilizar esse site de teste como exemplo: http://testphp.vulnweb.com/userinfo.php

Vale lembrar que em nossa plataforma de Treinamentos de Cibersegurança você aprende essas técnicas e mais avançadas.

Logo abaixo veremos alguns exemplos de STRINGS:

b' or ' 1='
' or '1
' or '|
' or 'a'='a
' or ''='
105 or 1=1

O ataque funciona com a inserção de comando SQL em locais não esperados pelo sistema, o que acaba processando esses comandos como se fossem legítimos. 

Explicando de outra forma, se a sessão do código onde a consulta é realizada não se encontra desenvolvida com as medidas de segurança adequadas, esta consulta será uma condição verdadeira, fazendo com que a aplicação libere o acesso.

Select * from users where userId =105 or 1=1;

O Ataque de SQL acima retornará Todas as linhas da tabela “Usuários”, pois OR 1 = 1 sempre resulta em Verdadeiro.

Ao usar essas técnicas o atacante pode simplesmente obter todas as informações dos usuários, incluindo usuário e senha, simplesmente inserindo 105 OR 1 = 1 no campo de entrada.

A baixo teremos um formulário de login PHP com Falha SQL:

$usuario = $_POST['usuario'];
$senha = $_POST['senha'];
$sql = "SELECT * FROM usuarios WHERE usuario = '".$usuario."' AND senha = '".$senha."' ";
$processa = mysql_query($sql);

Todos marcados com $ são variáveis no PHP sendo elas:

$usuario
$senha
$sql
$processa

A lógica desse código funciona assim: 

Faça a seleção de todos da tabela “usuarios” onde obrigatoriamente o “usuario” digitado no formulário de login é igual ao cadastrado no banco de dados e “senha” também igual ao cadastrado no banco de dados.

As variáveis $usuario e $senha recebem tudo que for digitado no campos de login através do método POST que é usado para solicitar que o servidor web aceite os dados enviado

Se não houver nenhuma validação de dados realizada, o atacante consegue logar. na aplicação sem mesmo ter o login, utilizando strings que nem o exemplo a seguir:

Username: ' or '1
Password: ' or '1

No momento existem 5 tipos de SQL Injection:

  • Sendo Poorly Filtered Strings uma delas que acabamos de ver;
  • Incorrect type handling;
  • Signature Evasion;
  • Filter Bypassing;
  • Blind SQL Injection.