Nmap Summary (ESP)
Last updated
Last updated
Aprenda e pratique Hacking AWS:Treinamento HackTricks AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: Treinamento HackTricks GCP Red Team Expert (GRTE)
<ip>,<net/mask>
: Indica os IPs diretamente
-iL <ips_file>
: lista_IPs
-iR <number>
: Número de IPs aleatórios, você pode excluir IPs possíveis com --exclude <Ips>
ou --excludefile <file>
.
Por padrão, o Nmap lança uma fase de descoberta consistindo em: -PA80 -PS443 -PE -PP
-sL
: Não é invasivo, lista os alvos fazendo solicitações de DNS para resolver nomes. É útil para saber, por exemplo, se www.prueba.es/24 todos os IPs são nossos alvos.
-Pn
: Sem ping. Isso é útil se você souber que todos estão ativos (caso contrário, você poderia perder muito tempo, mas essa opção também produz falsos negativos dizendo que não estão ativos), evita a fase de descoberta.
-sn
: Sem varredura de porta. Após completar a fase de reconhecimento, não varre portas. É relativamente furtivo e permite uma pequena varredura 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, 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 não quiser usar pacotes ARP, use --send-ip
.
-PS <ports>
: Envia pacotes SYN para os quais, se responder SYN/ACK, está aberto (se responder com RST para não encerrar a conexão), se responder RST está fechado e se não responder está inalcançável. Caso não tenha privilégios, uma conexão total é usada automaticamente. Se nenhum porto for fornecido, ele envia 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 estarem fechadas. Alguns firewalls verificam apenas conexões TCP. Se estiver fechado, é respondido com porta inalcançável, se for respondido com outro icmp ou não for respondido, é deixado como inalcançável.
-PE, -PP, -PM
: PINGS ICMP: resposta de eco, timestamp e máscara de endereço. 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 inalcançá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 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, Protocolo inalcançável ou respostas do mesmo protocolo são respondidas para saber se está ativo.
-n
: Sem DNS
-R
: DNS sempre
-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 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 inalcançável), filtrado (outro ICMP), aberto/filtrado (nada). Em 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. Isso aumenta muito o tempo.
-sY
: O protocolo SCTP falha em estabelecer a conexão, portanto, não há logs, funciona como -PY
-sN,-sX,-sF
: Null, Fin, Xmas, podem penetrar em 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 possuem flags SYN, RST ou ACK levantadas: aberto/filtrado(nada), fechado(RST), filtrado (ICMP inalcançá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 aberto/fechado, já que os abertos respondem com um valor de janela diferente: aberto (RST com janela diferente de 0), fechado (janela RST = 0), filtrado (ICMP inalcançável ou nada). Nem todos os computadores funcionam dessa maneira, então se estiverem todos fechados, não está funcionando, se estiverem alguns abertos, está funcionando bem, e se estiverem muitos abertos e poucos fechados, está funcionando ao contrário.
-sI
: Varredura ociosa. Para os casos em que há um firewall ativo, mas sabemos que 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 eco de cookie eles devem ser descartados se estiverem abertos ou respondidos com ABORT se estiverem fechados. Pode passar por firewalls que o init não passa, o ruim é que não distingue entre filtrado e aberto.
-sO
: Varredura de protocolo Ip. Envia cabeçalhos ruins e vazios nos quais às vezes nem mesmo o protocolo pode ser distinguido. Se chegar um protocolo ICMP inalcançável está fechado, se chegar uma porta inalcançável está aberto, se chegar outro erro, filtrado, se não chegar nada, 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>] Quase todos os servidores ftp não permitem mais isso e, portanto, tem pouco uso prático.
-p: Serve para fornecer as portas a serem escaneadas. Para selecionar as 65335: -p- ou -p all. O Nmap tem uma classificação interna de acordo com sua popularidade. Por padrão, usa as 1000 principais. Com -F (varredura rápida) analisa as 100 principais. Com --top-ports <numero> Analisa esse número de principais (de 1 até os 65335). Verifica as portas em ordem aleatória, para evitar isso -r. Também podemos selecionar portas: 20-30,80,443,1024- Isso último significa que olhe para frente do 1024. Também podemos agrupar as 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é o 1024 dos incluídos em nmap-services. --port-ratio <ratio> Analisa as portas mais comuns que um ratio que deve estar entre 0 e 1
-sV Varredura de versão, a intensidade pode ser ajustada de 0 a 9, por padrão 7.
--version-intensity <numero> Regula a intensidade, de modo que quanto mais baixa, apenas enviará as sondas mais prováveis, mas não todas. Com isso, podemos encurtar consideravelmente o tempo de varredura UDP
-O Detecção de SO
--osscan-limit Para escanear corretamente um host, é necessário que pelo menos uma porta esteja aberta e outra fechada, se essa condição não for atendida e tivermos definido isso, não tentará fazer previsão de SO (economiza tempo) --osscan-guess Quando a detecção de os não é perfeita, isso faz com que o Nmap se esforce mais.
Scripts
--script <filename>|<category>|<directory>|<expression>[,...]
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-*" -> Os que começam com http-
nmap --script-help="not intrusive" -> Todos exceto esses
nmap --script-help="default or safe" -> Os que estão em um ou no outro ou em ambos
nmap --script-help="default and safe" --> Os 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 <filename>
--script-help <filename>|<category>|<directory>|<expression>|all[,...]
--script-trace ---> Fornece informações sobre como o script está sendo executado
--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 seguros.
Controle de tempo
Nmap pode modificar o tempo em segundos, minutos, ms: --host-timeout arguments 900000ms, 900, 900s e 15m fazem a mesma coisa.
Nmap divide o número total de hosts a serem escaneados em grupos e analisa esses grupos em blocos, de forma que não passa para o próximo bloco até que todos os hosts tenham sido analisados (e o usuário também não recebe nenhuma atualização até que o bloco tenha sido analisado). Dessa forma, é mais eficiente para o Nmap usar grupos grandes. Por padrão, em classe C, usa 256.
Pode ser alterado com**--min-hostgroup** <numhosts>; --max-hostgroup <numhosts> (Ajusta os tamanhos dos grupos de escaneamento paralelo)
É possível controlar o número de scanners em paralelo, mas é melhor não fazer isso (o Nmap já incorpora um controle automático com base no estado da rede): --min-parallelism <numprobes>; --max-parallelism <numprobes>
Podemos modificar o tempo de rtt timeout, 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 que seja mais lento: --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 a responder quando estão filtradas ou fechadas, se só nos interessam as 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 é escaneada de cada vez e aguarda 5 minutos até o próximo
-T1 e T2 --> Muito semelhantes, mas aguardam apenas 15 e 0,4 segundos entre cada teste, respectivamente
-T3 --> Funcionamento padrão, inclui em 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
Bloqueiam portas e analisam pacotes.
-f Para fragmentar pacotes, por padrão os fragmenta em 8 bytes após o cabeçalho, para especificar esse tamanho, usamos ..mtu (com isso, não usar -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, assim você fica oculto. Se você colocar o ME na lista, o Nmap o posicionará lá, é melhor colocar 5 ou 6 antes de você para se mascarar completamente. É possível gerar IPs aleatórios com RND:<numero> Para gerar <numero> de IPs aleatórios. Não funcionam com detecção de versões sem conexão TCP. Se 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 detecta seu endereço IP, você precisa fornecê-lo com isso. Também serve para fazer parecer que há outro alvo os escaneando.
-e <interface> Para escolher a interface
Muitos administradores deixam portas de entrada abertas para que tudo funcione corretamente e seja mais fácil do que procurar outra solução. Essas podem ser as portas DNS ou FTP... para buscar essa vulnerabilidade, o Nmap incorpora: --source-port <portnumber>;-g <portnumber> São equivalentes
--data <hex string> Para enviar texto hexadecimal: --data 0xdeadbeef e --data \xCA\xFE\x09
--data-string <string> Para enviar um texto normal: --data-string "Escaneamento realizado pela Segurança Operacional, ramal 7192"
--data-length <number> O Nmap envia apenas cabeçalhos, com isso conseguimos adicionar um número adicional de bytes (que serão gerados aleatoriamente)
Para configurar completamente o pacote IP, use --ip-options
Se 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.
--ttl <value>
--randomize-hosts Para tornar o ataque menos óbvio
--spoof-mac <MAC address, prefix, or vendor name> Para alterar o endereço MAC, exemplos: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2 e Cisco --proxies <Lista de URLs de proxy separadas por vírgulas> Para usar proxies, às vezes um proxy não mantém tantas conexões abertas quanto o nmap deseja, então é necessário modificar o paralelismo: --max-parallelism
-sP Para descobrir hosts na rede em que estamos através do 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 no formato grepable
-oA arquivo Todas as saídas, exceto -oS
-v nível verbosidade
-d nível depuração
--reason Motivo do host e estado
--stats-every tempo A cada tempo especificado, mostra o progresso
--packet-trace Para ver quais pacotes estão sendo enviados, filtros podem ser especificados, como: --version-trace ou --script-trace
--open Mostra os hosts abertos, abertos|filtrados e não filtrados
--resume arquivo Gera um resumo
Miscelânea
-6 Permite o uso do IPv6
-A Equivalente a -O -sV -sC --traceroute
Tempo de execução
Enquanto o nmap está em execução, 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
? Exibir uma tela de ajuda de interação em tempo de execução
Vulscan
Script do nmap que verifica as versões dos serviços obtidos em um banco de dados offline (baixado de fontes muito importantes) e retorna possíveis vulnerabilidades
Os bancos de dados usados são:
Scipvuldb.csv | http://www.scip.ch/en/?vuldb
Cve.csv | http://cve.mitre.org
Osvdb.csv | http://www.osvdb.org
Securityfocus.csv | http://www.securityfocus.com/bid/
Securitytracker.csv | http://www.securitytracker.com
Xforce.csv | http://xforce.iss.net
Exploitdb.csv | http://www.exploit-db.com
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/
Também é necessário baixar os pacotes dos bancos de dados e adicioná-los em /usr/share/nmap/scripts/vulscan/
Uso:
Para usar todos: sudo nmap -sV --script=vulscan HOST_A_ESCANEAR
Para usar um banco de dados específico: sudo nmap -sV --script=vulscan --script-args vulscandb=cve.csv HOST_A_ESCANEAR
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, as 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 alterar o valor padrão em service_scan.h.
Se você não deseja alterar os valores de totalwaitms
e tcpwrappedms
no arquivo /usr/share/nmap/nmap-service-probes
, você pode editar o código de análise para que esses valores no arquivo nmap-service-probes
sejam completamente ignorados.
Aprenda e pratique Hacking na AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking no GCP: HackTricks Training GCP Red Team Expert (GRTE)