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

21 KiB

Nmap Summary (ESP)

{% hint style="success" %} 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
{% endhint %}

{% embed url="https://websec.nl/" %}

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

Parâmetros

IPs a 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 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 varredura de portas. Após completar a fase de reconhecimento, não escaneia 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, 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 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 varredura 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. Eles se baseiam 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. Respostas levantadas: aberto/filtrado(nada), fechado(RST), filtrado (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, 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 forma, 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: Varredura 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 auxiliar/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: Varredura 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 para ela 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 ftps não permitem mais que você faça isso e, portanto, é de pouca utilidade prática.

Centralizar análise

-p: Serve para dar as portas a escanear. Para selecionar os 65335: -p- ou -p all. O nmap tem uma classificação interna de acordo com sua popularidade. Por padrão, usa os 1000 principais. Com -F (varredura rápida) analisa os 100 principais. Com --top-ports <numero> Analisa esse número de principais (de 1 até 65335). Verifica as portas em ordem aleatória; para que isso não aconteça, use -r. Também podemos selecionar portas: 20-30,80,443,1024- Isso último significa que olhe adiante 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é 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 Escaneamento de versão, pode-se regular a intensidade de 0 a 9, por padrão 7.

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

-O Detecção de os

--osscan-limit Para escanear bem um host, é necessário que haja pelo menos 1 porta aberta e outra fechada; se essa condição não for atendida e tivermos colocado isso, não tenta fazer previsão de os (economiza tempo)

--osscan-guess Quando a detecção de os não é perfeita, isso faz com que se esforce mais

Scripts

--script <filename>|<category>|<directory>|<expression>[,...]

Para usar os de por efeito, vale com -sC ou --script=default

Os tipos que há são de: 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 por padrão da ferramenta
  • Discovery: recupera informações do target ou vítima
  • External: script para utilizar recursos externos
  • Intrusive: utiliza scripts que são considerados intrusivos para a vítima ou target
  • Malware: verifica se há conexões abertas por códigos maliciosos ou backdoors (portas traseiras)
  • Safe: executa scripts que não são intrusivos
  • Vuln: descobre as vulnerabilidades mais conhecidas
  • All: executa absolutamente todos os scripts com extensão NSE disponíveis

Para buscar scripts:

nmap --script-help="http-*" -> Os que começam por http-

nmap --script-help="not intrusive" -> Todos menos esses

nmap --script-help="default or safe" -> Os que estão em um ou em 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 ---> Dá info de como vai o script

--script-updatedb

Para usar um script, só é necessário colocar: namp --script Nome_do_script objetivo --> Ao colocar o script, ele será executado tanto o script quanto o escaneador, assim também podem ser colocadas opções do escaneador; podemos adicionar “safe=1” para que sejam executados apenas os que sejam 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, de forma que até que não tenham sido analisados todos, não passa para o próximo bloco (e o usuário também não recebe nenhuma atualização até que o bloco tenha sido analisado); dessa forma, é mais otimizado para o nmap usar grupos grandes. Por padrão, na classe C, usa 256.

Pode-se mudar com --min-hostgroup <numhosts>; --max-hostgroup <numhosts> (Ajusta tamanhos de grupos de varredura paralela)

Pode-se controlar o número de escaneadores em paralelo, mas é melhor não (o nmap já incorpora controle automático com base no estado da rede): --min-parallelism <numprobes>; --max-parallelism <numprobes>

Podemos modificar o tempo de rtt timeout, mas não costuma ser 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 vá devagar: --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 ao estarem filtradas ou fechadas; se só nos interessam as 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 --> Só se escaneia 1 porta por vez e se espera 5min até a seguinte

-T1 e T2 --> Muito parecidos, mas só esperam 15 e 0,4seg respectivamente entre cada teste

-T3 --> Funcionamento por 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

Não deixam passar para portas e analisam pacotes.

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

-D decoy1,decoy2,ME O Nmap envia escaneadores, mas com outros endereços IP como origem, dessa forma te escondem. Se você colocar o ME na lista, o nmap te situará aí; é melhor colocar 5 ou 6 antes de você para que te enmascarem completamente. Podem ser gerados Ips aleatórios com RND:<numero> Para gerar <numero> de Ips aleatórias. Não funcionam com detector de versões sem conexão de TCP. Se você estiver dentro de uma rede, é interessante usar Ips que estejam ativas, pois senão será muito fácil descobrir que você é o único ativo.

Para usar Ips aleatórias: nmap-D RND: 10 Ip_objetivo

-S IP Para quando o Nmap não pega seu endereço Ip, você tem que dar com isso. Também serve para fazer pensar que há outro objetivo 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 buscar outra solução. Estes podem ser os portos DNS ou os de 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 "Scan conducted by Security Ops, extension 7192"

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

Para configurar o pacote IP completamente, 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 Nmap, veja http://seclists.org/nmap-dev/2006/q3/52.

--ttl <value>

--randomize-hosts Para que o ataque seja menos óbvio

--spoof-mac <MAC address, prefix, or vendor name> Para mudar a mac exemplos: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, e Cisco

--proxies <Comma-separated list of proxy URLs> Para usar proxies; às vezes um proxy não mantém tantas conexões abertas quanto o nmap quer, por isso seria necessário modificar o paralelismo: --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 que provêm de um porto em particular (como o 20,53 e 67); podemos dizer ao nmap que mande nossos pacotes a partir desses portos: nmap --source-port 53 Ip

Saídas

-oN file Saída normal

-oX file Saída XML

-oS file Saída de script kiddies

-oG file Saída grepable

-oA file Todos menos -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 vai

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

--open mostra os abertos, abertos|filtrados e os não filtrados

--resume file Saca um resumo

Miscelânea

-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 do nmap que verifica as versões dos serviços obtidos em um banco de dados offline (que baixa de outros muito importantes) e retorna as possíveis vulnerabilidades

Os BD que 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/

Também seria necessário baixar os pacotes dos BD e adicioná-los a /usr/share/nmap/scripts/vulscan/

Uso:

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

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

Acelere a varredura 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.

{% embed url="https://websec.nl/" %}

{% hint style="success" %} 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
{% endhint %}