A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Como fazer um SQL Injection Marco Ferreira Rui Cunha

Apresentações semelhantes


Apresentação em tema: "Como fazer um SQL Injection Marco Ferreira Rui Cunha"— Transcrição da apresentação:

1 Como fazer um SQL Injection Marco Ferreira Rui Cunha

2 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.

3 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.

4 Inicio do ataque Introduzimos um 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 com uma plica no fim recebemos o erro " 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 . 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 ao acaso, e testamos receber a informação de um deles para o seu próprio . O importante é saber que o foi enviado com sucesso.

5 Mapeamento dos campos Neste passo tentamos adivinhar os nomes dos campos da tabela na base de dados. “x' AND IS NULL; --”, esta string serve para tentar adivinhar se existe um campo chamado “ ”, 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: , passwd, login_id, full_name

6 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. IS NULL; -- ” se não retornar erro, verificamos que a nossa query está bem formada e adivinhamos com sucesso o nome da tabela.

7 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 com a sua informação.

8 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. 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.

9 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 (' ','passwd','login_id','full_name') VALUES Friedl');--, adicionar um novo membro. x'; UPDATE members SET = WHERE = mudar o do membro, sendo possivel após este passo fazer uma recuperação de password para o novo .


Carregar ppt "Como fazer um SQL Injection Marco Ferreira Rui Cunha"

Apresentações semelhantes


Anúncios Google