Software Seguro
Pesquisas Acadêmicas: Software Seguro. Pesquise 862.000+ trabalhos acadêmicosPor: gripina • 18/11/2013 • 464 Palavras (2 Páginas) • 652 Visualizações
Exemplo de ataque:
Inicialmente usaremos uma consulta abaixo para exemplificar a vulnerabilidade. Quando um usuário utiliza o campo de pesquisa para procurar por todos os livros do editor CRAFT, a aplicação executa a seguinte consulta no banco :
SELECT autor, titulo, ano FROM livros WHERE editor = ‘CRAFT’ AND
publicado=1
Essa consulta obriga o banco de dados verificar cada linha dentro da tabela livros, extrair cada registro em que a coluna editor tenha o conteúdo CRAFT e publicado com o valor 1, e ao término, retornar o conjunto de todos esses registros, publicando o resultado em uma página HTML. Agora o usuário quer fazer uma busca por todos os livros produzidos pela L’CRAFT, isso faz a aplicação executar a seguinte consulta:
SELECT autor, titulo, ano FROM livros WHERE editor = ‘L'CRAFT’ and publicado=1
O interpretador executa a consulta analisando o que está dentro de aspas simpes, e obtem o valor L, em seguida ele encontra a expressão CRAFT que não é uma sintaxe SQL válida e acaba gerando um erro:
Incorrect syntax near 'CRAFT'.
Server: Msg 105, Level 15, State 1, Line 1
Unclosed quotation mark before the character string '
Esta mensagem de erro indica que a aplicação produziu um comportamento inesperado, ou seja, a estrutura geral do pedido de consulta ao banco de dados, que antes produzia resultados corretos, foi alterada de maneira arbitrária e não pode ser concluída com sucesso.
Se o atacante puder realizar modificações estruturais ao pedido de consulta ao banco de dados para permitir a reprogramação de suas funcionalidades inicial, o aplicativo está vulnerável à injeção de SQL. Um exemplo seria modificar a pesquisa para listar todos os livros disponíveis através do seguinte termo:
CRAFT' OR 1=1--
Portanto, este pedido seria executado desta maneira no banco de dados:
SELECT autor, titulo, ano FROM livros WHERE editor = ‘CRAFT’ OR 1=1--’ and publicado =1
A condição CRAFT’ OR 1=1– faz com que a cláusula WHERE sempre seja avaliado como verdadeiro e ignora o restante da consulta, essa consulta permite ao invasor ignorar a exigência de que a consulta retorne apenas itens de propriedade do usuário autenticado, o banco de dados verifica cada linha na tabela e extrai cada registro onde a coluna publisher tem o valor “CRAFT” ou onde 1 é igual a 1, fazendo com que a consulta agora retorne para aplicação todas as entradas armazenadas na tabela, independentemente do seu proprietário.
A utilização de meta-caracteres que sejam interpretados como comentários, como é o caso da sequência “–”, é frequentemente empregada nos ataques de injeção SQL, pois permite que você ignore o restante da consulta criado pelo desenvolvedor do aplicativo.
Uma forma alternativa é a utilização de aspas sem usar o símbolo de comentário e terminar a injeção inserindo o termo de pesquisa:
CRAFT' OR 'a' = 'a
O resultado
...