Nmap Summary (ESP)
Last updated
Last updated
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training 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 possíveis Ips com --exclude <Ips>
ou --excludefile <file>
.
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
-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.
-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:
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 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
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.
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)