# 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="/files/wOrL0Y0PpHAW6BSBeWGd" 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]:


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://vida03.gitbook.io/redteam/ssh-tricks.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
