terça-feira, 1 de março de 2016

SQLMap :: Bypass das Regras de SQL Injection do Modsecurity com SQLMap


Aqui no blog já falamos bastante sobre o ModSecurity e seus tipos de configuração. Passamos um tutorial explicando o seu uso no modo DetectionOnly para gerar apenas os logs e o modo de bloqueio e escuta de regras. Apesar das regras da comunidade serem bastante rígidas, elas ainda asism não são o suficiente para parar ataques mais elaborados de SQL Injection. Por mais que possamos customizar essas regras, em vários casos elas podem comprometer o uso da nossa aplicação, dando lentidão e até mesmo o funcionamento de features básicas, por esse motivo que os SysAdmins muitas vezes preferem acompanhar os logs gerados pelo ModSecurity do que gerar Regras de Bloqueios por ele.

A regra de bloqueio, é muito poderosa e pode parar até 80% dos ataques direcionados por Script Kiddies, porém com auxilio de alguns outros recursos do SQLMap, é possível injetar valores em shell codes e hexadecimais para burlar esse bloqueio e fazer a aplicação responder aos ataques que retornam valores booleanos das injeções.

Vamos aplicar um simples estudo de caso, onde tenho uma aplicação PHP + MySQL que possui algumas falhas de SQL Injection e também o ModSecurity configurado no modo de bloqueio com regras de SQL Injection, XSS e etc.


Perceba que todo nosso ataque foi bloqueado apresentando um erro 403 (Forbidden) para cada requisiçao.

Tentando realizar o ByPass no modo mais performático suponto que as configurações do ModSecurity estejam básicas:

Neste modo iremos utilizar o script auxiliar modsecurity.py. Não precisa baixar nada se você já tiver o SQLMap nativo, ele já vem como um tamper padrão da ferramenta. Caso não tenha, dependendo da sua versão, você pode encontrá-lo no Github do projeto. Ele é um script específico para algumas versões do Firewall do ModSecurity, e pode facilmente burlar os bloqueios dependendo das configurações da infraestrutura do site. Junto a ele vamos adicionar o parâmetro --random-agent para enviarmos agentes aleatórios as nossas requisições HTTP. Eu tenho costume de deixar o --level do meu scan alto, no 2 ou 3, simplesmente porque gosto de ver o output das ações dos testes.

 # sqlmap -u http://192.168.0.22/parametro.php?id=12' -level 3 --risk 3  -v4 --dbms "MySQL" --random-agent waf "modsecurity.py" 

Lembrando que por mais que o ataque seja efetivo, o ModSecurity ainda registra os logs do ataque, marcando o IP do atacante de forma bem eficiente. Então, em um caso de um pentest, é recomendado utilizar o parâmetro --tor dentro da sintaxe da ferramenta.

Tentando realizar o ByPass do ModSecurity com um Mix de Scripts Tampers.

Agora vamos nos preparar para um ataque mais complexo, pesado e barulhento. Faremos um mix dos tampers unmagicquotes.py, between.py, modsecurityzeroversioned.py, charencode.py modsecurity.py.

São vários scripts de transposição de Shellcode, hexadecimais e ainda preparados para filtros de WAF. Essa técnica é capaz de Bypassar configurações mais pesadas, porém ainda não é 100% eficiente em caso de uma boa configuração do Firewall.

 # sqlmap -u http://192.168.0.22/parametro.php?id=12' -v4 --dbms "MySQL" --random-agent --tamper unmagicquotes.py,between.py,modsecurityzeroversioned.py,charencode.py --level 3 --risk 3 --dbms=mysql --flush-session--dbs  




SOBRE O AUTOR

Matheus Fidelis

http://msfidelis.github.io/

Power Ranger, Piloto de Helicópteros e Astronauta da NASA. Desenvolvedor Web PHP com foco em Backend e POO, Linux SysAdmin DevOps e Entusiasta Python. Criou esse site pra contribuir com a comunidade com coisas que aprende dentro de um setor maluco de TI :)

2 comentários:

 
Nanoshots | Open Source Security, Linux e Tutoriais © 2015 - Designed by Templateism.com