1 / 9

SQL Injection

SQL Injection. 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.

vaughn
Download Presentation

SQL Injection

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SQL Injection 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 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.

  5. 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 sqlquery 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

  6. Encontrar o nome da tabela • Usamos a query parcial “x' AND 1=(SELECT COUNT(*) FROM tabname); --” paraencontrar o nomedatabela. • Eventualmenteencontramosque members é umatabelavalida. • Usamos a query parcial “x' AND members.email IS NULL; --” se nãoretornarerro, verificamosque a nossa query estábemformada e adivinhamos com sucesso o nomedatabela.

  7. Encontrando utilizadores • Usamos a query “x' OR full_name LIKE '%Bob%-” paraencontrar o nome de um utilizador, visto so ser necessario um paraforçar a nossaentrada. A tag % vaiprocurartodososnomesqueincluam, nestecaso bob nosutilizadores. • Nestecasotemos de tercuidadovistosempreque a query é bemsucessedidairáalertar o utilizadorquerecebe um email com a suainformação.

  8. Encontrar a password por Brute-Force • Existem formas de impedir esta etapa como logfiles, accountlockups 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.

  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 ('email','passwd','login_id','full_name') VALUES ('steve@unixwiz.net','hello','steve','SteveFriedl');--, adicionar um novo membro. • x'; UPDATE members SET email = 'steve@unixwiz.net' WHERE email = 'bob@example.com, mudar o e-mail do membro, sendopossivelapósestepassofazerumarecuperação de password para o novo e-mail.

More Related