Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

burlando um WAF

como burlar um WAF

  • Login to see the comments

burlando um WAF

  1. 1. 1/ 37 ® Burlando um WAF 25 de maio de 2015 ®
  2. 2. 2/ 37 ® Quem sou ? ● Antonio Costa “Cooler_” ● Desenvolvedor em ASM, C, C++, Lisp, Perl, PHP etc... ● Pentest, codereview, engenharia reversa e pesquisas para problemas diversos etc... ● @Cooler_freenode ● https://github.com/CoolerVoid ● acosta@conviso.com.br ● coolerlair@gmail.com
  3. 3. 3/ 37 ® Agenda ● Entendendo o problema ● Burlando um WAF ● Automatizando o ataque ● Sugestões para mitigação
  4. 4. 4/ 37 ® Entendendo o Problema ● WAF (web application firewall) ● Filtro com conjunto de regras ● Protege de ataques comuns ● Registra informações de ataques ● Bloqueia ataques
  5. 5. 5/ 37 ® Entendendo o Problema ● Filtra tanto Request como Response
  6. 6. 6/ 37 ® Entendendo o Problema ● Request exemplo: GET /sell/cars.php?search=<script>alert(document.cookie)</script >
  7. 7. 7/ 37 ® Entendendo o Problema ● Match exato ● BlackList... ● “alert(”, ● ”union” ● “select” ● “script” ● “eval”...
  8. 8. 8/ 37 ® Entendendo o Problema ● Block por IP ● DoS Spoofing ?
  9. 9. 9/ 37 ® Entendendo o Problema ● Regras não são suficientes... ● Expressão regular “regex” não faz matching
  10. 10. 10/ 37 ® Burlando um WAF
  11. 11. 11/ 37 ® Burlando um WAF ● Como Detectar o WAF ? ● Descobrimento de um WAF pode se dar por alguns fatores são eles “header” da Response, por cookies e outros meios. ● Pode-se fazer manualmente, entretanto é interessante automatizar com ferramentas: ● https://svn.nmap.org/nmap/scripts/http-waf-detect.nse ● https://github.com/sandrogauci/wafw00f ● http://code.google.com/p/imperva-detect/ ● …
  12. 12. 12/ 37 ® Burlando um WAF Mixed Case ● Em alguns casos o “patern matching” para um elemento de uma blacklist seria “case sentive”, ou seja qualquer caractere que esteja fora do padrão não irá passar por “matching”. ● “select” é diferente de “SeLecT”,”sEleCt”,”seLecT”... ● “script” é diferente de “sCriPT”,”ScRipT”... ● Entretanto o paylaod pode ser interpretado seja ataque de XSS ou SQL injection, isso pois o ambiente que interpreta não é “case sentive”. ● Exemplo: ● /sell/cars.php?search=<script>alert(document.cookie)</script ● /sell/cars.php?search=<SCripT>AlErt(DoCuMenT.cOoKie)</scrIpt>
  13. 13. 13/ 37 ® Burlando um WAF Replace Keywords ● Alguns casos que não ocorre um block, fazem troca de uma string por outra, exemplo se encontra palavra “union select” substitui por “” ou seja acaba trocando por nada( apaga a ocorrência de uma palavra), logo á Request continua não é bloqueada. ● Como atacante pode se aproveitar disso ? ● Exemplos: ● /cars_show.php?car_id=-30 UNIunionON SELselectECT 6,7,8,9 ● Assim que o WAF fazer replace(troca) então temos: ● /cars_show.php?car_id=-30 UNION SELECT 6,7,8,9
  14. 14. 14/ 37 ® Burlando um WAF Spaces to comment ● Trocar espaços em branco por comentários “/**/”, ou mesmo adicionar comentários em pontos aleatórios, ajuda a fugir do “match”. ● Exemplos: ● /sell/cars.php? search=id=1+UnIoN/*&a=*/SeLeCT/*&a=*/1,2,3,database()– - ● /sell/cars.php?search=id=1/*!UnIoN*/+SeLeCT+1,2,concat(/*! table_name*/)+FrOM /*information_schema*/.tables /*!WHERE */+/*! TaBlE_ScHeMa*/+like+database()– -
  15. 15. 15/ 37 ® Burlando um WAF ● Outras formas... ● Objetivo é o mesmo burlar
  16. 16. 16/ 37 ® Burlando um WAF Encodes ● Codificando os payloads podemos enganar o “match”, os mais usados são encode64, url encode, double url encode... ● Exemplo: <script>alert(document.cookie)</script ● Url encode: %3Cscript%3Ealert%28document.cookie%29%3C%2Fscript ● 64 encode PHNjcmlwdD5hbGVydChkb2N1bWVudC5jb29raWUpPC9zY3Jpc HQ=
  17. 17. 17/ 37 ® Burlando um WAF ● HPP(HTTP Parameter Pollution) ● Uma técnica que visa enviar muitos parâmetros para assim burlar filtros de ambientes.
  18. 18. 18/ 37 ® Burlando um WAF ● Mude o IP use Proxy ● Mude o User Agent
  19. 19. 19/ 37 ® Burlando um WAF ● Outras formas... ● obfuscar ● encodar apenas um caracter etc...
  20. 20. 20/ 37 ® Automatizando o ataque ● Por que automatizar ?
  21. 21. 21/ 37 ® Automatizando o ataque ● Payloadmask https://github.com/CoolerVoid/payloadmask
  22. 22. 22/ 37 ®
  23. 23. 23/ 37 ® ● Futuro da ferramenta github.com/CoolerVoid/payloadmask/issues
  24. 24. 24/ 37 ® Automatizando o ataque ● 0d1n https://github.com/CoolerVoid/0d1n
  25. 25. 25/ 37 ® Automatizando o ataque ● 0d1n https://github.com/CoolerVoid/0d1n
  26. 26. 26/ 37 ® Automatizando o ataque
  27. 27. 27/ 37 ® Automatizando o ataque
  28. 28. 28/ 37 ® Automatizando o ataque
  29. 29. 29/ 37 ® Automatizando o ataque ● Exemplo: ./0d1n –host http://localhost/test.php –post ”car_name=ˆ ” –payloads payloads/xss.txt –find_regex_list payloads/guess.txt –log name_log –save_response –tamper urlencode -proxy-rand paylaods/proxy.txt
  30. 30. 30/ 37 ® Automatizando o ataque
  31. 31. 31/ 37 ® Automatizando o ataque
  32. 32. 32/ 37 ® Automatizando o ataque ● Exemplo: ./0d1n –host http://localhost/test.php –post ”car_name=ˆ ” –payloads payloads/xss.txt –find_regex_list payloads/guess.txt –log name_log –save_response
  33. 33. 33/ 37 ® Automatizando o ataque ● Futuro da ferramenta... github.com/CoolerVoid/0d1n/issues
  34. 34. 34/ 37 ® Sugestões para mitigação ● Não usar Regex que tenha redundância ● Usar Whitelist e não Blacklist. ● Prevenção sempre, contratar serviços para auditoria na aplicação ● Não esperar que o WAF faça tudo... ● Sanitizar informações e validar ● Mantenha o ambiente Hardenizado.
  35. 35. 35/ 37 ® Agradecimentos ! ● IAK, Sigsegv, M0nad, Slyfunky, Clandestine, Robertux, F117, Loganbr, MMxM, eremita, Mente Binaria, Otacon, Ephexis, pl4nkt0n, necrist, dr_gordon, sheilong etc... galera do IRC etc.. ● Aos Mestres da CONVISO ● Ulisses Castro por ter dado sugestão do “Tamper”
  36. 36. 36/ 37 ® Perguntas ???
  37. 37. 37/ 37 ®

×