NetGuard

Ataque de Injeção de SQL

O ataque de injeção de SQL é uma técnica maliciosa onde um atacante insere comandos SQL não autorizados em uma consulta através das entradas de um formulário ou de parâmetros de URL. Essa vulnerabilidade ocorre quando entradas não validadas ou sanitizadas de usuários são incorporadas diretamente em instruções SQL executadas pelo banco de dados.

Riscos de Injeção de SQL

Os ataques de injeção de SQL podem resultar em sérios riscos de segurança, incluindo:

Exemplos de Códigos Vulneráveis

Imagine um código Python que recebe um parâmetro de entrada para buscar um usuário no banco de dados:

$id = $_GET['id'];
$sql = "SELECT * FROM usuarios WHERE id = $id";

No Python, poderíamos ter algo semelhante:

import sqlite3

# Simulação do parâmetro GET
id = "1'; DROP TABLE usuarios; --"

# Conexão ao banco de dados SQLite (apenas para exemplo)
conn = sqlite3.connect('exemplo.db')
cursor = conn.cursor()

# Consulta SQL vulnerável
query = f"SELECT * FROM usuarios WHERE id = '{id}'"

# Executa a consulta
cursor.execute(query)

# Obtém os resultados
results = cursor.fetchall()

# Imprime os resultados (apenas para demonstração)
for row in results:
print(row)

# Fecha a conexão
conn.close()

Neste exemplo, se o parâmetro 'id' for manipulado por um atacante, como no caso de "1'; DROP TABLE usuarios; --", a consulta SQL resultante se tornará maliciosa, tentando deletar a tabela 'usuarios' do banco de dados.

Exemplo 2: Injeção de SQL através de Formulário

Considere um formulário de login onde o usuário insere seu nome de usuário e senha:

SELECT * FROM usuarios WHERE usuario = '$usuario' AND senha = '$senha';

Se o usuário inserir ' OR '1'='1 como senha, a consulta se tornará verdadeira para qualquer usuário, pois o SQL se torna:

SELECT * FROM usuarios WHERE usuario = '$usuario' AND senha = '' OR '1'='1';

Exemplo 3: Injeção de SQL com Instruções SQL Aninhadas

Em alguns casos, os hackers podem usar instruções SQL aninhadas para explorar vulnerabilidades. Veja o exemplo:

SELECT * FROM produtos WHERE categoria = '$categoria' AND preco > (SELECT AVG(preco) FROM produtos);

Se a variável $categoria for manipulada, um invasor pode fechar a instrução WHERE e executar outra consulta maliciosa.

Como os Hackers Executam Ataques de Injeção de SQL

Os hackers exploram vulnerabilidades de injeção de SQL de várias maneiras:

Boas Práticas para Prevenção de Injeção de SQL

Adotar essas práticas pode reduzir significativamente o risco de vulnerabilidades de injeção de SQL e ajudar a proteger suas aplicações contra ataques maliciosos.

Gostaria de testar seu conhecimento sobre o assunto

Clique aqui para iniciar o Quiz