14 KiB
Resumo do Nmap (ESP)
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você quer ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o material oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção de NFTs exclusivos
- Junte-se ao grupo 💬 Discord ou ao grupo telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do HackTricks e HackTricks Cloud.
IPs para escanear
<ip>,<net/mask>
: Indique os ips diretamente-iL <ips_file>
: list_IPs-iR <number>
: Número de Ips aleatórios, você pode excluir Ips possíveis 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 se, por exemplo, www.prueba.es/24 todas as Ips são nossos alvos.-Pn
: No ping. Isso é útil se você sabe que todos eles estão ativos (se não, você poderia perder muito tempo, mas essa opção também produz falsos negativos dizendo que eles não estão ativos), evita a fase de descoberta.-sn
: No port scan. 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, só usa 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 terminar a conexão), se responder RST está fechado e se não responder está inacessível. Caso não tenha privilégios, é usado automaticamente uma conexão total. Se nenhum porto for dado, ele joga 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 só verificam conexões TCP. Se estiver fechado, é respondido com porta inacessível, se for respondido com outro icmp ou não respondido, é deixado como destino inacessível.-PE, -PP, -PM
: ICMP PINGS: replay de eco, timestamp e addresmask. 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) pode ser respondido.-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 resto, apenas o cabeçalho IP é enviado. O propósito disso é que, devido à má formação dos cabeçalhos, Protocolo inacessível ou respostas do mesmo protocolo são respondidas para saber se está ativo.-n
: No DNS-R
: DNS sempre
Técnicas de escaneamento de portas
-sS
: Não completa a conexão, então não deixa rastro, muito bom se puder ser usado.(privilégios) É o que é usado por padrão.-sT
: Completa a conexão, então deixa 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). 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. Aumenta muito o tempo.-sY
: Protocolo SCTP falha em estabelecer a conexão, então 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 em conformidade com o padrão devem responder com RST todas as solicitações que não têm as flags SYN, RST ou ACK 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
: Maimon scan: Envia flags FIN e ACK, usado para BSD, atualmente retornará todos como fechados.-sA, sW
: ACK e Janela, é usado para detectar firewalls, para saber se os portos estão filtrados ou não. O -sW distingue entre aberto/fechado, pois 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 for alguns abertos, está funcionando bem, e se for muitos abertos e poucos fechados, está funcionando ao contrário.-sI
: Idle scan. Para os casos em que há um firewall ativo, mas sabemos que ele não filtra para um certo Ip (ou quando simplesmente queremos anonimato), podemos usar o scanner zumbi (funciona para todos os portos), para procurar possíveis zumbis podemos usar o script ipidseq ou o exploit auxiliary/scanner/ip/ipidseq. Este scanner baseia-se 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 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
: Protocolo Ip scan. Envia cabeçalhos ruins e vazios nos quais às vezes nem o protocolo pode ser distinguido. Se chegar ICMP protocolo inacessível está fechado, se chegar porta inacessível está aberto, se chegar outro erro, filtrado, se não chegar nada, aberto|filtrado.-b <server>
: FTPhost--> É usado para escanear um host a partir de outro, isso é feito conectando-se ao ftp de outra máquina e pedindo para enviar arquivos para os portos que você deseja escanear de outra máquina, de acordo com as respostas saberemos se estão abertos ou não. [<user>:<password>@]<server>[:<port>] Quase todos os servidores ftp não permitem mais fazer isso e, portanto, é de pouca utilidade prática.
Centrar análisis
-p: Serve para dar os portos 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 (fast scan) analisa os 100 principais. Com --top-ports <numero> Analisa esse número de principais (de 1 até 65335). Verifica os portos em ordem aleatória, para que isso não aconteça -r. Também podemos selecionar portos: 20-30,80,443,1024- Isso último significa que olhe para frente do 1024. Também podemos agrupar os portos por protocolos: U:53,T:21-25,80,139,S:9. Também podemos escolher um intervalo dentro dos portos populares do nmap: -p [-1024] analisa até o 1024 dos incluídos em nmap-services. --port-ratio <ratio> Analisa os portos mais comuns que uma proporção 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 só lançará as sondas mais prováveis, mas não todas. Com isso podemos reduzir consideravelmente o tempo de escaneamento UDP
-O Detecção de os
--osscan-limit Para escanear bem um host é necessário que pelo menos haja 1 porto aberto e outro fechado, se não for dada essa condição 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, and vuln
- Auth: executa todos seus scripts disponíveis para autenticação
- Default: executa os scripts básicos por defeito da ferramenta
- Discovery: recupera informação 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: revisa 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 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 ---> Dá info de como vai o script
--script-updatedb
Para usar um script só tem que colocar: namp --script Nome_do_script objetivo --> Ao colocar o script, será executado tanto o script quanto o escaner, então também se podem colocar opções do escaner, podemos adicionar “safe=1” para que se executem só os que são seguros.
Controle de tempo
Nmap pode modificar o tempo em segundos, minutos, ms: --host-timeout arguments 900000ms, 900, 900s, and 15m all do the same thing.
Nmap divide o número total de host a escanear em grupos e analisa esses grupos em blocos de forma que até que não tenham sido analisados todos, não passa ao seguinte bloco (e o usuário também não recebe nenhuma atualização até que se tenha analisado o bloco) de esta forma, é mais ótimo para nmap usar grupos grandes. Por defeito em classe C usa 256.
Pode-se mudar com**--min-hostgroup** <numhosts>; --max-hostgroup <numhosts> (Adjust parallel scan group sizes)
Pode-se controlar o número de escaners em paralelo, mas é melhor que não (nmap já incorpora controle automático baseado no estado da rede): --min-parallelism <numprobes>; --max-parallelism <numprobes>
Podemos modificar o 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 prova 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>
Muitos portos demoram muito em responder ao estar filtrados ou fechados, se só nos interessam os abertos, podemos ir mais rápido com: --defeat-rst-ratelimit
Para definir o quão agressivo queremos que seja o nmap: -T paranoid|sneaky|polite|normal|aggressive|insane
-T (0-1)
-T0 --> Só se escaneia 1 porto de cada vez e se espera 5min até o seguinte
-T1 e T2 --> Muito parecidos, mas só esperam 15 e 0,4seg respectivamente entre cada prova
-T3 --> Funcionamento por defeito, 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 a portos e analisam pacotes.
-f Para fragmentar pacotes, por defeito os fragmenta em 8bytes depois da cabeçalha, para especificar esse tamanho usamos ..mtu (com isso, não usar -f), o offset deve ser múltiplo de 8. Escaners de versão e scripts não suportam a fragmentação
-D decoy1,decoy2,ME Nmap envia escaneres, mas com outras direções IPs como origem, dessa forma te escondem a ti. Se colocares o ME na lista, nmap te situará aí, melhor colocar 5 ou 6 antes de ti para que te mascarem completamente. Pode-se gerar IPs aleatórias com RND:<numero> Para gerar <numero> de IPs aleatórias. Não funcionam com detector de versões sem conexão de TCP. Se estás dentro de uma rede, te interessa usar IPs que estejam ativas, pois senão será muito fácil descobrir que tu és a única ativa.
Para usar IPs aleatórias: nmap-D RND: 10 Ip_objetivo
-S IP Para quando Nmap não pega tua direção Ip tens que dar com isso. Também serve para fazer pensar que há outro objetivo escaneandoles.
-e <interface> Para escolher a interface
Muitos administradores deixam portos de entrada abertos para que tudo funcione corretamente e lhes é mais fácil que buscar outra solução. Estes podem ser os portos DNS ou os de FTP... para buscar essa vulnerabilidade nmap incorpora: --source-port <portnumber>;-g <portnumber> São equivalentes
--data <hex string> Para enviar texto hexadecimal: --data 0xdeadbeef and --data \xCA\xFE\x09
--data-string <string> Para enviar um texto normal: --data-string "Scan conducted by Security Ops,