# SSH Tricks

## Apresentação

Irei mostrar algumas tricks que podemos fazer com o utilitário **ssh (secure shell)**

## Port forwarding

```
(Atacante) 8040 -> SSH Túnel -> 80 (Alvo)
* Atacante se conecta ao alvo

ssh -L 8040:IP:80 user@IP
```

A opção **-L** é responsável por fazer o encaminhamento de porta, todos os dados enviados para a porta 8040 a partir da nossa máquina serão enviado para IP:80, ou seja, se tivesse uma porta 80 em loopback no alvo, poderiamos acessar ela em nossa máquina por conta do tunelamento.

## Reverse port forwarding

Agora vamos ver como podemos fazer ao contrário:

```
(Alvo) 9999 -> SSH Túnel -> 8040 (Atacante)
* Alvo se conecta ao atacante

ssh -R 9999:127.0.0.1:8040 user@IP
```

Ao enviar uma requisição para a porta 9999 a requisição vai para a porta 8040 da nossa máquina local e retorna para o servidor.&#x20;

<figure><img src="https://418865174-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFu6uaU65JuQBpnFAUDk8%2Fuploads%2F1TngFEDqwcZw9cD3lben%2Fssh%20reverse%20tun.png?alt=media&#x26;token=27c31391-a159-4ee5-bcaa-fb0cf3e1b8a9" alt=""><figcaption></figcaption></figure>

## SSH + Proxychains

Ao comprometer um SSH pode ser bastante útil visualizar outras redes a fim de encontrar um entry point para ownar outras redes. Podemos enxergar toda a rede que quisermos usando o SSH + Proxychains, usando o chisel também obteria o mesmo resultado, mas o tópico é sobre SSH.

```
ssh -D 1080 user@IP -> abre um túnel dinâmico SOCKS4
ssh -D -4 1080 user@IP -> abre um túnel dinâmico SOCKS5
```

Podemos usar esse túnel para implementar o proxychains, então no arquivo **proxychains.conf**, ficaria algo semelhante a isso:

```
...
socks5 127.0.0.1 1080
```

## SSHUTTLE

Podemos usar o [**sshuttle**](https://github.com/sshuttle/sshuttle) para tunelarmos redes internas para a nossa máquina, sem a necessidade de chisel, proxychains, etc.

```
sshuttle -r sshuser@10.10.110.74 192.168.20.0/24 192.168.21.0/24 192.168.22.0/24 192.168.23.0/24
```

## File Transfer

Podemos utilizar o utilitário **scp (secure copy)** para a transferência de arquivos via protocolo **SSH**

```
# Efetuar o upload de um arquivo
scp my_file user@ip:/<destination_path>

# Efetuar o download de um arquivo
scp user@ip:/<file_to_download> my_file_saved
```

## SSH Copy ID

Se nós tivermos senha do ssh e quisermos logar com key, ao invés de colocarmos nossa public key dentro do servidor para depois mover para a pasta .ssh, podemos utilizar o utilitário ssh-copy-id

```
# Gerar chave pública e privada
ssh-keygen

# Dar permissão correta para a chave
chmod 600 id_rsa

# Copiar a chave para dentro do servidor automaticamente
ssh-copy-id -i id_rsa.pub user@ip
```

Caso não tenha acesso a senha do ssh, e tenha acesso a máquina

```
# Pegue o contéudo da chave pública
cat id_rsa.pub

# Copie o contéudo para dentro de authorized_keys
echo "ssh-rsa ..." > /home/<USER>/.ssh/authorized_keys
```

## SSH PASS

Caso você tenha a senha do ssh mas não quer ficar toda hora autenticando no serviço, você pode usar o utilitário **sshpass**

```
# Linux
apt-get install sshpass

# MacOS
brew tap esolitos/ipa
brew install sshpass
```

Podemos utiliza-ló facilmente:

```
sshpass -p 'my_secretPass' ssh ghosthk@192.168.0.1
```

## SSH Config File

O arquivo [**config**](#user-content-fn-1)[^1] nos permite setar várias opções para rodar automaticamente ao iniciar ssh em um certo host

```
➜ cat ~/.ssh/config 
Host 192.168.0.1
    ProxyCommand /Users/ghosthk/corkscrew 192.168.0.10 3128 %h %p
    User network_admin
    KexAlgorithms=diffie-hellman-group14-sha1
Host teste
    HostName 192.168.1.15
    User bob
    IdentityFile ~/.ssh/id_rsa
```

O arquivo se encontra em **\~/.ssh/config**, podemos setar Proxy, User, o algoritmo a ser usado, caminho da chave privada, hostname, podemos setar diferentes opções que serão carregadas automaticamente quando eu me conectar em 192.168.0.1 ou teste.

```
ssh teste
ssh 192.168.0.1
```

Se quisermos definir opções para todos os hosts podemos utilizar

```
Host *
    ...
```

Para mais opções verifique [**aqui**](https://linuxize.com/post/using-the-ssh-config-file/)

[^1]:
