SlideShare uma empresa Scribd logo
1 de 37
Baixar para ler offline
1/ 37
®
Burlando um WAF
25 de maio de 2015
®
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/ 37
®
Agenda
● Entendendo o problema
● Burlando um WAF
● Automatizando o ataque
● Sugestões para mitigação
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/ 37
®
Entendendo o Problema
● Filtra tanto Request como Response
6/ 37
®
Entendendo o Problema
● Request exemplo:
GET /sell/cars.php?search=<script>alert(document.cookie)</script >
7/ 37
®
Entendendo o Problema
● Match exato
● BlackList...
● “alert(”,
● ”union”
● “select”
● “script”
● “eval”...
8/ 37
®
Entendendo o Problema
● Block por IP
● DoS
Spoofing ?
9/ 37
®
Entendendo o Problema
● Regras não são suficientes...
● Expressão regular “regex” não faz matching
10/ 37
®
Burlando um WAF
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/ 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/ 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/ 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/ 37
®
Burlando um WAF
● Outras formas...
● Objetivo é o mesmo burlar
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/ 37
®
Burlando um WAF
● HPP(HTTP Parameter Pollution)
● Uma técnica que visa enviar muitos parâmetros para assim
burlar filtros de ambientes.
18/ 37
®
Burlando um WAF
● Mude o IP use Proxy
● Mude o User Agent
19/ 37
®
Burlando um WAF
● Outras formas...
● obfuscar
● encodar apenas um
caracter etc...
20/ 37
®
Automatizando o ataque
● Por que automatizar ?
21/ 37
®
Automatizando o ataque
● Payloadmask
https://github.com/CoolerVoid/payloadmask
22/ 37
®
23/ 37
®
● Futuro da ferramenta
github.com/CoolerVoid/payloadmask/issues
24/ 37
®
Automatizando o ataque
● 0d1n
https://github.com/CoolerVoid/0d1n
25/ 37
®
Automatizando o ataque
● 0d1n
https://github.com/CoolerVoid/0d1n
26/ 37
®
Automatizando o ataque
27/ 37
®
Automatizando o ataque
28/ 37
®
Automatizando o ataque
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/ 37
®
Automatizando o ataque
31/ 37
®
Automatizando o ataque
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/ 37
®
Automatizando o ataque
● Futuro da ferramenta...
github.com/CoolerVoid/0d1n/issues
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/ 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/ 37
®
Perguntas ???
37/ 37
®

Mais conteúdo relacionado

Destaque

Hebraico biblico uma gramática introdutória – page h. kelley
Hebraico biblico  uma gramática introdutória – page h. kelleyHebraico biblico  uma gramática introdutória – page h. kelley
Hebraico biblico uma gramática introdutória – page h. kelley
Magaly Costa
 

Destaque (18)

Estudo Em Lc 5.27 39
Estudo Em Lc 5.27 39Estudo Em Lc 5.27 39
Estudo Em Lc 5.27 39
 
As Parábolas de Jesus parte 1/2
As Parábolas de Jesus parte 1/2As Parábolas de Jesus parte 1/2
As Parábolas de Jesus parte 1/2
 
Plano de Marketing Boulevard Monde
Plano de Marketing Boulevard MondePlano de Marketing Boulevard Monde
Plano de Marketing Boulevard Monde
 
Todas as Parábolas da Bíblia - Herbert Lockyer
Todas as Parábolas da Bíblia - Herbert LockyerTodas as Parábolas da Bíblia - Herbert Lockyer
Todas as Parábolas da Bíblia - Herbert Lockyer
 
Livro parabolas jesus_2011_etc
Livro parabolas jesus_2011_etcLivro parabolas jesus_2011_etc
Livro parabolas jesus_2011_etc
 
Todas as parabolas da biblia
Todas as parabolas da bibliaTodas as parabolas da biblia
Todas as parabolas da biblia
 
Parábolas de Jesus
Parábolas de JesusParábolas de Jesus
Parábolas de Jesus
 
Slides: Matematica Boulevard Monde
Slides: Matematica Boulevard MondeSlides: Matematica Boulevard Monde
Slides: Matematica Boulevard Monde
 
Bibliologia pr. jonas freitas de jesus
Bibliologia   pr. jonas freitas de jesusBibliologia   pr. jonas freitas de jesus
Bibliologia pr. jonas freitas de jesus
 
Vida e atos dos apóstolos (cairbar schutel)
Vida e atos dos apóstolos (cairbar schutel)Vida e atos dos apóstolos (cairbar schutel)
Vida e atos dos apóstolos (cairbar schutel)
 
ALFABETO PORTUGUÊS-HEBRAICO
ALFABETO PORTUGUÊS-HEBRAICOALFABETO PORTUGUÊS-HEBRAICO
ALFABETO PORTUGUÊS-HEBRAICO
 
Arqueologia biblica
Arqueologia biblicaArqueologia biblica
Arqueologia biblica
 
Biblia de jerusalem (1)
Biblia de jerusalem (1)Biblia de jerusalem (1)
Biblia de jerusalem (1)
 
Alfabeto hebraico
Alfabeto hebraicoAlfabeto hebraico
Alfabeto hebraico
 
Valnice Milhomens (Orando A Palavra)
Valnice Milhomens (Orando A Palavra)Valnice Milhomens (Orando A Palavra)
Valnice Milhomens (Orando A Palavra)
 
Panorama do pensamento cristão michael d palmer - cpad
Panorama do pensamento cristão  michael  d  palmer - cpadPanorama do pensamento cristão  michael  d  palmer - cpad
Panorama do pensamento cristão michael d palmer - cpad
 
Hebraico biblico uma gramática introdutória – page h. kelley
Hebraico biblico  uma gramática introdutória – page h. kelleyHebraico biblico  uma gramática introdutória – page h. kelley
Hebraico biblico uma gramática introdutória – page h. kelley
 
Bases práticas da estrutura do MDA
Bases práticas da estrutura do MDABases práticas da estrutura do MDA
Bases práticas da estrutura do MDA
 

Semelhante a burlando um WAF

LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04
Carlos Santos
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript
Carlos Santos
 
T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)
Carlos Santos
 

Semelhante a burlando um WAF (20)

Burlando Waf 2.0
Burlando Waf  2.0Burlando Waf  2.0
Burlando Waf 2.0
 
LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04
 
Putting a-heat-with-thermostat
Putting a-heat-with-thermostatPutting a-heat-with-thermostat
Putting a-heat-with-thermostat
 
Webinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosWebinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcados
 
TDC2018SP | Trilha Arq .Net - Performance e feature
TDC2018SP | Trilha Arq .Net - Performance e featureTDC2018SP | Trilha Arq .Net - Performance e feature
TDC2018SP | Trilha Arq .Net - Performance e feature
 
Funcionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticasFuncionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticas
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
 
Development pitfalls
Development pitfallsDevelopment pitfalls
Development pitfalls
 
See project - Segurança em Cloud Computing v2 FISL 11 2010
See project - Segurança em Cloud Computing v2 FISL 11 2010See project - Segurança em Cloud Computing v2 FISL 11 2010
See project - Segurança em Cloud Computing v2 FISL 11 2010
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de software
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
 
T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)
 
Tunning da jvm dos comandos às configurações
Tunning da jvm  dos comandos às configuraçõesTunning da jvm  dos comandos às configurações
Tunning da jvm dos comandos às configurações
 
Fisl 16 - WordPress vs Hacker - Descubra o que ainda é preciso saber para bl...
Fisl 16 - WordPress vs Hacker - Descubra o que ainda é preciso saber para bl...Fisl 16 - WordPress vs Hacker - Descubra o que ainda é preciso saber para bl...
Fisl 16 - WordPress vs Hacker - Descubra o que ainda é preciso saber para bl...
 
Fisl 16 – WordPress vs Hacker – descubra o que ainda é preciso saber para bl...
Fisl 16 – WordPress vs Hacker – descubra o que ainda é preciso saber para bl...Fisl 16 – WordPress vs Hacker – descubra o que ainda é preciso saber para bl...
Fisl 16 – WordPress vs Hacker – descubra o que ainda é preciso saber para bl...
 
MSDN Webcast - Melhores práticas cross browser
MSDN Webcast - Melhores práticas cross browserMSDN Webcast - Melhores práticas cross browser
MSDN Webcast - Melhores práticas cross browser
 
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noite
 
Lean para potencializar a qualidade no software
Lean para potencializar a qualidade no softwareLean para potencializar a qualidade no software
Lean para potencializar a qualidade no software
 

Mais de Antonio Costa aka Cooler_

Mais de Antonio Costa aka Cooler_ (10)

Strange security mitigations
Strange security mitigationsStrange security mitigations
Strange security mitigations
 
Understand study
Understand studyUnderstand study
Understand study
 
WAF protections and bypass resources
WAF protections and bypass resourcesWAF protections and bypass resources
WAF protections and bypass resources
 
Static analysis for beginners
Static analysis for beginnersStatic analysis for beginners
Static analysis for beginners
 
Raptor web application firewall
Raptor web application firewallRaptor web application firewall
Raptor web application firewall
 
0d1n
0d1n0d1n
0d1n
 
0d1n bsides2
0d1n bsides20d1n bsides2
0d1n bsides2
 
Bsides odin
Bsides odinBsides odin
Bsides odin
 
Bsides4cooler
Bsides4coolerBsides4cooler
Bsides4cooler
 
detector de ladrão com laser
detector de ladrão com laserdetector de ladrão com laser
detector de ladrão com laser
 

burlando um WAF

  • 1. 1/ 37 ® Burlando um WAF 25 de maio de 2015 ®
  • 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/ 37 ® Agenda ● Entendendo o problema ● Burlando um WAF ● Automatizando o ataque ● Sugestões para mitigação
  • 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/ 37 ® Entendendo o Problema ● Filtra tanto Request como Response
  • 6. 6/ 37 ® Entendendo o Problema ● Request exemplo: GET /sell/cars.php?search=<script>alert(document.cookie)</script >
  • 7. 7/ 37 ® Entendendo o Problema ● Match exato ● BlackList... ● “alert(”, ● ”union” ● “select” ● “script” ● “eval”...
  • 8. 8/ 37 ® Entendendo o Problema ● Block por IP ● DoS Spoofing ?
  • 9. 9/ 37 ® Entendendo o Problema ● Regras não são suficientes... ● Expressão regular “regex” não faz matching
  • 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/ 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/ 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/ 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/ 37 ® Burlando um WAF ● Outras formas... ● Objetivo é o mesmo burlar
  • 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/ 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/ 37 ® Burlando um WAF ● Mude o IP use Proxy ● Mude o User Agent
  • 19. 19/ 37 ® Burlando um WAF ● Outras formas... ● obfuscar ● encodar apenas um caracter etc...
  • 20. 20/ 37 ® Automatizando o ataque ● Por que automatizar ?
  • 21. 21/ 37 ® Automatizando o ataque ● Payloadmask https://github.com/CoolerVoid/payloadmask
  • 23. 23/ 37 ® ● Futuro da ferramenta github.com/CoolerVoid/payloadmask/issues
  • 24. 24/ 37 ® Automatizando o ataque ● 0d1n https://github.com/CoolerVoid/0d1n
  • 25. 25/ 37 ® Automatizando o ataque ● 0d1n https://github.com/CoolerVoid/0d1n
  • 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
  • 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/ 37 ® Automatizando o ataque ● Futuro da ferramenta... github.com/CoolerVoid/0d1n/issues
  • 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/ 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”