sexta-feira, junho 18, 2010

Utilizando o comando NETCAT (nc) no GNU/Linux

Objetivos

O NETCAT é uma ferramenta muito utilizada em testes de penetração, segurança de servidores GNU/Linux assim como validação da configuração de firewalls. 

O NETCAT funciona com uma arquitetura cliente/servidor. É possível configurar em uma máquina para que escute em determinadas portas TCP ou UDP para poder realizar diversos testes de conectividade.

Para fins de testes foram utilizadas duas máquinas, marte e omicron, com o comando nc instalado. Em ambas, a firewall IPTABLES estava desabilitada. A máquina omicron representa o servidor no qual deseja-se testar a abertura de certas portas, enquanto que a máquina marte é a que realiza os testes.

Principais opções do comando


[root@omicron ~]# nc -h
usage: nc [-46DdhklnrStUuvzC] [-i interval] [-p source_port]
 [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_version]
 [-x proxy_address[:port]] [hostname] [port[s]]
Command Summary:
    -4          Use IPv4
    -6          Use IPv6
    -D          Enable the debug socket option
    -d          Detach from stdin
    -h          This help text
    -i           secs Delay interval for lines sent, ports scanned
    -k         Keep inbound sockets open for multiple connects
    -l          Listen mode, for inbound connects
    -n         Suppress name/port resolutions
    -p         port Specify local port for remote connects
    -r         Randomize remote ports
    -s         addr Local source address
    -T         ToS Set IP Type of Service
    -C        Send CRLF as line-ending
    -t         Answer TELNET negotiation
    -U        Use UNIX domain socket
    -u        UDP mode
    -v        Verbose
    -w       secs Timeout for connects and final net reads
    -X        proto Proxy protocol: "4", "5" (SOCKS) or "connect"
    -x        addr[:port] Specify proxy address and port
    -z        Zero-I/O mode [used for scanning]
Port numbers can be individual or ranges: lo-hi [inclusive]




Testando Portas TCP

Abrindo no servidor omicron a porta TCP 1111 e colocando ela no modo LISTEN (-l)


[root@omicron ~]# nc -4 -l 172.16.1.125 1111



Abrindo no servidor marte uma conexão cliente e realizando uma digitação de texto para verificar


[root@marte:/home/klaus]# nc 172.16.1.125 1111
Teste da marte
oi aqui é da marte


Logo aparecerá o mesmo texto digitado no servidor omicron.


Testando Portas UDP

Os testes com o protocolo UDP possuem algumas considerações para fazer.

No servidor omicron foi executado o seguinte comando:


[root@omicron nc-1.84]# nc -l -u 172.16.1.125 2525



No cliente marte foi executado o seguinte comando:


[root@marte:/home/klaus]# echo "teste UDP" | nc -w 1 -u 172.16.1.125 2525


Desta maneira aparecerá no servidor omicron o texto "teste UDP" apenas uma vez. Não é possível digitar interativamente um texto para enviar entre o cliente e o servidor como no caso do UDP.