258 lines
18 KiB
Markdown

# 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
- **`<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 <number>**, 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 <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 <number>** 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 _<filename>_|_<category>_|_<directory>_|_<expression>_[,...]
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 _<n1>_=_<v1>_,_<n2>_={_<n3>_=_<v3>_},_<n4>_={_<v4>_,_<v5>_}
--script-args-file _<filename>_
--script-help _<filename>_|_<category>_|_<directory>_|_<expression>_|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** _**<numhosts>**_**;** **--max-hostgroup** _**<numhosts>**_ (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** _**<numprobes>**_**;** **--max-parallelism** _**<numprobes>**_
Podemos modificar o tempo limite RTT, mas geralmente não é necessário: **--min-rtt-timeout** _**<time>**_**,** **--max-rtt-timeout** _**<time>**_**,** **--initial-rtt-timeout** _**<time>**_
Podemos modificar o número de tentativas: **--max-retries** _**<numtries>**_
Podemos modificar o tempo de escaneamento de um host: **--host-timeout** _**<time>**_
Podemos modificar o tempo entre cada teste para desacelerá-lo: **--scan-delay** _**<time>**_**;** **--max-scan-delay** _**<time>**_
Podemos modificar o número de pacotes por segundo: **--min-rate** _**<number>**_**;** **--max-rate** _**<number>**_
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:<number> Para gerar <number> 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 <interface>** 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** _**<portnumber>**_**;-g** _**<portnumber>**_ _Eles são equivalentes_
**--data** _**<hex string>**_ Para enviar texto hexadecimal: --data 0xdeadbeef e --data \xCA\xFE\x09
**--data-string** _**<string>**_ Para enviar texto normal: --data-string "Escaneamento conduzido pela Segurança Ops, ramal 7192"
**--data-length** _**<number>**_ 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](http://seclists.org/nmap-dev/2006/q3/52).
**--ttl** _**<value>**_
**--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](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/
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**](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, 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**](https://github.com/nmap/nmap/blob/master/service_scan.h#L79).
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](https://github.com/nmap/nmap/blob/master/service_scan.cc#L1358) de forma que esses valores no arquivo `nmap-service-probes` sejam completamente ignorados.
{{#include ../../banners/hacktricks-training.md}}