2. 2/ 41
®
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
4. 4/ 41
®
Entendendo o Problema
● WAF (web application firewall)
● Filtro com conjunto de regras
● Protege de ataques comuns
● Registra informações de ataques
● Bloqueia ataques
12. 12/ 41
®
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/
● …
13. 13/ 41
®
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>
14. 14/ 41
®
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
15. 15/ 41
®
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()– -
16. 16/ 41
®
Burlando um WAF
Buffer Overflow
● Crashar aplicação forçando buffer overflow deixa o caminho livre para
nossos payloads.
● Exemplos:
● /cars/id/page/=-25+and+(select 2)=(Select
0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...])+/*!
UnIOn*/+/*!selECt*/+4,5,6,7…
● id=2 and (select 2)=(Select 0xAAAAAAAAAAAAAAAAAAAAA...)
+uNIoN+seLecT+2,3,version()...
● Por que isso ocorre ?
● Nem todo WAF segue uma prática correta para limitar o buffer de entrada,
logo um payload com tamanho extremo pode causar buffer overflow.
funções como strcpy(),strcat() sem devido buffer limitado e definido podem
causar estes problemas, por isso o recomendado é usar funções como
strncat() ou mesmo strncpy().
21. 21/ 41
®
Burlando um WAF
● Ataques ao mesmo tempo? BLOCK !
● Delay de tempo em cada Request
● Periodicidade no tempo
● Diversidade
-Mudar IP
-Mudar Payload
-Mudar UserAgent
22. 22/ 41
®
Burlando um WAF
● Outras formas...
● obfuscar
● encodar apenas um
caracter etc...
38. 38/ 41
®
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.
39. 39/ 41
®
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”