Escolar Documentos
Profissional Documentos
Cultura Documentos
Descrição
Exemplos:
Baseada em conteúdo ~
Usando uma página simples, que exibe um artigo com determinado ID como parâmetro, o
atacante pode realizar alguns testes simples para determinar se a página é
vulnerável a ataques de SQL Injection.
Exemplo de URL:
http://newspaper.com/items.php?id=2
Envia a seguinte consulta ao banco de dados:
O atacante pode então tentar injetar uma consulta que retorna 'false':
http://newspaper.com/items.php?id=2 and 1=2
Agora, a consulta SQL deve se parece com isso:
Se a aplicação web é vulnerável à SQL Injection, então ela provavelmente não vai
retornar nada. Para se certificar, o atacante vai injectar uma consulta que irá
retornar 'true':
http://newspaper.com/items.php?id=2 and 1=1
Se o conteúdo da página que retorna "verdadeira" é diferente do que a da página que
retorna "falso", o atacante vai ser capaz de distinguir, quando a consulta
executada devolve verdadeiro ou falso.
Uma vez que isso foi verificado, as únicas limitações são privilégios criados pelo
administrador do banco de dados, diferente sintaxe SQL, e a imaginação do invasor.
Baseado no tempo ~
Este tipo de Injeção de SQL Cega confia no banco de dados parando por um período de
tempo especificado, em seguida, retorna os resultados, indicando a execução de uma
consulta SQL bem sucedida. Usando este método, um atacante enumera cada letra do
pedaço desejado de dados usando a seguinte lógica:
Se a primeira letra do nome do primeiro banco de dados é um 'A', aguarde 10
segundos.
Se a primeira letra do nome do primeiro banco de dados é um 'B', aguarde 10
segundos. etc
Microsoft SQL Server
http://www.site.com/vulnerable.php?id=1' waitfor delay '00:00:10'--
MySQL
SELECT IF(expression, true, false)
Usando uma operação de tomada de tempo, por exemplo, BENCHMARK (), vai atrasar as
respostas do servidor se a expressão for True.
BENCHMARK(5000000,ENCODE('MSG','by 5 seconds'))
Se a resposta do banco de dados levou muito tempo, podemos esperar que o primeiro
caractere de senha de usuário com user_id = 1 é o caráter '2 '.
(CHAR(50) == '2')
Usando este método para o resto de caracteres, é possível enumerar senhas inteiras
armazenados no banco de dados. Este método funciona mesmo quando o atacante injeta
as consultas SQL eo conteúdo da página vulnerável não muda.
É óbvio que, neste exemplo, os nomes das tabelas e o número de colunas foi
especificado. No entanto, é possível adivinhar-los ou verificar com um método de
tentativa e erro.
Outras bases de dados de MySQL também têm funções baseadas no tempo que lhes
permitam ser usado para ataques baseados no tempo:
* MS SQL 'WAIT FOR DELAY '0:0:10 [*MS SQL 'PARA O ATRASO' 0:00:10]
* PostgreSQL - pg_sleep()
A realização ataques Injeção de SQL Cega manualmente é muito demorado, mas há uma
série de ferramentas que automatizam este processo. Um deles é o SqlMap
(http://sqlmap.sourceforge.net/). Por outro lado, as ferramentas deste tipo são
muito sensíveis a pequenos desvios da regra. Isto inclui:
* Digitalização de outros clusters no site, onde os relógios não são perfeitamente
sincronizados,
* Serviços WWW, onde método adquirir argumento foi alterado, por exemplo, de /
index.php? ID = 10 a / ID, 10