Port Scan

Fundamentos e ferramentas de Port Scan
Voltar

Enumerar Serviços


No browser: "url:porta".
bancocn.com:80

Serviços são determinadas aplicações rodando em determinada porta. Quando o Browser encontra o ip, tenta a entrada na porta 80, comum para entrada browser no servidor do site. Cada ip pode possuir milhares de portas (65536 - 1 à 65535). Porta 23 serviço Telnet (Controle remoto do servidor via terminal). Porta 25 de envio de emails. Quando ocorre o erro 400, por exemplo, a porta está funcionando, porém 'fechada', feedback dado pelo servidor por não entender a requisição. Erro 403 é a rejeição da conexão pela segurança do servidor. Há servidores que rodam muitos serviços ao mesmo tempo, como portas Tomcat, FTP, Telnet, SSH, SMTP, IMAP, entre muitos outros. Dependendo do tipo do servidor (Windows, Linux...) existirão determinados tipos de portas.


Netcat


nc url porta (porta opcional) ou netcat url porta
nc bancocn.com 80
GET / HTTP/1.0
(Ex requisição Http reconhecida pelo servidor)
nc -lvp 21 (comando para abrir porta 21 da máquina)

Faz requisições de rede. Procura portas abertas para conexão. Caso a porta estiver aberta, tudo o que for escrito, no terminal, seguido do comando, será interpretado pelo servidor.


NMAP e ZENMAP


nmap ip (ou url)
ZENMAP é o NMAP GUI, deve ser executado como root
  • Intense Scan: Busca o máximo de informações possível;
  • Ping Scan: Scan realizando ping;
  • Intense Scan, all TCP ports: Scanner em todas as portas TCP.

Em profile > new Profile or Command, gerará o comando personalizado.

Aba 'Scan', em 'Targets', informar a url ou ip do alvo(bancocn.com). Desativar o 'Enable all advanced/agressive options (-A)'. Ativar Version detection (-sV). Pode-se ativar a Operational system detection (-O), porém muitas vezes algoritmos enganam informando outros dados nesse caso. Seleciona o TCP scan como tipo 'TCP SYN scan (-sS)', que é menos agressivo e muito eficiente (Scan das portas TCP). Na opção 'Timing template', pode-se selecionar a opção do tipo de scan, do menos efetivo(agressivo) ao mais efetivo(demorado).

Aba 'Ping', ativar 'Don't ping before scanning (-Pn)', para não fazer scan prévio se o host está conectado, pois existem muitos servidores que não respondem à ping.

Aba 'Target', pode-se, ativando 'Ports to scan (-p)', selecionar as portas que deseja escanear(ex: 21,23,80). Selecionando esta opção somente com um '-', levando o comando à '-p-', faria o scanner de todas as portas. A opção desmarcada faz com que o Nmap escaneie as principais 1000 portas.

Código gerado para Scan:

nmap -sS -sV bancocn.com

No caso, muitos firewalls impedem que outras portas abertas sejam amostradas, indicando somente as portas Https(80,443,8080,8443...). Por isso, quando realizamos Port Scan em ip de firewall, é possível um resultado muito similar à esse. De acordo com o resultado gerado, caso encontra-se uma porta aberta, no qual mostra a determinada versão no firewall, aí deve-se procurar falhas de vulnerabilidade em tal. Por fim, pode-se salvar o Scan em Scan > Save Scan, que será salvo os dados em arquivo xml.



Vários Targets

Geralmente, tem-se vários ip's para escanear, pois é comum em redes internas, realizar o pentest em todas as máquinas que a compõem. Exemplo escanear um range de ip's:

Aba principal, em Target, informar: '200.200.200.0-200.200.200.200'(no caso, 200 máquinas). Ex2: '200.200.200.0/24(máscara de rede, scan do 0 ao 255). Profile > new Profile

Aba 'Scan': desativar 'Version detection (-sV), Timing template 'Agressive (-T4)'

Aba 'Ping': ativar 'ICMP Ping (-PE)'

Aba 'Other': desativar 'Extra options defined by user'

Código gerado para Scan:

nmap -T4 -PE 200.200.200.0/24

O ideal para o caso é fazer o Scan acima e, após os resultados, fazer o Scan detalhado de cada um desses ip's.



Port Scanner em Python

Os códigos de erros em portas 'fechadas' podem variar dependendo do SO. Porém o código 0 é o padrão universal para a conexão bem sucedida. Esses códigos 'caseiros' são importantes para uma 'pós entrada' em um servidor alvo, onde não há NMAP ou qualquer outro software do gênero instalado, sendo que você precise da utilização do mesmo para procurar outros dados em servidores internos àquele. Salve os códigos abaixo em arquivos .py. Para executá-lo, em terminal Linux, basta digitar, no diretório correspondente ao arquivo, "python nomearquivo.py". Remova os comentário de linha '#' para o código funcionar.


import socket
portas = [21, 23, 80, 443, 8080]
for porta in portas:
    cliente = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    cliente.settimeout(0.1)
    codigo = cliente.connect_ex(('bancocn.com', porta)) #pode ser colocado o domínio ou ip
    if codigo == 0:
        print porta, "OPEN"

Porta Específica (Similar ao Netcat)


import socket
cliente = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
cliente.connect(('bancocn.com',80)) #Pode ser colocado o domínio ou ip
cliente.send('escrita entrada na porta')
resposta = cliente.recv(1024)
print(resposta)

Elaborado por Mateus Schwede
ubsocial.github.io