Como fazer um SQL Injection Marco Ferreira Rui Cunha

Slides:



Advertisements
Apresentações semelhantes
Como fazer um blog?.
Advertisements

O Comando DROP INDEX Para eliminar um índice definido sobre uma tabela, utilize: Drop Index on ; Ex: No Access: Drop Index X on.
Falhas mais comuns em aplicações WEB
Banco de Dados Prof. Antonio.
BD em.NET: Passo a passo conexão com SQL Server 1º Semestre 2010 > PUCPR > BSI Bruno C. de Paula.
Banco de Dados Bruno Rafael de Oliveira Rodrigues.
SISTEMAS DE INFORMAÇÃO Sistemas de Bancos de Dados 2º Semestre – 2010 Pedro Antonio Galvão Junior Fone:
SISTEMAS DE INFORMAÇÃO Sistemas de Bancos de Dados I 2º Semestre – 2010 Pedro Antonio Galvão Junior Fone:
Sistemas de Informação Redes de Computadores
HTML – Hyper Text Markup Language
PostGreSQL Primeiros Passos
Operadores Especiais da SQL
Introdução à Engenharia da Computação
Oficina sobre banco de dados
Material III-Bimestre Wagner Santos C. de Jesus
SQL Structured Query Language
Linguagem de Banco de Dados - SQL
MySQL Gerdson de Araújo Silva Universidade Federal de Alagoas Maceió-AL, 21 de maio de 2009.
Introdução a JDBC Eduardo Martins Guerra Instituto Tecnológico de Aeronáutica Curso de Pós-Graduação em Engenharia de Software Programação Distribuída.
Banco de dados Profª Kelly Medeiros.
PostgreSQL.
SQL Injection.
Aula R Prof. Naércio Filho Técnico em Informática
Tópicos de Sistemas de Informação A Carlos Oberdan Rolim Ciência da Computação.
BANCO DE DADOS UNIVERSIDADE ESTADUAL DE SANTA CRUZ
Tipos de Linguagens do Banco de Dados
Treinamento AJAX Segurança
FTIN FORMAÇÃO TÉCNICA EM INFORMÁTICA Módulo de Programação Prof. Flávio Dantas.
Curso EFA de técnico de Informática e Sistemas
Primeira aula de PL/SQL Parte II
FTIN FORMAÇÃO TÉCNICA EM INFORMÁTICA Módulo de Programação Prof. Flávio Dantas.
Programação Orientada à Objetos
Explorando vulnerabilidades em REST (Representational State Transfer)
Desenvolvendo um script SQL
Rafael Lucio, Desenvolvedor Jr Padrão Informática e Assessor de TI Secretaria Municipal da Saúde;
Treinamento sobre SQL.
VIEW - VISÕES Professor Esp. Diego André Sant’Ana
FTIN FORMAÇÃO TÉCNICA EM INFORMÁTICA Módulo de Programação Prof. Flávio Dantas.
Conceitos Programas Programação Linguagens de Programação SQL.
Linguagem de Definição de Dados
©Silberschatz, Korth and Sudarshan (modificado)4.1.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
Projeto de Sistemas de Informação Prof. Schneider Oracle Object-Relational.
SQL- Structured Query Language  SQL é uma linguagem de comandos para interagir com uma BD relacional (não é case-sensitive).  A linguagem Java permite.
Treinamento SQL Server
Triggers (Gatilhos) Professor Esp. Diego André Sant’Ana
FTIN FORMAÇÃO TÉCNICA EM INFORMÁTICA Módulo de Programação Prof. Bruno Maciel.
Fundamentos de Banco de Dados Fundamentos de Banco de Dados Prof. Gale 2º. Semestre 2008.
DELETE, UPDATE, COMMIT, ROLLBACK
IEC Banco de Dados I Aula 04 – SQL (II) Turmas: Sistemas de Informação Professora: André Luiz da Costa Carvalho
1 Introdução à Manipulação de Dados SQL – Structured Query Language  Tabela = Relação  DDL – Data Definition Language  Sub-conjunto do SQL que suporta.
Conceitos básicos Professor Esp. Diego André Sant’Ana
Professor Me. Jeferson Bussula Pinheiro.
Daniel Paulo SQL Server 2014 Módulo II Daniel Paulo
Prof. Renato de Oliveira Bastos
Microsoft SQL Server Instruções para instalação/ recuperação de bancos de dados no SQL Server.
VBA – Visual Basic para Aplicativos
Linguagem de definição de dados - SQL
Programação para Web I AULA 2 BANCO DE DADOS.
Como se cria uma conta de Através do endereço de Internet
BD SQL (Insert, Update, Delete) e Select Hayslan Nicolas Colicheski Bucarth – IFRO / 2015 –
Banco de Dados -Aprendendo conceitos -Usando o SQL Conf para:
1 Programação de Banco de Dados José Antônio da Cunha George Azevedo da Silva.
Programação para Internet Aula 12 SQL (Comandos de Consulta ao BD)
2/6/2016 José Antônio da Cunha - CEFET - RN1 Programação de Banco de Dados Funções.
Normalização (4FN) Na literatura aparecem outras formas normais, como a forma normal de Boyce/Codd, a 4FN e a 5FN. Destas a única que tem importância na.
Programação para Internet Aula 11 SQL (Introdução a linguagem, comandos de modificação: Create, Drop, Alter, Insert, Delete, Update)
Atividade ASP.NET Portal da Memoria Atividade Desenvolver uma aplicação ASP.NET com funcionalidade similar à existente no site centenário.ifrn.edu.br utilizando.
José Antônio da Cunha 3/6/2016 José Antônio - CEFET-RN 1 Copyright © Dale Carnegie & Associates, Inc.
PHP + MYSQL. Mysql O MySQL é servidor de banco de dados multiusuário, multitarefa que trabalha com uma das linguagens de manipulação de dados mais popularizadas.
BANCO DE DADOS Araújo Lima Outubro / 2017 Araújo.
Transcrição da apresentação:

Como fazer um SQL Injection Marco Ferreira Rui Cunha

Conceito SQL Injection é uma vulnerabilidade que resulta da falta de verificação e tratamento de input. A ideia é fazer aceitar strings de SQL de forma a receber e/ou manipular informação de uma base de dados SQL alvo. Não existe uma maneira correcta/óptima de fazer este género de ataques. É uma forma de descoberta e exploração racional.

Escolha do alvo Numa primeira perspectiva, tem-se em conta o código em que é programado o site alvo. Ex: se for ASP.NET é assumido que o servidor corre Microsoft SQL junto com o Microsoft IIS.

Inicio do ataque Introduzimos um email com plicas de forma a verificar se as strings são tratadas, se recebermos o erro 500(server failure) verificamos que elas são tratadas literalmente, estamos no bom caminho. Se introduzirmos um email com uma plica no fim recebemos o erro "email address is unknown” que é uma resposta não tratada do servidor SQL. Esta informação, supomos que esteja depois do WHERE, tentamos assim colocar anything' OR ‘X'=‘X em vez do email. X= X será sempre verdade, em vez de recebermos um único output, esta versão da query irá devolver todos os items da base de dados dos membros. Escolhemos um email ao acaso, e testamos receber a informação de um deles para o seu próprio email. O importante é saber que o email foi enviado com sucesso.

Mapeamento dos campos Neste passo tentamos adivinhar os nomes dos campos da tabela na base de dados. “x' AND email IS NULL; --”, esta string serve para tentar adivinhar se existe um campo chamado “email”, ao colocar a plica depois do X e uma continuacao da query para testar o campo emnail, e no fuim o – como inicio de comentario em sql query para ignorar o fim de campo que será a plica que existe no codigo da query original. Desta forma vamos mapear aos poucos e pacientemente os campos existentes na tabela. Assumimos que encontramos os seguintes campos: email, passwd, login_id, full_name

Encontrar o nome da tabela Usamos a query parcial “x' AND 1=(SELECT COUNT(*) FROM tabname); --” para encontrar o nome da tabela. Eventualmente encontramos que members é uma tabela valida. Usamos a query parcial “x' AND members.email IS NULL; -- ” se não retornar erro, verificamos que a nossa query está bem formada e adivinhamos com sucesso o nome da tabela.

Encontrando utilizadores Usamos a query “x' OR full_name LIKE '%Bob%-” para encontrar o nome de um utilizador, visto so ser necessario um para forçar a nossa entrada. A tag % vai procurar todos os nomes que incluam, neste caso bob nos utilizadores. Neste caso temos de ter cuidado visto sempre que a query é bem sucessedida irá alertar o utilizador que recebe um email com a sua informação.

Encontrar a password por Brute-Force Existem formas de impedir esta etapa como logfiles, account lockups ou outras formas, mas sendo bem sucessedidos até este ponto, podemos assumir que não existem ou não funcionaram correctamente. “bob@example.com' AND passwd = 'hello123” será a query que iremos explorar, até que apareça a mensagem com sucesso, e desta alertado o utilizador, não iremos receber memsagens de erro, visto ser uma query bem formada. Será um processo longo e será boa ideia fazer um script que explore as passwords possiveis.

A Base de Dados não é só de leitura 'x'; DROP TABLE members; --, aqui está um exemplo de uma query que vai alterar a base de dados, neste caso, apagar a tabela de membros. x'; INSERT INTO members ('email','passwd','login_id','full_name') VALUES ('steve@unixwiz.net','hello','steve','Steve Friedl');--, adicionar um novo membro. x'; UPDATE members SET email = 'steve@unixwiz.net' WHERE email = 'bob@example.com, mudar o e-mail do membro, sendo possivel após este passo fazer uma recuperação de password para o novo e-mail.