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.
:)
Ótimo post!
ResponderExcluirPena 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.
Tenha certeza de que você parametrizou corretamente, do mesmo modo que a requisição é enviada. Na duvida, use o Burp Suite.
ExcluirRealmente o comando:
Excluirhydra 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.
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?
ResponderExcluirbem explicativo ..........más se usar esse metodo onde fica salvo a a senha ou o admin? o hydra salva esse resultado onde?
ResponderExcluirO que fazer quando o site possui rate limit?
ResponderExcluirEste comentário foi removido pelo autor.
ResponderExcluiro que eu faço quando o botão de login é uma imagem, e o "login page" nao funciona (da como todas as senhas sao validas) e quando eu coloco o erro de login do site "Usuário ou senha inválido." da como todas as senhas sao validas no terminal
ResponderExcluirMuito complicado para mim , prefiro usar o Burpsuite que já vem no Kali Linux !!
ResponderExcluir