Dead Packets

28/08/2013

Brute Force HTTP em forms com Hydra

Filed under: segurança,web app security — drak @ 12:56 AM

Hoje vamos exercitar um pouco algumas habilidades de Web Application Security. Em primeiro lugar obtenha o metasploitable (VM com diversas vulnerabilidades, criada especificamente para facilitar o aprendizado de técnicas de segurança), depois a partir de um linux da sua escolha (kali/bt ou samuraiwtf são algumas boas opções) garanta que você tem conectividade com o metasploitable.

No meu lab o metasploitable está com o IP 192.168.71.129, esse é o IP utilizado nos exemplos abaixo.

Ao navegar no IP do metasploitable você terá 5 opções de aplicações Web vulneráveis, o alvo hoje é um dos módulos do DVWA (Damn Vulnerable Web Application), ao selecionar essa opção você é apresentado à um formulário, o acesso (admin/password) está logo abaixo mas vamos tornar isso mais interessante e não vamos simplesmente utilizar essas credenciais.

A primeira técnica que utilizaremos é um simples brute force no formulário, para isso iremos usar o hydra e para montarmos os parâmetros corretamente podemos analisar o código fonte para obter os nomes dos campos de usuário e senha ou interceptar o pacote num proxy local e visualizar os campos esperados diretamente com um exemplo, iremos utilizar a última opção.

Inicie um proxy local (como o burpsuite, localizado no Kali em Applications, Web Applications, Web Application Proxies, burpsuite), verifique em que porta ele está escutando (Proxy, Options), configure o browser para utilizar o mesmo (localhost:8080, na configuração padrão). Desabilite o intercept (Proxy, Intercept) caso contrário você terá que autorizar manualmente cada pacote que passa por ele.

Acesse a interface web do DVWA, note que no burp suas requisições já devem estar aparecendo em Target, Site Map ou Proxy, History. Entre com qualquer texto nos campos Username e Password do formulário de login, veja como a informação é enviada no Burp.

Note que a informação é enviada através de um POST HTTP, perceba a sintaxe da string: “username=teste&password=teste&Login=Login”, nesse caso eu utilizei a string “teste” tanto como usuário quanto senha. Analizando o resultado da falha do login na tela inicial do DVWA também obtemos uma informação importante, caso o login falhe ele amigavelmente retorna a mensagem “Login failed”, iremos usar essa informação para determinar o sucesso ou falha do nosso brute force.

Já temos a string que caracteriza o envio de usuário e senha, também identificamos um texto que indica se o login falhou (uma mudança na página em relação à situação inicial, antes de efetuarmos qualquer tentativa) agora precisamos de uma wordlist. Usando o kali vamos procurar por alguma lista de senhas e escolher a que possui o maior número de linhas:

wc -l `locate passwords` | sort -nr

Analisando rapidamente o arquivo passwords.lst que está na pasta do nmap vemos que ele está no formato adequado (uma senha por linha) e contém as senhas mais comuns, para o propósito desse exercício essa wordlist é suficiente porém o início do arquivo contém muitos comentários (que serão testados inutilmente durante o processo de brute force) vamos criar uma nova wordlist apenas com o que é interessante:

cat /usr/share/nmap/nselib/data/passwords.lst | grep -v \#\!comment > pass.tx

Agora usamos o que coletamos anteriormente na sintaxe do hydra, iremos testar as senhas da wordlist somente para o username “admin”:

hydra -l admin -P pass.txt 192.168.71.129 http-post-form "/dvwa/login.php:username=^USER^&password=^PASS^&Login=Login:Login Failed"

Rode o comando e em poucos segundos deverá aparecer a seguinte mensagem:

Hydra v7.3 (c)2012 by van Hauser/THC & David Maciejak - for legal purposes only

Hydra (http://www.thc.org/thc-hydra) starting at 2013-08-27 22:15:49
[DATA] 16 tasks, 1 server, 5084 login tries (l:1/p:5084), ~317 tries per task
[DATA] attacking service http-post-form on port 80
[80][www-form] host: 192.168.71.129   login: admin   password: password
[STATUS] attack finished for 192.168.71.129 (waiting for children to finish)
1 of 1 target successfuly completed, 1 valid password found
Hydra (http://www.thc.org/thc-hydra) finished at 2013-08-27 22:15:58
root@kali:~#

Teste a senha encontrada e veja a tela inicial do DVWA.

Navegue para a primeira seção, chamada “Brute Force” e analise o formulário existente, note a diferença no modo como a informação é enviada pelo Burp (dessa vez as credenciais são enviadas usando o método GET), veja que o texto de falha no login também é diferente. Um detalhe importante ao realizar a tentativa de ataque nesse formulário é que dessa vez o usuário deve estar autenticado para ter acesso ao segundo formulário, logo também precisamos incluir a informação da autenticação no DVWA (através da inclusão da informação do SESSION ID, que encontramos no Cookie e podemos ver facilmente no burp)

Realizando os ajustes de parâmetros necessários baseado nas novas informações obtidas com um teste no burp temos o seguinte resultado:

hydra -l admin -P pass.txt 192.168.71.129 http-get-form "/dvwa/vulnerabilities/brute/:username=^USER^&password=^PASS^&Login=Login:Username and/or password incorrect.:H=Cookie: security=low; PHPSESSID=a36c8206f365ecea8315a06bf3559792"
Hydra v7.3 (c)2012 by van Hauser/THC & David Maciejak - for legal purposes only

Hydra (http://www.thc.org/thc-hydra) starting at 2013-08-27 23:18:51
[DATA] 50 tasks, 1 server, 5000 login tries (l:1/p:5000), ~100 tries per task
[DATA] attacking service http-get-form on port 80
[80][www-form] host: 192.168.71.129   login: admin   password: password
[STATUS] attack finished for 192.168.71.129 (waiting for children to finish)
1 of 1 target successfuly completed, 1 valid password found
Hydra (http://www.thc.org/thc-hydra) finished at 2013-08-27 23:18:56
root@kali:~#

Mais uma vez conseguimos obter com sucesso, é importante lembrar que assumimos o nome de usuário “admin”, caso precisassemos testar múltiplas senhas para múltiplos usuários o tempo de brute force aumenta drasticamente, além disso outras medidas de segurança como lockar a conta após X logins sem sucesso, um delay no sistema de login que somente permita novas tentativas após Y segundos de uma tentativa mal sucedida (isso também é conhecido como tarpitting), usar um captcha ou até mesmo abandonar totalmente o uso de senhas (como no caso da autenticação SSH usando chaves públicas) são algumas medidas úteis para combater brute force.

Update 31/07/14: Caso você queira visualizar no Burp as requisições que estão sendo feitas pelo Hydra, basta acrescentar a variável de ambiente abaixo.

root@kali:~# export HYDRA_PROXY_HTTP=http://127.0.0.1:8080

Referências
Metasploitable
DVWA
Kali Linux
Samurai WTF

Anúncios

2 Comentários »

  1. […] post é uma continuação do “Brute Force HTTP em forms com Hydra”, assume-se que você já tenha o ambiente montado e […]

    Pingback por Command Execution no DVWA | Dead Packets — 03/09/2013 @ 6:35 PM | Responder

  2. […] é uma continuação da série que trata de vulnerabilidades em aplicações Web, iniciada com o “Brute Force HTTP em forms com Hydra”, assume-se que você já tenha o ambiente montado e […]

    Pingback por Explicando Cross Site Request Forgery | Dead Packets — 05/09/2013 @ 11:21 PM | Responder


RSS feed for comments on this post. TrackBack URI

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Crie um website ou blog gratuito no WordPress.com.

%d blogueiros gostam disto: