Introdução
Neste laboratório, você aprenderá a interromper ataques do Hydra antecipadamente usando opções que limitam o número de tentativas. Primeiro, configuraremos um servidor FTP com vsftpd e criaremos várias contas de usuário, testuser1 e testuser2, cada uma com sua própria senha. Essa configuração permitirá simular um cenário em que o Hydra tenta comprometer várias contas simultaneamente.
Em seguida, o laboratório orientará você no uso da opção -f, que interrompe o Hydra após o primeiro login bem-sucedido, e da opção -F com uma lista de vários hosts. Por fim, compararemos o comportamento de -f e -F para entender como essas opções podem ajudar a limitar ataques do Hydra.
Configurar o FTP com várias credenciais
Nesta etapa, configuraremos um servidor FTP com várias credenciais de usuário. Isso permitirá testar a capacidade do Hydra de comprometer várias contas simultaneamente. Usaremos o vsftpd (Very Secure FTP Daemon) como servidor FTP.
Primeiro, instale o vsftpd. Abra o terminal e execute o comando a seguir:
sudo apt update
sudo apt install vsftpd -y
Em seguida, precisamos configurar o vsftpd. Começaremos criando uma cópia de segurança do arquivo de configuração original. Essa é uma boa prática antes de alterar arquivos de configuração do sistema.
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
Agora, edite o arquivo de configuração /etc/vsftpd.conf usando o nano. Esse arquivo controla o comportamento do servidor FTP.
sudo nano /etc/vsftpd.conf
No editor nano, adicione ou modifique as linhas a seguir. Essas configurações desativam o acesso anônimo, habilitam logins de usuários locais, permitem gravação e confinam os usuários locais aos seus diretórios pessoais por motivos de segurança.
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
listen=YES
listen_ipv6=NO
Para salvar o arquivo no nano, pressione Ctrl + X, pressione Y para confirmar o salvamento e, em seguida, pressione Enter para confirmar o nome do arquivo.
Depois de salvar o arquivo, verifique se as alterações foram aplicadas corretamente usando o comando a seguir:
sudo cat /etc/vsftpd.conf | grep -E "^(anonymous_enable|local_enable|write_enable|chroot_local_user|listen)"
Certifique-se de que a saída exiba a mesma configuração adicionada.
Agora, vamos criar várias contas de usuário. Criaremos dois usuários: testuser1 e testuser2, e definiremos uma senha para cada um. O Hydra usará essas contas para tentar realizar os logins.
Crie testuser1 com um diretório pessoal:
sudo useradd -m testuser1
Defina a senha de testuser1 usando um comando não interativo:
echo 'testuser1:password123' | sudo chpasswd
Crie testuser2 com um diretório pessoal:
sudo useradd -m testuser2
Defina a senha de testuser2 usando um comando não interativo:
echo 'testuser2:password456' | sudo chpasswd
Esses comandos não são interativos e criam os usuários diretamente, sem solicitar dados de entrada, o que os torna mais confiáveis em ambientes automatizados.
Agora, precisamos corrigir as permissões dos diretórios pessoais para a configuração de chroot. Quando chroot_local_user=YES está habilitado, o diretório pessoal do usuário não pode ser gravável por ele, por motivos de segurança:
sudo chmod 755 /home/testuser1
sudo chmod 755 /home/testuser2
Crie um subdiretório gravável para cada usuário, onde eles poderão enviar arquivos:
sudo mkdir /home/testuser1/files
sudo mkdir /home/testuser2/files
sudo chown testuser1:testuser1 /home/testuser1/files
sudo chown testuser2:testuser2 /home/testuser2/files
Em seguida, reinicie o serviço vsftpd para aplicar as alterações feitas no arquivo de configuração e reconhecer os novos usuários.
sudo service vsftpd restart
Agora, vamos testar o servidor FTP para garantir que ele esteja funcionando corretamente e que os novos usuários consigam fazer login. Você pode usar o cliente de linha de comando ftp para se conectar ao servidor. Como o servidor está sendo executado localmente, podemos nos conectar a localhost.
ftp localhost
Será solicitado um nome de usuário. Digite testuser1 e, em seguida, a senha password123. Se tudo estiver configurado corretamente, você verá uma mensagem indicando que o login foi realizado.
Connected to localhost.
220 (vsFTPd 3.0.3)
Name (localhost:labex): testuser1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
Você pode digitar bye para sair do cliente FTP.
ftp> bye
221 Goodbye.
Agora, vamos preparar os arquivos que o Hydra usará no ataque. Acesse o diretório ~/project, que é o diretório de trabalho padrão.
cd ~/project
Crie um arquivo chamado users.txt no diretório ~/project. Esse arquivo conterá os nomes de usuário que o Hydra tentará utilizar.
nano users.txt
Adicione os seguintes nomes de usuário a users.txt:
testuser1
testuser2
Salve o arquivo e saia do nano.
Em seguida, crie um arquivo chamado passwords.txt no diretório ~/project. Esse arquivo conterá uma lista de senhas, incluindo as senhas corretas dos usuários de teste e algumas senhas incorretas comuns.
nano passwords.txt
Adicione as seguintes senhas a passwords.txt:
password123
password456
password
123456
qwerty
Salve o arquivo e saia do nano.
Agora temos um servidor FTP configurado com várias contas de usuário, além de listas de nomes de usuário e senhas que o Hydra poderá usar para tentar comprometer essas contas.
Executar com -f para interromper após o primeiro par
Nesta etapa, usaremos a opção -f do Hydra. Essa opção instrui o Hydra a interromper a execução depois de encontrar o primeiro par válido de nome de usuário e senha para um único alvo. Isso é útil quando você precisa encontrar apenas uma conta válida em um serviço específico e não quer que o Hydra continue testando outras combinações depois de um login bem-sucedido.
Certifique-se de estar no diretório ~/project.
cd ~/project
Agora, vamos executar o Hydra contra nosso servidor FTP usando as listas de nomes de usuário e senhas criadas na etapa anterior. Incluiremos a opção -f.
hydra -L users.txt -P passwords.txt localhost ftp -f
Vamos detalhar esse comando:
hydra: a ferramenta de linha de comando usada para ataques de força bruta.-L users.txt: especifica o arquivo que contém a lista de nomes de usuário (users.txtno diretório atual).-P passwords.txt: especifica o arquivo que contém a lista de senhas (passwords.txtno diretório atual).localhost: o endereço do servidor FTP de destino.ftp: o protocolo do serviço que será atacado — FTP, neste caso.-f: a opção fundamental que instrui o Hydra a interromper a execução após encontrar o primeiro par válido de nome de usuário e senha.
Observe a saída no terminal. O Hydra tentará fazer login usando os nomes de usuário e as senhas das listas. Assim que encontrar uma combinação válida, como testuser1:password123, ele exibirá o login bem-sucedido e interromperá a execução.
A saída deverá ser semelhante a esta:
Hydra v9.6 (c) 2024 by van Hauser/THC & David Maciejak - Please use caution!
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-29 14:41:46
[DATA] max 10 tasks per 1 server, overall 10 tasks, 10 login tries (l:2/p:5), ~1 try per task
[DATA] attacking ftp://localhost:21/
[21][ftp] host: localhost login: testuser1 password: password123
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 14:41:47
Observe que o Hydra foi interrompido imediatamente após encontrar a primeira combinação válida (testuser1:password123). Sem a opção -f, ele continuaria testando todas as outras combinações do arquivo passwords.txt para testuser1 e, depois, passaria para testuser2, testando também todas as senhas desse usuário.
Essa opção é especialmente útil ao testar um serviço específico quando basta verificar se pelo menos uma conta está vulnerável, economizando tempo e recursos consideráveis.
Testar -F com uma lista de vários hosts
Nesta etapa, exploraremos a opção -F do Hydra. Diferentemente de -f, que interrompe a execução após encontrar o primeiro par de credenciais válido em um único host, -F interrompe a execução depois de encontrar o primeiro par válido entre todos os hosts de uma lista. Isso é particularmente útil quando você está avaliando vários sistemas e precisa encontrar apenas um alvo vulnerável entre eles.
Para demonstrar esse comportamento, simularemos um cenário com vários hosts. Como temos apenas uma máquina virtual, usaremos localhost várias vezes na lista para representar alvos diferentes.
Primeiro, certifique-se de estar no diretório ~/project.
cd ~/project
Agora, crie um arquivo chamado hosts.txt no diretório ~/project. Esse arquivo conterá a lista de hosts de destino.
nano hosts.txt
Adicione as linhas a seguir a hosts.txt:
localhost
localhost
Salve o arquivo e saia do nano. Ao listar localhost duas vezes, estamos instruindo o Hydra a tratá-lo como dois alvos separados, embora ambos apontem para a mesma máquina.
Agora, executaremos o Hydra com a opção -F, tendo como alvo a lista de hosts especificada em hosts.txt.
hydra -L users.txt -P passwords.txt -M hosts.txt ftp -F
Vamos detalhar esse comando:
-L users.txt: especifica o arquivo que contém a lista de nomes de usuário.-P passwords.txt: especifica o arquivo que contém a lista de senhas.-M hosts.txt: a nova opção. Especifica o arquivo que contém a lista de hosts de destino (hosts.txtno diretório atual).ftp: o protocolo do serviço que será atacado.-F: a opção fundamental que instrui o Hydra a interromper a execução após encontrar o primeiro login bem-sucedido entre todos os hosts da lista.
Observe a saída no terminal. O Hydra tentará fazer login em cada host do arquivo hosts.txt usando os nomes de usuário e as senhas das listas. Assim que encontrar uma combinação válida em qualquer um dos hosts, ele exibirá o login bem-sucedido e interromperá o ataque contra todos os hosts listados em hosts.txt.
A saída deverá ser semelhante a esta:
Hydra v9.6 (c) 2024 by van Hauser/THC & David Maciejak - Please use caution!
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-29 14:42:10
[DATA] max 10 tasks per 2 servers, overall 20 tasks, 10 login tries (l:2/p:5), ~1 try per task
[DATA] attacking ftp://(2 targets):21/
[21][ftp] host: localhost login: testuser1 password: password123
[STATUS] attack finished for localhost (valid pair found)
2 of 2 targets successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 14:42:11
Embora tenhamos duas entradas localhost em hosts.txt, o Hydra interrompe a execução após encontrar o primeiro login bem-sucedido na primeira instância de localhost. Ele não tenta encontrar credenciais para a segunda entrada, demonstrando o efeito da opção -F.
A opção -F é muito útil quando você está avaliando vários sistemas e precisa encontrar apenas um sistema vulnerável para atingir seu objetivo. Ela pode economizar tempo e recursos computacionais ao interromper o ataque assim que uma vulnerabilidade é encontrada em qualquer um dos alvos listados.
Comparar o comportamento de -f e -F
Nesta etapa, compararemos diretamente o comportamento das opções -f e -F para consolidar a compreensão das diferenças entre elas. Usaremos a mesma configuração das etapas anteriores: um servidor FTP em execução em localhost, os arquivos users.txt e passwords.txt e o arquivo hosts.txt contendo duas entradas para localhost.
Primeiro, execute novamente o comando usando a opção -f. Esse comando tem como alvo um único host (localhost) e interrompe a execução após encontrar a primeira credencial válida para esse host específico.
hydra -L users.txt -P passwords.txt localhost ftp -f
Como observado na etapa 2, o Hydra encontrará testuser1:password123 e interromperá a execução. Ele não tentará encontrar testuser2:password456 em localhost.
Agora, execute novamente o comando usando a opção -F. Esse comando tem como alvo uma lista de hosts (hosts.txt) e interrompe a execução após encontrar a primeira credencial válida em qualquer um dos hosts dessa lista.
hydra -L users.txt -P passwords.txt -M hosts.txt ftp -F
Como observado na etapa 3, o Hydra encontrará testuser1:password123 na primeira entrada localhost de hosts.txt e interromperá a execução. Ele não continuará verificando a segunda entrada localhost do arquivo hosts.txt.
A diferença fundamental está na forma como o Hydra interpreta o alvo e decide quando interromper a execução:
-f(alvo único): quando você especifica um único alvo, comolocalhost,-finstrui o Hydra a interromper a execução assim que encontrar qualquer par válido de nome de usuário e senha para esse alvo específico. Ele não continuará procurando outras credenciais válidas no mesmo alvo.-F(lista de vários hosts): quando você especifica uma lista de alvos usando-M,-Finstrui o Hydra a interromper a execução assim que encontrar qualquer par válido de nome de usuário e senha em qualquer host da lista. Ele não continuará procurando outras credenciais válidas no mesmo host nem verificará os hosts seguintes da lista.
Para ilustrar ainda melhor a diferença, considere um cenário hipotético em que você esteja avaliando uma rede com vários servidores FTP: ftp1.example.com, ftp2.example.com e ftp3.example.com.
Se você usar
-ftendoftp1.example.comcomo alvo, o Hydra encontrará a primeira credencial válida nesse host e interromperá a execução. Para verificarftp2.example.com, seria necessário executar um comando separado do Hydra.Se você colocar os três servidores no arquivo
hosts.txte usar-F, o Hydra começará verificandoftp1.example.com. Se encontrar uma credencial válida nesse host, interromperá imediatamente toda a operação, sem sequer tentar se conectar aftp2.example.comouftp3.example.com.
Em resumo:
- Use
-fquando estiver concentrado em um único alvo e quiser encontrar pelo menos uma credencial válida para ele. - Use
-Fquando estiver avaliando vários alvos e quiser interromper toda a operação assim que qualquer credencial válida for encontrada em qualquer um deles.
Com isso, o laboratório chega ao fim. Você configurou com sucesso um servidor FTP, criou várias contas de usuário e usou o Hydra para testar essas contas, explorando as opções -f e -F para controlar o comportamento do ataque.
Resumo
Neste laboratório, você aprendeu a controlar o comportamento dos ataques do Hydra usando as opções -f e -F. Primeiro, configurou um servidor FTP local com vsftpd e criou várias contas de usuário (testuser1 e testuser2) para simular um cenário real. Você também preparou os arquivos users.txt e passwords.txt para serem usados pelo Hydra.
Em seguida, usou a opção -f para instruir o Hydra a interromper a execução após encontrar o primeiro par válido de nome de usuário e senha em um único alvo, demonstrando como localizar com eficiência uma conta vulnerável. Depois, explorou a opção -F com uma lista de vários hosts (hosts.txt) e aprendeu como o Hydra pode interromper um ataque contra vários alvos assim que uma única credencial válida é encontrada em qualquer um dos hosts listados.
Por fim, você comparou os comportamentos distintos de -f e -F e compreendeu seus respectivos usos: -f para interromper a execução após o primeiro sucesso em um único alvo, e -F para interromper a execução após o primeiro sucesso entre vários alvos. Esse conhecimento é essencial para otimizar ataques de força bruta e administrar os recursos de forma eficiente.


