Banco de Dados SQL injection

Documentos relacionados
SQL/HTML Injection e Criptografia Professor Fábio Luís da Silva Santos

IMPLEMENTAÇÃO DE BANCO DE DADOS

Banco de Dados I Introdução SQL

Banco de Dados. Professora: Luciana Faria

Fundamentos de Banco de Dados Postgre com Sql

Banco de Dados. -Aprendendo conceitos -Usando o SQL Conf para: -Conectar no banco de dados -Criar, alterar, excluir e consultar estruturas de tabelas

Revisão de Bancos de Dados

SQL CREATE DATABASE. MySQL, SQL Server, Access, Oracle, Sybase, DB2, e outras base de dados utilizam o SQL.

Lidando com Armazenamento de Dados

DDL DML DCL DTL Tipos Numéricos: INT FLOAT DOUBLE Tipos String: CHAR VARCHAR BINARY BLOB TEXT Tipos Data e Hora: DATE TIME TIMESTAMP YEAR

Preparação. Linguagem de Manipulação de Dados (DML) Estudo Dirigido 10/12/2013

Marcos Alexandruk Marcos Alexandruk

S U B G R U P O S D M L E D Q L : A L T E R A N D O E A P A G A N D O D A D O S E M U M A T A B E L A

Manipulação de Dados com SQL

C A P I T U L O 10 F U N Ç Õ E S I N T E R N A S P H P P A R A B A N C O D E D A D O S

Preparação criar tabela. Linguagem de Manipulação de Dados (DML) Estudo Dirigido 12/11/2018

Programando em SQL. Triggers, Stored Procedures e funções. Profa. Késsia Marchi

AULA 8. Ambientes Visuais 8.1. OBJETIVO DA AULA SQL (Structured Query Language)

Linguagem de pesquisa declarativa para banco de dados relacional; 1ª Versão - Desenvolvida pela IBM no laboratório de pesquisa de San José;

BANCO DE DADOS. Vinícius Pádua

BANCO DE DADOS PARA WEB

Uma solução possível para garantir, em ambiente APEX, a consistência duma estrutura ISA, total e disjuntiva.

Aula de SQL Comandos DDL. André Luiz de Oliveira Eduardo Raul Hruschka

A linguagem SQL

SQL (Tópicos) Structured Query Language

Banco de dados POO Márcio Delamaro. Programação Orientada a Objetos Prof Marcio Delamaro ICMC/USP

ANÁLISE E PROJETO DE BANCO DE DADOS

SQL INJECTION: ENTENDENDO E EVITANDO. MAGALHÃES, Felipe. B. ¹, BASTOS, Rafael. R² RESUMO

E-BOOK GUIA RÁPIDO DE SQL W W W. T R E I N A W E B.C O M. B R

A U L A 1 0 C R I A N D O V I E W S V I E W S ( V I S Õ E S )

Aula 06 Sistemas Embarcados LT38C

BANCO DE DADOS. Para a criação de um banco de dados, através de scripts SQL, deve-se usar a seguinte sintaxe: CREATE DATABASE <nome_banco_de_dados>

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE INTRODUÇÃO A SQL

A U L A 9 F U N Ç Õ E S A G R E G A D A S E C Á L C U L O S

Oracle Database 11g: Introdução à Linguagem SQL Novo

Utilizando o Postgres - comandos SQL para a manipulação de dados

BANCO DE DADOS GERENCIAL 1 A U L A 2

BD II (SI 587) Segurança em Banco de Dados. Josenildo Silva.

saída durante o runtime Usando Functions de uma Única Linha para Personalizar Relatórios Mostrar as diferenças entre as functions SQL de uma única

Triggers(Gatilhos) Tiago Alves de Oliveira

Sumário: 1) Trabalhando com Constraints: - NOT NULL - UNIQUE - PRIMARY KEY - FOREIGN KEY - DEFAULT

SQL Linguagem de Manipulação de Dados SQL DML SQL DML. Exemplo Modelo Relacional. Exemplo ME-R SQL DML CONTINUAÇÃO...

A U L A 3 S U B G R U P O S D M L E D Q L : I N S E R I N D O E P E S Q U I S A N D O D A D O S E M U M A T A B E L A

Lista 02 Sistema de Banco de Dados CAP 241 Computação Aplicada I

Técni n c i as e L i L n i g n u g age g ns n p ara r Ba B nc n o d e D ados I ACCESS

MYSQL - PRIMEIROS COMANDOS CRIAÇÃCO DO BD E DAS TABELAS, INSERÇÃO E CONSULTA DE REGISTROS. create database [if not exists] <nome>

Exercício Aula Passada. SQL Linguagem de Manipulação de Dados. Exercício Aula Passada. Exercício Aula Passada. Exercício Aula Passada

BCD29008 Banco de dados

BANCO DE DADOS FACSUL 2017 TECNOLOGIA DE REDE DE COMPUTADORES

ORACLE 11 G INTRODUÇÃO AO ORACLE, SQL,PL/SQL

Banco de dados. Conteúdo: DDL Prof. Patrícia Lucas

Rápida revisão do Modelo Relacional

PSI Linguagem de Definição de dados. Módulo 15

Banco de Dados II. Transações (Oracle) Segurança: Introdução; Controle de Acesso; Criptografia; Recursos de SQL.

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

Modelo Entidade-Relacionamento (E-R)

Introdução em Banco de Dados

Introdução à linguagem SQL

SQL. Prof. Roger Cristhian Gomes

Stored Procedures e Triggers

Curso de Banco de Dados. Prof. Rone Ilídio

Linguagem SQL Restrições, Triggers e Views

Introdução 20 Diagramas de fluxos de dados 20 O processo de elaboração de DFD 22 Regras práticas para a elaboração de DFD 24 Dicionário de dados 26

SQL BÁSICO. Luiz Antônio Vivacqua Corrêa Meyer

Fundamentos de SQL. Curso: Técnico em Redes de Computadores Disciplina: Tecnologias e Linguagem de Banco de dados Professor: Rodrigo da Rocha

Comandos de Manipulação

Treinamento PostgreSQL - Aula 02

Views. uma view é uma tabela virtual. não existe fisicamente na BD. é definida à custa de outras tabelas ou views. CREATE VIEW <nome> AS <query>;

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

Para criarmos um banco de dados no MySql, utilizamos à instrução:

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

Escola Secundária de Albufeira. Comandos MySQL. (Páginas Web Dinâmicas: PHP e MySQL) Carlos Nunes

A U L A 8 C O N S U L T A S U N I N D O D U A S O U M A I S T A B E L A S P A R T E 2

FACULDADE INGÁ Unidade de Ensino Superior Ingá Ltda Ciência da Computação TRIGGERS. Prof. Erinaldo Sanches Nascimento

BANCO DE DADOS SQL. Aprendendo a manipular dados. Banco de dados utilizado: PostgreSQL.

Programação em Banco de dados

Laboratório de Banco de Dados II Aula 04. Prof. Érick de Souza Carvalho

Instituto Federal de Educação, Ciência e Tecnologia de São Paulo

Oracle Database 10g: Fundamentos de SQL e PL/SQL

SQL E MYSQL - COMANDOS BÁSICOS

José Antônio da Cunha

Bases de Dados. DDL Data Definition Language

Revisão Banco de Dados

SQL: Vistas, Indices, Autorização, Restrições

Roteiro. SQL Linguagem de Manipulação de Dados. Exercício Aula Passada. Exercício Aula Passada. Exercício Aula Passada. Exercício Aula Passada

Uma breve introdução a Bases de dados

UNIVERSIDADE FEDERAL DA GRANDE DOURADOS PRÓ-REITORIA DE GRADUAÇÃO PROGRAD FACULDADE DE CIÊNCIAS EXATAS E TECNOLOGIA CURSO DE SISTEMAS DE INFORMAÇÃO

Módulo 6: Linguagem de Programação IV 6.2. Bases de Dados Introdução à Linguagem SQL

SIG: Sistemas de Informações Geográficas. Adaptado de Gilberto Câmara

Atualização e Inserção de Dados. SQL Avançado. Pedro F. Carvalho OCP Oracle g

SQL Básica DDL. Prof. Marcos A. Schreiner. 21 de outubro de Curso de Licenciatura em Computação

Importar e Exportar Dados

Definição do esquema da base de dados. o esquema da BD é composto pelas definições de todas as tabelas da BD.

Treinamento em SQL. Índice

'%'! $!0" $ 8 ' %%! % '! $ $$% + ' %!%$/)!'4!+,"/)!)+,/)% *! +,"0''% * %$!*!$$ #!"%&%'%'%$! "94(# ' %'$%$$$%0%$%' *!% %%%'!**% > %% %%!31?

Transcrição:

Universidade Estadual de Mato Grosso do Sul Curso de Computação, Licenciatura Banco de Dados SQL injection '1 = 1 Prof. José Gonçalves Dias Neto profneto_ti@hotmail.com

SQL Injection - Introdução Injeção de SQL, ou SQL embutido, é uma vulnerabilidade existente em bancos de dados, utilizadores da linguagem SQL, consistindo em uma técnica que se aproveita de sentenças de SQL previamente existentes nesses bancos de dados e as amplia ou danifica de forma que o atacante consiga obter dados que não estariam disponíveis na sentença original, ou simplesmente que seja capaz de executar comandos danosos à base de dados existente. Assim o atacante consegue inserir uma sentença SQL dentro de outra previamente existente. Isso é possível quando a aplicação é capaz de pegar entradas do usuário e combinar com parâmetros estáticos para montar uma consulta SQL.

Construímos um banco de dados fictício o qual chamamos de SQLINJECTION. Neste construímos unicamente uma tabela a partir do seguinte comando SQL. CREATE TABLE LOGIN( user VARCHAR(10) NOT NULL PRIMARY KEY, senha VARCHAR(10) NOT NULL); Feito isto, abastecemos com diversas entradas a tabela criada. Obviamente poderíamos listar todos os usuários inseridos na respectiva tabela a partir do seguinte comando. SELECT * FROM LOGIN;

Uma aplicação faria a busca de um login válido desta forma: SELECT * FROM LOGIN WHERE user = 'campo_nome' AND senha = 'campo_senha'; Onde campo_nome e campo_senha, sejam entradas passadas pelo usuário. Neste caso, qualquer nome de usuário que não pertença à tabela não retornará elementos, o mesmo acontece com a senha e com a junção user + senha.

Através da técnica de SQL injection, podemos modificar o comportamento de uma sentença e trabalhar com seus resultados. O primeiro teste básico que podemos fazer, é causar uma quebra ou parada inesperada na sentença através da utilização do caractere especial ; (ponto e virgula), mas para isso também precisaremos trabalhar com o caractere aspa simples. Faremos o seguinte, no local do campo_nome inseriremos apenas mais uma aspa simples entre as duas, e após isto um ponto e virgula, ficando a sentença da seguinte forma: SELECT * FROM LOGIN WHERE user = '';' AND senha = 'campo_senha';

Isto causará a execução da sentença unicamente até a comparação user = '' pois após isto o ponto-e-vírgula indicará o término da sentença. Obviamente não foi mérito apenas do ponto-e-virgula, o qual foi responsável unicamente por identificar o término da sentença, porém se o mesmo estivesse sozinho dentro das aspas inicialmente existentes, permitiria que TODA a sentença fosse executada, pois as aspas indicariam que ele não se trataria naquele momento de um caractere especial de comando, mas sim de um caractere de texto informado pelo usuário. Através da utilização consciente da aspa, podemos manipular a sentença, indicando o que é ou não um caractere de texto ou de comando, facilitando a injeção de código malicioso onde antes era possível apenas a inserção de texto simples.

Alterando a sentença inicial com a inserção de uma aspa simples entre as duas existentes do usuário, verificamos que o SGBD não identifica o final da sentença, permitindo ao usuário inserir mais e mais caracteres. Isto se deve pois o SGBD aguarda o caractere de ponto e vírgula, pois o que está contido na sentença está agora sendo tratado como texto e não comando. SELECT * FROM LOGIN WHERE user = ''' AND senha = 'campo_senha';

A partir desta informação, podemos alterar a sentença de forma a transformar tudo o que existe entre o primeiro dado informado pelo usuário (campo_user) e tudo antes do campo_senha, de modo a serem interpretado como texto. Depois disso, podemos inserir uma sentença que sabidamente retornará sempre verdadeira fazendo com que haja liberações do SGBD de dados pertencentes à tabela acessada. Assim, uma forma de termos acesso a TODOS os dados da tabela é inserir o seguinte texto dentro de user e senha respectivamente: campo_user ' campo_senha '1=1

Ficando o comando escrito da seguinte forma: SELECT * FROM LOGIN WHERE user = '''1 AND senha = 'or '1=1'; Para efeito de melhor expressão, o mesmo comando será reescrito com o que será interpretado como texto pelo SBGD com fundo amarelo. SELECT * FROM LOGIN WHERE user = '''1 AND senha = 'or '1=1'; Sentença esta que poderia também ser expressa da seguinte forma: SELECT * FROM LOGIN WHERE user = '''1 AND senha = 1' or '1' = '1';

SQL Injection - Proteção Uma das formas de se proteger deste ataque é efetuar a checagem de campos do tipo string evitando a entradas que contenham os seguintes caracteres especiais: " (aspas duplas) ' (aspas simples) ; (ponto e vírgula) = (sinal de igual) < (sinal de menor que) > (sinal de maior que)! (ponto de exclamação) -- (dois hifens) # (sustenido ou jogo-da-velha) // (duas barras) Palavras chave devem ser evitadas: - SELECT INSERT - UPDATE - DELETE WHERE - JOIN - LEFT - INNER - NOT - IN - LIKE - TRUNCATE- - DROP - ALTER - CREATE - DELIMITER *Os 3 últimos indicam início de comentário em alguns bancos) Outra forma, seria criptografar as entradas antes de salvar no banco, e no momento da consulta efetuar a criptografia do conteúdo comparando com a informação criptografada anteriormente.

Bibliografia