# Resumo do Nmap (ESP) {{#include ../../banners/hacktricks-training.md}} ``` nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24 ``` ## Parâmetros ### IPs a escanear - **`,`:** Indique os ips diretamente - **`-iL `:** list_IPs - **`-iR `**: Número de Ips aleatórios, você pode excluir possíveis Ips com `--exclude ` ou `--excludefile `. ### 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 `**: 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 `**: Como o anterior, mas com ACK, combinando ambos dá melhores resultados. - **`-PU `**: 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`**: 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 `**: 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 `:** 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. \[\:\@]\\[:\] 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** _**