hacktricks/generic-methodologies-and-resources/pentesting-network/nmap-summary-esp.md

273 lines
22 KiB
Markdown

# Resumo do Nmap (ESP)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
```
nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24
```
## Parâmetros
### IPs para escanear
* **`<ip>,<net/mask>`:** Indica os IPs diretamente.
* **`-iL <ips_file>`:** lista_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 solicitações **DNS** para resolver nomes. É útil para saber, por exemplo, se todos os IPs de www.prueba.es/24 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 pode produzir falsos negativos dizendo que eles não estão ativos. Ela impede a fase de descoberta.
* **`-sn`** : **Sem varredura de porta**. Após concluir a fase de reconhecimento, não faz a varredura de portas. É relativamente furtivo e permite uma pequena varredura de rede. Com privilégios, envia um ACK (-PA) para a porta 80, um SYN(-PS) para a porta 443 e uma solicitação de eco e uma solicitação de carimbo de data/hora. Sem privilégios, sempre completa as conexões. Se o alvo for a rede, ele 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 as portas, se responder SYN/ACK, está aberta (responde com RST para não encerrar a conexão), se responder RST, está fechada e se não responder, está inacessível. Caso não tenha privilégios, é usada uma conexão total. Se nenhuma porta for fornecida, é enviada para a porta 80.
* **`-PA <ports>`**: Semelhante ao anterior, mas com ACK, a combinação de 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 fechada, é respondida com "porta inacessível", se for respondida com outro ICMP ou não for respondida, é considerada como "destino inacessível".
* **`-PE, -PP, -PM`** : PINGS ICMP: resposta de eco, carimbo de data/hora e máscara de endereço. São lançados para descobrir se o alvo está ativo.
* **`-PY<ports>`**: Envia sondas SCTP INIT para a porta 80 por padrão, pode responder com INIT-ACK(aberta) ou ABORT(fechada) ou nada ou ICMP inacessível(inativo).
* **`-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 do protocolo são enviados, para o restante, apenas o cabeçalho IP é enviado. O objetivo disso é que, devido à má formação dos cabeçalhos, sejam respondidos Protocolo inacessível ou respostas do mesmo protocolo para saber se está ativo.
* **`-n`**: Sem DNS
* **`-R`**: Sempre DNS
### Técnicas de varredura de portas
* **`-sS`**: Não completa a conexão, portanto, não deixa rastros, muito bom se puder ser usado (privilégios). É o usado por padrão.
* **`-sT`**: Completa a conexão, portanto, deixa rastros, mas pode ser usado com segurança. 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): aberta(resposta), fechada(porta inacessível), filtrada(outro ICMP), aberta/filtrada (nada). No caso de aberta/filtrada, -sV envia várias solicitações para detectar qualquer uma das versões que o nmap suporta e pode detectar o estado real. Isso aumenta muito o tempo.
* **`-sY`**: O protocolo SCTP falha ao estabelecer a conexão, portanto, não há registros, funciona como -PY.
* **`-sN,-sX,-sF`:** Null, Fin, Xmas, podem penetrar em alguns firewalls e extrair informações. Eles se baseiam no fato de que máquinas compatíveis com os padrões devem responder com RST a todas as solicitações que não possuem flags SYN, RST ou ACK levantadas: aberta/filtrada(nada), fechada(RST), filtrada(ICMP inacessível). Não confiável no Windows, CIsco, BSDI e OS/400. No Unix, sim.
* **`-sM`**: Varredura Maimon: Envia flags FIN e ACK, usada para BSD, atualmente retornará todas como fechadas.
* **`-sA, sW`**: ACK e Window, são usados para detectar firewalls, para saber se as portas estão filtradas ou não. O -sW distingue entre aberta/fechada, pois as abertas respondem com um valor de janela diferente: aberta (RST com janela diferente de 0), fechada (RST com janela = 0), filtrada (ICMP inacessível ou nada). Nem todos os computadores funcionam dessa maneira, portanto, se estiverem todos fechados, não está funcionando, se alguns estiverem abertos, está funcionando corretamente e se muitos estiverem abertos e poucos fechados, está funcionando ao contrário.
* **`-sI`:** Varredura ociosa. 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. Esse 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 eco de cookie, eles devem ser descartados se estiverem abertos ou respondidos com ABORT se estiverem fechados. Ele pode passar por firewalls que o init não passa, o ruim é que ele não distingue entre filtrado e aberto.
* **`-sO`:** Varredura de protocolo IP. Envia cabeçalhos incorretos e vazios, nos quais às vezes nem mesmo o protocolo pode ser distinguido. Se chegar um protocolo ICMP inacessível, está fechado, se chegar uma porta inacessível, está aberto, se chegar outro erro, está filtrado, se não chegar nada, está aberto|filtrado.
* **`-b <server>`:** FTPhost--> É usado para escanear um host de outro, isso é feito conectando o FTP de outra máquina e pedindo para enviar 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>] A maioria dos servidores FTP não permite mais fazer isso e, portanto, tem pouco uso prático.
### **Análise Centralizada**
**-p:** Define as portas a serem escaneadas. Para selecionar todas as 65335 portas: **-p-** ou **-p all**. O Nmap possui uma classificação interna com base em sua popularidade. Por padrão, ele usa as 1000 portas mais comuns. Com **-F** (escaneamento rápido), ele analisa as 100 portas mais comuns. Com **--top-ports \<número>**, ele analisa o número especificado de portas principais (de 1 a 65335). Ele verifica as portas em ordem aleatória para evitar detecção, usando **-r**. Também é possível selecionar portas específicas: 20-30,80,443,1024- Isso significa que ele irá verificar a partir da porta 1024. Também é possível agrupar portas por protocolos: U:53,T:21-25,80,139,S:9. Também é possível escolher um intervalo dentro das portas populares do Nmap: -p \[-1024] verifica até a porta 1024 das incluídas no nmap-services. **--port-ratio \<ratio>** Verifica as portas mais comuns com uma taxa que deve estar entre 0 e 1.
**-sV** Verificação de versão, a intensidade pode ser ajustada de 0 a 9, sendo 7 o padrão.
**--version-intensity \<número>** Ajusta a intensidade, de forma que quanto menor for, ele enviará apenas as sondas mais prováveis, mas não todas. Isso pode reduzir significativamente o tempo de escaneamento UDP.
**-O** Detecção de sistema operacional.
**--osscan-limit** Para escanear um host corretamente, é necessário que pelo menos uma porta esteja aberta e outra esteja fechada. Se essa condição não for atendida e essa opção estiver ativada, ele não tentará fazer uma previsão do sistema operacional (economizando tempo).
**--osscan-guess** Quando a detecção do sistema operacional não é perfeita, isso faz com que ele faça um esforço adicional.
**Scripts**
\--script _\<nome_do_arquivo>_|_\<categoria>_|_\<diretório>_|_\<expressão>_\[,...]
Para usar os scripts padrão, basta usar -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 disponíveis para autenticação.
* **Default:** executa os scripts básicos padrão da ferramenta.
* **Discovery:** recupera informações do alvo ou vítima.
* **External:** script para utilizar recursos externos.
* **Intrusive:** utiliza scripts considerados intrusivos para o alvo ou vítima.
* **Malware:** verifica se há conexões abertas por códigos maliciosos ou backdoors.
* **Safe:** executa scripts que não são intrusivos.
* **Vuln:** descobre as vulnerabilidades mais conhecidas.
* **All:** executa todos os scripts NSE disponíveis.
Para buscar scripts:
**nmap --script-help="http-\*" -> Aqueles que começam com http-**
**nmap --script-help="not intrusive" -> Todos, exceto esses**
**nmap --script-help="default or safe" -> Aqueles que estão em um ou em outro ou em ambos**
**nmap --script-help="default and safe" --> Aqueles que estão em ambos**
**nmap --script-help="(default or safe or intrusive) and not http-\*"**
\--script-args _\<n1>_=_\<v1>_,_\<n2>_={_\<n3>_=_\<v3>_},_\<n4>_={_\<v4>_,_\<v5>_}
\--script-args-file _\<nome_do_arquivo>_
\--script-help _\<nome_do_arquivo>_|_\<categoria>_|_\<diretório>_|_\<expressão>_|all\[,...]
\--script-trace ---> Fornece informações sobre o andamento do script.
\--script-updatedb
**Para usar um script, basta digitar: nmap --script Nome_do_script alvo** --> Ao especificar o script, ele será executado juntamente com o scanner, portanto, também é possível adicionar opções do scanner. Podemos adicionar **"safe=1"** para executar apenas os scripts considerados seguros.
**Controle de tempo**
**O Nmap pode ajustar 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 serem escaneados em grupos e analisa esses grupos em blocos, de forma que ele só passa para o próximo bloco quando todos os hosts do bloco atual forem analisados (e o usuário não recebe nenhuma atualização até que o bloco seja concluído). Isso torna mais eficiente para o Nmap usar grupos grandes. Por padrão, ele usa 256 para classe C.
Isso pode ser alterado com **--min-hostgroup** _**\<numhosts>**_**;** **--max-hostgroup** _**\<numhosts>**_ (Ajusta o tamanho dos grupos de escaneamento paralelo)
É possível controlar o número de scanners paralelos, mas é melhor deixar o Nmap fazer isso automaticamente com base no estado da rede: **--min-parallelism** _**\<numprobes>**_**;** **--max-parallelism** _**\<numprobes>**_
Podemos ajustar o tempo limite do RTT, mas geralmente não é necessário: **--min-rtt-timeout** _**\<time>**_**,** **--max-rtt-timeout** _**\<time>**_**,** **--initial-rtt-timeout** _**\<time>**_
Podemos ajustar o número de tentativas: **--max-retries** _**\<numtries>**_
Podemos ajustar o tempo de escaneamento de um host: **--host-timeout** _**\<time>**_
Podemos ajustar o tempo entre cada teste para torná-lo mais lento: **--scan-delay** _**\<time>**_**;** **--max-scan-delay** _**\<time>**_
Podemos ajustar o número de pacotes por segundo: **--min-rate** _**\<number>**_**;** **--max-rate** _**\<number>**_
Muitas portas demoram muito para responder quando estão filtradas ou fechadas. Se só nos interessam as portas abertas, podemos acelerar o processo com: **--defeat-rst-ratelimit**
Para definir o quão agressivo queremos que o Nmap seja: -T paranoid|sneaky|polite|normal|aggressive|insane
\-T (0-1)
\-T0 --> Apenas uma porta é verificada de cada vez e espera-se 5 minutos antes da próxima.
\-T1 e T2 --> Muito semelhantes, mas esperam apenas 15 e 0,4 segundos, respectivamente, entre cada teste.
\-T3 --> Comportamento padrão, inclui paralelismo.
\-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 bloqueiam portas e analisam pacotes.
**-f** Para fragmentar pacotes, por padrão ele os fragmenta em 8 bytes após o cabeçalho, para especificar esse tamanho usamos ..mtu (com isso, não use -f), o offset 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 ele te esconde. Se você colocar o ME na lista, o Nmap te colocará lá, é melhor colocar 5 ou 6 antes de você para te mascarar completamente. É possível gerar IPs aleatórios com RND:\<número> para gerar \<número> de IPs aleatórios. Eles não funcionam com detecção de versões sem conexão TCP. Se você estiver dentro de uma rede, é interessante usar IPs que estejam ativos, caso contrário será muito fácil descobrir que você é o único ativo.
Para usar IPs aleatórios: nmap -D RND:10 Ip\_alvo
**-S IP** Quando o Nmap não pega seu endereço IP, você precisa fornecê-lo com isso. Também serve para fazer parecer que há outro alvo escaneando-os.
**-e \<interface>** Para escolher a interface
Muitos administradores deixam portas de entrada abertas para que tudo funcione corretamente e seja mais fácil para eles do que procurar outra solução. Essas portas podem ser as portas DNS ou as portas FTP... para procurar essa vulnerabilidade, o Nmap incorpora: **--source-port** _**\<númeroda porta>**_**;-g** _**\<númeroda porta>**_ _São equivalentes_
**--data** _**\<string hexadecimal>**_ Para enviar texto hexadecimal: --data 0xdeadbeef e --data \xCA\xFE\x09
**--data-string** _**\<string>**_ Para enviar um texto normal: --data-string "Scan conducted by Security Ops, extension 7192"
**--data-length** _**\<número>**_ O Nmap envia apenas cabeçalhos, com isso conseguimos adicionar a eles 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, consulte [http://seclists.org/nmap-dev/2006/q3/52](http://seclists.org/nmap-dev/2006/q3/52).
**--ttl** _**\<valor>**_
**--randomize-hosts** Para tornar o ataque menos óbvio
**--spoof-mac** _**\<endereço MAC, prefixo ou nome do fornecedor>**_ Para alterar o endereço MAC, exemplos: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2 e Cisco
**--proxies** _**\<lista separada por vírgulas de URLs de proxy>**_ Para usar proxies, às vezes um proxy não mantém tantas conexões abertas quanto o Nmap deseja, então é necessário modificar a paralelização: --max-parallelism
**-sP** Para descobrir hosts na rede em que estamos por ARP
Muitos administradores criam uma regra no firewall que permite passar todos os pacotes provenientes de uma porta específica (como 20, 53 e 67), podemos dizer ao Nmap para enviar nossos pacotes a partir dessas portas: **nmap --source-port 53 Ip**
**Saídas**
**-oN arquivo** Saída normal
**-oX arquivo** Saída XML
**-oS arquivo** Saída de script kiddies
**-oG arquivo** Saída grepable
**-oA arquivo** Todas, exceto -oS
**-v nível** verbosidade
**-d nível** depuração
**--reason** Motivo do host e estado
**--stats-every tempo** A cada esse tempo, nos diz como está indo
**--packet-trace** Para ver quais pacotes estão sendo enviados, é possível especificar filtros como: --version-trace ou --script-trace
**--open** mostra os abertos, abertos|filtrados e os não filtrados
**--resume arquivo** Gera um resumo
**Miscelânea**
**-6** Permite IPv6
**-A** é o mesmo que -O -sV -sC --traceroute
**Tempo de execução**
Enquanto o Nmap está sendo executado, podemos alterar as 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 o rastreamento de pacotes
? Imprimir uma tela de ajuda interativa em tempo de execução
**Vulscan**
Script do Nmap que verifica as versões dos serviços obtidos em um banco de dados offline (que é baixado de outros bancos muito importantes) e retorna as possíveis vulnerabilidades
Os bancos de dados que ele usa são:
1. Scipvuldb.csv | [http://www.scip.ch/en/?vuldb](http://www.scip.ch/en/?vuldb)
2. Cve.csv | [http://cve.mitre.org](http://cve.mitre.org/)
3. Osvdb.csv | [http://www.osvdb.org](http://www.osvdb.org/)
4. Securityfocus.csv | [http://www.securityfocus.com/bid/](http://www.securityfocus.com/bid/)
5. Securitytracker.csv | [http://www.securitytracker.com](http://www.securitytracker.com/)
6. Xforce.csv | [http://xforce.iss.net](http://xforce.iss.net/)
7. Exploitdb.csv | [http://www.exploit-db.com](http://www.exploit-db.com/)
8. Openvas.csv | [http://www.openvas.org](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/
Também é necessário baixar os pacotes dos bancos de dados e adicioná-los a /usr/share/nmap/scripts/vulscan/
Uso:
Para usar todos: sudo nmap -sV --script=vulscan HOST\_A\_SER\_ESCANADO
Para usar um banco de dados específico: sudo nmap -sV --script=vulscan --script-args vulscandb=cve.csv HOST\_A\_SER\_ESCANADO
## Acelerar a varredura de serviços do Nmap em x16
De acordo com [**este post**](https://joshua.hu/nmap-speedup-service-scanning-16x), 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, as sondas que não possuem um valor especificamente definido para **`servicewaitms`** 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 alterar o valor padrão em [**service\_scan.h**](https://github.com/nmap/nmap/blob/master/service\_scan.h#L79).
Se você não quiser alterar os valores de **`totalwaitms`** e **`tcpwrappedms`** no arquivo `/usr/share/nmap/nmap-service-probes`, você pode editar o [código de análise](https://github.com/nmap/nmap/blob/master/service\_scan.cc#L1358) para que esses valores no arquivo `nmap-service-probes` sejam completamente ignorados.
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>