Enumerando SSH

O SSH é um protocolo que serve para que o cliente e servidor troquem informações de uma forma segura.

Podemos pegar o banner que o servidor está utilizando com o netcat.

nc <ip> 22

Precisamos também saber quais são os possíveis métodos de autenticação que o servidor utiliza.

ssh -v <ip>

Para nos conectarmos a um usuário.

ssh <user>@<ip>

Podemos observar na resposta, a seguinte linha com esses métodos de autenticação aceitos.

debug1: Authentications that can continue: publickey,password

Significa que o servidor aceita dois tipos de autenticação, por senha ou chave pública. Se tiver password, podemos fazer um brute force para descobrir a senha. Se caso tiver o publickey, não irá funcionar pois não temos uma chave pública cadastrada e permitida no servidor.

Um detalhe, é que no arquivo /root/.ssh/known_hosts fica salvo todos os hosts que já nos conectamos, dessa forma quando tentamos conectar novamente pelo ssh nesses hosts, não será perguntado novamente se desejamos nos conectar, irá direto para a solicitação da senha.

Autenticação com chave pública

Ao entrar dentro de uma rede interna, pode ser que tenhamos uma shell com comandos limitados. Com isso, uma solução que podemos recorrer, é a autenticação com chave pública do SSH.

Se quisermos alterar as configurações, o arquivo de configuração do SSH fica em /etc/ssh/sshd_config.

O SSH geralmente por padrão não permite conectar pelo root diretamente, para alterar isso, temos que achar no arquivo, a linha PermitRootLogin prohibit-password e alterar para PermitRootLogin yes. Lembrando que isso não é uma boa prática de segurança para quem está protegendo.

Dentro do diretório /root existe um diretório oculto do ssh chamado .ssh e dentro dele existem alguns arquivos. Um deles é o authorized_keys que possuem as chaves que permitem o acesso à máquina e o known_hosts que são os hosts conhecidos (se não houver esse diretório já criado, você terá que criar manualmente com touch ~/.ssh/authorized_keys. Com isso, para termos a nossa máquina acessando esse servidor via chave pública, precisaríamos criar uma chave pública e privada na nossa máquina e cadastrar a chave pública no servidor dentro do arquivo authorized_keys.

Para gerarmos essa chave, usamos o comando a seguir. Ele escolhe um diretório padrão, podemos aceitar ou escolher um novo para ser salvo.

user@xubuntu:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/id_rsa
Your public key has been saved in /home/user/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:d3y2tLRJPcgeEmyTXtzepqxUoMpcs5RSkCTP747+8rI user@xubuntu
The key's randomart image is:
+---[RSA 3072]----+
|      ..o.       |
|       +... o .  |
|        o .*.o . |
|         oo+=.o..|
|        S Ooo+Bo+|
|       o B +oO.B.|
|        + o ..B  |
|        oo . .   |
|       .E*+ .    |
+----[SHA256]-----+

Com isso, temos a chave privada e pública, respectivamente. Basta copiar o conteúdo dentro de id_rsa.pub e inserir dentro do arquivo authorized_keys.

user@xubuntu:~/.ssh$ ls id*
id_rsa  id_rsa.pub

Agora precisamos utilizar o comando a seguir para ser identificado que iremos utilizar esse conjunto de chaves quando formos autenticar.

ssh-add id_rsa

Com isso, estamos prontos para nos autenticarmos ao servidor utilizando as chaves pública e privada.

user@xubuntu:~/.ssh$ ssh user@192.168.2.134
Linux kali 5.10.0-kali7-amd64 #1 SMP Debian 5.10.28-1kali1 (2021-04-12) x86_64

The programs included with the Kali GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Kali GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Jul 12 16:58:58 2021 from 192.168.2.107
┏━(Message from Kali developers)

┃ We have kept /usr/bin/python pointing to Python 2 for backwards
┃ compatibility. Learn how to change this and avoid this message:
┃ ⇒ https://www.kali.org/docs/general-use/python3-transition/

┗━(Run: “touch ~/.hushlogin” to hide this message)
┌──(user㉿kali)-[~]
└─$ 

Lembrando que muitas vezes não será possível se autenticar como root de acordo com as configurações do servidor. Uma solução é adicionar um usuário com adduser e fazer o mesmo processo, criando o arquivo ~/.ssh/authorized_keys e colocando a chave pública dentro dele.

Last updated