Resumo do Nmap (ESP)

Reading time: 15 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24

Parâmetros

IPs a escanear

  • <ip>,<net/mask>: Indique os ips diretamente
  • -iL <ips_file>: list_IPs
  • -iR <number>: Número de Ips aleatórios, você pode excluir possíveis Ips com --exclude <Ips> ou --excludefile <file>.

Descoberta de equipamentos

Por padrão, o Nmap inicia uma fase de descoberta consistindo em: -PA80 -PS443 -PE -PP

  • -sL: Não é invasivo, lista os alvos fazendo DNS solicitações para resolver nomes. É útil para saber se, por exemplo, www.prueba.es/24 todos os Ips são nossos alvos.
  • -Pn: Sem ping. Isso é útil se você sabe que todos estão ativos (caso contrário, você pode perder muito tempo, mas essa opção também produz falsos negativos dizendo que não estão ativos), impede a fase de descoberta.
  • -sn : Sem escaneamento de portas. Após completar a fase de reconhecimento, não escaneia portas. É relativamente furtivo e permite um pequeno escaneamento de rede. Com privilégios, envia um ACK (-PA) para 80, um SYN(-PS) para 443 e uma solicitação de eco e uma solicitação de timestamp; sem privilégios, sempre completa conexões. Se o alvo for a rede, usa apenas ARP(-PR). Se usado com outra opção, apenas os pacotes da outra opção são descartados.
  • -PR: Ping ARP. É usado por padrão ao analisar computadores em nossa rede, é mais rápido do que usar pings. Se você não quiser usar pacotes ARP, use --send-ip.
  • -PS <ports>: Envia pacotes SYN para os quais, se responder SYN/ACK, está aberto (para o qual responde com RST para não encerrar a conexão); se responder RST, está fechado e se não responder, está inacessível. No caso de não ter privilégios, uma conexão total é usada automaticamente. Se nenhuma porta for fornecida, é direcionado para 80.
  • -PA <ports>: Como o anterior, mas com ACK, combinando ambos dá melhores resultados.
  • -PU <ports>: O objetivo é o oposto, são enviados para portas que se espera que estejam fechadas. Alguns firewalls verificam apenas conexões TCP. Se estiver fechado, é respondido com porta inacessível; se for respondido com outro icmp ou não for respondido, é deixado como inacessível.
  • -PE, -PP, -PM : ICMP PINGS: resposta de eco, timestamp e máscara de endereço. Eles são lançados para descobrir se o alvo está ativo.
  • -PY<ports>: Envia sondas SCTP INIT para 80 por padrão; INIT-ACK(aberto) ou ABORT(fechado) ou nada ou ICMP inacessível(inativo) podem ser respondidos.
  • -PO <protocols>: Um protocolo é indicado nos cabeçalhos, por padrão 1(ICMP), 2(IGMP) e 4(Encap IP). Para os protocolos ICMP, IGMP, TCP (6) e UDP (17), os cabeçalhos de protocolo são enviados; para os demais, apenas o cabeçalho IP é enviado. O objetivo disso é que, devido à má formação dos cabeçalhos, respostas de Protocolo inacessível ou do mesmo protocolo são respondidas para saber se está ativo.
  • -n: Sem DNS
  • -R: DNS sempre

Técnicas de escaneamento de portas

  • -sS: Não completa a conexão, portanto não deixa rastros, muito bom se puder ser usado.(privilégios) É o que é usado por padrão.
  • -sT: Completa a conexão, portanto deixa um rastro, mas pode ser usado com certeza. Por padrão, sem privilégios.
  • -sU: Mais lento, para UDP. Principalmente: DNS(53), SNMP(161,162), DHCP(67 e 68), (-sU53,161,162,67,68): aberto(resposta), fechado(porta inacessível), filtrado (outro ICMP), aberto/filtrado (nada). No caso de aberto/filtrado, -sV envia numerosas solicitações para detectar qualquer uma das versões que o nmap suporta e pode detectar o verdadeiro estado. Aumenta muito o tempo.
  • -sY: O protocolo SCTP falha ao estabelecer a conexão, portanto não há logs, funciona como -PY
  • -sN,-sX,-sF: Null, Fin, Xmas, podem penetrar alguns firewalls e extrair informações. Baseiam-se no fato de que máquinas compatíveis com o padrão devem responder com RST a todas as solicitações que não têm SYN, RST ou ACK; atrasos levantados: aberto/filtrado(nada), fechado(RST), filtrado (ICMP inacessível). Não confiável em Windows, Cisco, BSDI e OS/400. No unix sim.
  • -sM: Escaneamento Maimon: Envia flags FIN e ACK, usado para BSD, atualmente retornará tudo como fechado.
  • -sA, sW: ACK e Window, é usado para detectar firewalls, para saber se as portas estão filtradas ou não. O -sW distingue entre aberto/fechado, uma vez que os abertos respondem com um valor de janela diferente: aberto (RST com janela diferente de 0), fechado (RST janela = 0), filtrado (ICMP inacessível ou nada). Nem todos os computadores funcionam dessa maneira, então se tudo estiver fechado, não está funcionando; se estiverem poucos abertos, está funcionando bem; e se estiverem muitos abertos e poucos fechados, está funcionando ao contrário.
  • -sI: Escaneamento Idle. Para os casos em que há um firewall ativo, mas sabemos que ele não filtra para um determinado Ip (ou quando simplesmente queremos anonimato), podemos usar o scanner zumbi (funciona para todas as portas); para procurar possíveis zumbis, podemos usar o script ipidseq ou o exploit auxiliary/scanner/ip/ipidseq. Este scanner é baseado no número IPID dos pacotes IP.
  • --badsum: Envia a soma errada, os computadores descartariam os pacotes, mas os firewalls poderiam responder algo, é usado para detectar firewalls.
  • -sZ: Scanner SCTP "estranho", ao enviar sondas com fragmentos de cookie echo, eles devem ser descartados se abertos ou respondidos com ABORT se fechados. Pode passar por firewalls que o init não passa, o ruim é que não distingue entre filtrado e aberto.
  • -sO: Escaneamento de Protocolo Ip. Envia cabeçalhos ruins e vazios nos quais às vezes nem o protocolo pode ser distinguido. Se chegar um protocolo ICMP inacessível, está fechado; se chegar uma porta inacessível, está aberta; se chegar outro erro, filtrado; se nada chegar, aberto|filtrado.
  • -b <server>: FTPhost--> É usado para escanear um host a partir de outro, isso é feito conectando o ftp de outra máquina e pedindo que ela envie arquivos para as portas que você deseja escanear de outra máquina; de acordo com as respostas, saberemos se estão abertas ou não. [<user>:<password>@]<server>[:<port>] Quase todos os servidores ftps não permitem mais que você faça isso e, portanto, é de pouca utilidade prática.

Análise de Foco

-p: Usado para especificar portas a escanear. Para selecionar todas as 65.335 portas: -p- ou -p all. O Nmap tem uma classificação interna baseada na popularidade. Por padrão, usa as 1000 portas principais. Com -F (escaneamento rápido), analisa as 100 principais. Com --top-ports , analisa esse número de portas principais (de 1 a 65.335). Verifica portas em ordem aleatória; para evitar isso, use -r. Também podemos selecionar portas específicas: 20-30,80,443,1024- (este último significa procurar a partir de 1024). Também podemos agrupar portas por protocolos: U:53,T:21-25,80,139,S:9. Também podemos escolher um intervalo dentro das portas populares do Nmap: -p [-1024] analisa até a porta 1024 a partir das incluídas em nmap-services. --port-ratio Analisa as portas mais comuns dentro de uma razão entre 0 e 1

-sV Escaneamento de versão, a intensidade pode ser regulada de 0 a 9, o padrão é 7.

--version-intensity Regulamos a intensidade, de modo que quanto menor for, lançará apenas as sondas mais prováveis, mas não todas. Com isso, podemos encurtar consideravelmente o tempo de escaneamento UDP

-O Detecção de SO

--osscan-limit Para uma detecção adequada de hosts, pelo menos uma porta aberta e uma porta fechada são necessárias. Se essa condição não for atendida e tivermos definido isso, não tentará prever o SO (economiza tempo)

--osscan-guess Quando a detecção de SO não é perfeita, isso faz com que tente mais

Scripts

--script |||[,...]

Para usar scripts padrão, use -sC ou --script=default

Os tipos disponíveis são: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version e vuln

  • Auth: executa todos os scripts de autenticação disponíveis
  • Default: executa scripts básicos de ferramentas padrão
  • Discovery: recupera informações do alvo ou vítima
  • External: script para usar recursos externos
  • Intrusive: usa scripts considerados intrusivos para a vítima ou alvo
  • Malware: verifica conexões abertas por código malicioso ou backdoors
  • Safe: executa scripts não intrusivos
  • Vuln: descobre as vulnerabilidades mais conhecidas
  • All: executa absolutamente todos os scripts de extensão NSE disponíveis

Para procurar scripts:

nmap --script-help="http-*" -> Aqueles que começam com http-

nmap --script-help="not intrusive" -> Todos, exceto aqueles

nmap --script-help="default or safe" -> Aqueles em qualquer um ou ambos

nmap --script-help="default and safe" --> Aqueles em ambos

nmap --script-help="(default or safe or intrusive) and not http-*"

--script-args =,={=},={,}

--script-args-file

--script-help ||||all[,...]

--script-trace ---> Fornece informações sobre como o script está progredindo

--script-updatedb

Para usar um script, basta digitar: nmap --script Script_Name target --> Ao usar o script, tanto o script quanto o scanner serão executados, então opções do scanner também podem ser adicionadas. Podemos adicionar "safe=1" para executar apenas os seguros.

Controle de Tempo

O Nmap pode modificar o tempo em segundos, minutos, ms: --host-timeout arguments 900000ms, 900, 900s e 15m fazem a mesma coisa.

O Nmap divide o número total de hosts a escanear em grupos e analisa esses grupos em blocos, assim não passa para o próximo bloco até que todos tenham sido analisados (e o usuário não recebe atualizações até que o bloco tenha sido analisado). Dessa forma, é mais otimizado para o Nmap usar grandes grupos. Por padrão, na classe C, usa 256.

Isso pode ser alterado com --min-hostgroup ; --max-hostgroup (Ajusta os tamanhos do grupo de escaneamento paralelo)

Você pode controlar o número de scanners paralelos, mas é melhor não fazê-lo (o Nmap já incorpora controle automático com base no status da rede): --min-parallelism ; --max-parallelism

Podemos modificar o tempo limite RTT, mas geralmente não é necessário: --min-rtt-timeout , --max-rtt-timeout , --initial-rtt-timeout

Podemos modificar o número de tentativas: --max-retries

Podemos modificar o tempo de escaneamento de um host: --host-timeout

Podemos modificar o tempo entre cada teste para desacelerá-lo: --scan-delay ; --max-scan-delay

Podemos modificar o número de pacotes por segundo: --min-rate ; --max-rate

Muitas portas demoram muito para responder quando filtradas ou fechadas. Se estamos apenas interessados nas abertas, podemos ir mais rápido com: --defeat-rst-ratelimit

Para definir quão agressivo queremos que o Nmap seja: -T paranoid|sneaky|polite|normal|aggressive|insane

-T (0-1)

-T0 --> Escaneia apenas 1 porta por vez e espera 5min até a próxima

-T1 e T2 --> Muito semelhantes, mas esperam apenas 15 e 0.4seg, respectivamente, entre cada teste

-T3 --> Operação padrão, inclui escaneamento paralelo

-T4 --> --max-rtt-timeout 1250ms --min-rtt-timeout 100ms --initial-rtt-timeout 500ms --max-retries 6 --max-scan-delay 10ms

-T5 --> --max-rtt-timeout 300ms --min-rtt-timeout 50ms --initial-rtt-timeout 250ms --max-retries 2 --host-timeout 15m --max-scan-delay 5ms

Firewall/IDS

Eles não permitem acesso a portas e analisam pacotes.

-f Para fragmentar pacotes, por padrão fragmenta-os em 8bytes após o cabeçalho; para especificar esse tamanho, usamos ..mtu (com isso, não use -f), o deslocamento deve ser múltiplo de 8. Scanners de versão e scripts não suportam fragmentação

-D decoy1,decoy2,ME O Nmap envia scanners, mas com outros endereços IP como origem, dessa forma eles escondem você. Se você colocar ME na lista, o Nmap o colocará lá; é melhor colocar 5 ou 6 antes de você para mascará-lo completamente. IPs aleatórios podem ser gerados com RND: Para gerar de IPs aleatórios. Eles não funcionam com detectores de versão TCP sem conexão. Se você estiver dentro de uma rede, é interessante usar IPs ativos, pois caso contrário, será muito fácil descobrir que você é o único ativo.

Para usar IPs aleatórios: nmap -D RND:10 Target_IP

-S IP Para quando o Nmap não captura seu endereço IP, você deve fornecê-lo com isso. Também serve para fazer eles pensarem que outro alvo está escaneando-os.

-e Para escolher a interface

Muitos administradores deixam portas de entrada abertas para que tudo funcione corretamente e é mais fácil para eles do que encontrar outra solução. Essas podem ser portas DNS ou portas FTP... para encontrar essa vulnerabilidade, o Nmap incorpora: --source-port ;-g Eles são equivalentes

--data Para enviar texto hexadecimal: --data 0xdeadbeef e --data \xCA\xFE\x09

--data-string Para enviar texto normal: --data-string "Escaneamento conduzido pela Segurança Ops, ramal 7192"

--data-length O Nmap envia apenas cabeçalhos; com isso, conseguimos adicionar um número de bytes a mais (que serão gerados aleatoriamente)

Para configurar completamente o pacote IP, use --ip-options

Se você deseja ver as opções nos pacotes enviados e recebidos, especifique --packet-trace. Para mais informações e exemplos de uso de opções IP com o Nmap, veja http://seclists.org/nmap-dev/2006/q3/52.

--ttl

--randomize-hosts Para tornar o ataque menos óbvio

--spoof-mac <endereço MAC, prefixo ou nome do fornecedor> Para mudar o MAC exemplos: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2 e Cisco

--proxies <Lista de URLs de proxy separadas por vírgula> Para usar proxies, às vezes um proxy não mantém tantas conexões abertas quanto o Nmap deseja, então o paralelismo precisaria ser modificado: --max-parallelism

-sP Para descobrir hosts em nossa rede por ARP

Muitos administradores criam uma regra de firewall que permite que todos os pacotes provenientes de uma porta específica passem (como 20,53 e 67); podemos dizer ao Nmap para enviar nossos pacotes dessas portas: nmap --source-port 53 IP

Saídas

-oN file Saída normal

-oX file Saída XML

-oS file Saída para script kiddies

-oG file Saída grepável

-oA file Tudo, exceto -oS

-v level verbosidade

-d level depuração

--reason Por que do host e estado

--stats-every time A cada esse tempo nos diz como está indo

--packet-trace Para ver quais pacotes saem, filtros podem ser especificados como: --version-trace ou --script-trace

--open mostra aberto, aberto|filtrado e não filtrado

--resume file Saídas um resumo

Diversos

-6 Permite IPv6

-A é o mesmo que -O -sV -sC --traceroute

Tempo de execução

Enquanto o Nmap está em execução, podemos mudar opções:

v / V Aumentar / diminuir o nível de verbosidade

d / D Aumentar / diminuir o nível de depuração

p / P Ativar / desativar rastreamento de pacotes

? Imprimir uma tela de ajuda de interação em tempo de execução

Vulscan

Script Nmap que verifica versões de serviços obtidas em um banco de dados offline (baixado de outros muito importantes) e retorna possíveis vulnerabilidades

Os DBs que ele usa são:

  1. Scipvuldb.csv | http://www.scip.ch/en/?vuldb
  2. Cve.csv | http://cve.mitre.org
  3. Osvdb.csv | http://www.osvdb.org
  4. Securityfocus.csv | http://www.securityfocus.com/bid/
  5. Securitytracker.csv | http://www.securitytracker.com
  6. Xforce.csv | http://xforce.iss.net
  7. Exploitdb.csv | http://www.exploit-db.com
  8. Openvas.csv | http://www.openvas.org

Para baixar e instalar na pasta do Nmap:

wget http://www.computec.ch/projekte/vulscan/download/nmap_nse_vulscan-2.0.tar.gz && tar -czvf nmap_nse_vulscan-2.0.tar.gz vulscan/ && sudo cp -r vulscan/ /usr/share/nmap/scripts/

Você também precisaria baixar os pacotes DB e adicioná-los a /usr/share/nmap/scripts/vulscan/

Uso:

Para usar todos: sudo nmap -sV --script=vulscan HOST_TO_SCAN

Para usar um DB específico: sudo nmap -sV --script=vulscan --script-args vulscandb=cve.csv HOST_TO_SCAN

Acelerar o escaneamento de serviços do Nmap x16

De acordo com este post, você pode acelerar a análise de serviços do nmap modificando todos os valores de totalwaitms em /usr/share/nmap/nmap-service-probes para 300 e tcpwrappedms para 200.

Além disso, sondas que não têm um servicewaitms especificamente definido usam um valor padrão de 5000. Portanto, podemos adicionar valores a cada uma das sondas ou podemos compilar o nmap nós mesmos e mudar o valor padrão em service_scan.h.

Se você não quiser mudar os valores de totalwaitms e tcpwrappedms de forma alguma no arquivo /usr/share/nmap/nmap-service-probes, você pode editar o código de análise de forma que esses valores no arquivo nmap-service-probes sejam completamente ignorados.

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks