Aula 46 | Modificiando Query SQL Injection

Aula 46 | Modificiando Query SQL Injection

Modificando Query com SQL Injection

Revisão: SQL Injection

Na aula anterior (aula 45), vimos o que é SQL Injection e como funciona. Relembrando, SQL Injection é um ataque onde o atacante injeta código SQL malicioso em uma consulta através de uma entrada vulnerável.

Exemplos de URLs e Consultas

Vamos usar o exemplo do site https://netcattest.com/busca/1. Se você altera o URL para /2 ou /3, ele vai retornar outros dados de outras páginas. Isso mostra que está sendo realizada uma pesquisa no banco de dados.

Vamos imaginar que a tabela no banco de dados é chamada aulas e tem as seguintes colunas:

id aula nome

Uma consulta para buscar uma aula específica poderia ser assim:

SELECT * FROM aulas WHERE id = 1;

Se alterarmos o URL para https://netcattest.com/busca/2, a consulta seria:

SELECT * FROM aulas WHERE id = 2;

Pensamento de um Atacante

Agora vem o pensamento de um atacante: e se o valor não for um número? E se for uma letra, um símbolo ou até mesmo outro comando SQL para manipular a consulta?

Por exemplo, o atacante pode alterar o URL para https://netcattest.com/busca/46 e injetar o seguinte código:

id=1' OR '1'='1--

A consulta resultante seria:

SELECT * FROM aulas WHERE id = 1 OR '1'='1' --;

Por Que Funciona?

Esse comando funciona devido aos caracteres especiais (', --) e operadores lógicos (OR). Aqui está o detalhamento:

  • ': Fecha a string que contém o valor do id.

  • OR '1'='1': Sempre verdadeiro, forçando o banco de dados a retornar todas as linhas da tabela.

  • --: Comentário em SQL, que ignora o restante da consulta original.

Tabelas de Exemplo

Vamos criar um exemplo de tabela aulas:

id aula nome
1 45 SQL Injection
2 46 Modificando Query SQL Injection
3 47 Back-End por trás do SQL Injection
 

E aqui está a consulta que um atacante poderia usar para manipular o resultado:

SELECT * FROM aulas WHERE id = 1 OR '1'='1' --;

Isso retornaria todas as aulas, independentemente do valor de id.

Claro! Vamos utilizar a tabela aulas com as colunas id, aula e nome que definimos anteriormente:

Tabela aulas:

 

 
id aula nome
1 45 SQL Injection
2 46 Modificando Query SQL Injection
3 47 Back-End por trás do SQL Injection

 

Remover uma Aula (Aula 45)

 

Para remover a aula com id = 1 (Aula 45), utilizamos o comando SQL DELETE:

 

DELETE FROM aulas WHERE id = 1;

 

Adicionar uma Nova Aula (Aula 47)

 

Para adicionar uma nova aula (Aula 47), utilizamos o comando SQL INSERT:

 

INSERT INTO aulas (id, aula, nome) 
VALUES (4, 47, 'oi');

 

Assim, os comandos completos são:

 

-- Remover a aula com id = 1 (Aula 45)
DELETE FROM aulas WHERE id = 1;

-- Adicionar uma nova aula (Aula 47)
INSERT INTO aulas (id, aula, nome) VALUES (4, 47, 'oi');

 

 

Sugestões de Aulas

Aula 47 | Back-End por trás do SQL Injection

Ver Aula

Aula 45 | SQL Injection

Ver Aula

Aula 120 | Whonix + Proxy

Ver Aula