Résumé Nmap (ESP)

Reading time: 16 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

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

Paramètres

IPs à scanner

  • <ip>,<net/mask>: Indiquez les ips directement
  • -iL <ips_file>: list_IPs
  • -iR <number>: Nombre d'IPs aléatoires, vous pouvez exclure des IPs possibles avec --exclude <Ips> ou --excludefile <file>.

Découverte d'équipement

Par défaut, Nmap lance une phase de découverte consistant en : -PA80 -PS443 -PE -PP

  • -sL: Ce n'est pas invasif, il liste les cibles en effectuant des requêtes DNS pour résoudre les noms. Il est utile de savoir si par exemple www.prueba.es/24 toutes les Ips sont nos cibles.
  • -Pn: Pas de ping. Cela est utile si vous savez qu'elles sont toutes actives (sinon, vous pourriez perdre beaucoup de temps, mais cette option produit également des faux négatifs disant qu'elles ne sont pas actives), cela empêche la phase de découverte.
  • -sn : Pas de scan de ports. Après avoir complété la phase de reconnaissance, il ne scanne pas les ports. C'est relativement furtif et permet un petit scan de réseau. Avec des privilèges, il envoie un ACK (-PA) à 80, un SYN(-PS) à 443 et une requête d'écho et une requête de timestamp, sans privilèges, il complète toujours les connexions. Si la cible est le réseau, il utilise uniquement ARP(-PR). S'il est utilisé avec une autre option, seuls les paquets de l'autre option sont abandonnés.
  • -PR: Ping ARP. Il est utilisé par défaut lors de l'analyse des ordinateurs de notre réseau, il est plus rapide que d'utiliser des pings. Si vous ne souhaitez pas utiliser de paquets ARP, utilisez --send-ip.
  • -PS <ports>: Il envoie des paquets SYN auxquels, s'il répond SYN/ACK, il est ouvert (il répond avec RST pour ne pas terminer la connexion), s'il répond RST, il est fermé et s'il ne répond pas, il est injoignable. En cas de non-disponibilité de privilèges, une connexion totale est automatiquement utilisée. Si aucun port n'est donné, il l'envoie à 80.
  • -PA <ports>: Comme le précédent mais avec ACK, en combinant les deux, on obtient de meilleurs résultats.
  • -PU <ports>: L'objectif est l'inverse, ils sont envoyés à des ports qui devraient être fermés. Certains pare-feu ne vérifient que les connexions TCP. S'il est fermé, il est répondu avec port injoignable, s'il est répondu avec un autre icmp ou n'est pas répondu, il est laissé comme injoignable.
  • -PE, -PP, -PM : PINGS ICMP : réponse d'écho, timestamp et masque d'adresse. Ils sont lancés pour savoir si la cible est active.
  • -PY<ports>: Envoie des sondes SCTP INIT à 80 par défaut, INIT-ACK (ouvert) ou ABORT (fermé) ou rien ou ICMP injoignable (inactif) peuvent être répondu.
  • -PO <protocols>: Un protocole est indiqué dans les en-têtes, par défaut 1 (ICMP), 2 (IGMP) et 4 (Encap IP). Pour les protocoles ICMP, IGMP, TCP (6) et UDP (17), les en-têtes de protocole sont envoyés, pour les autres, seul l'en-tête IP est envoyé. Le but de cela est qu'en raison de la malformation des en-têtes, des réponses de protocole injoignable ou du même protocole sont renvoyées pour savoir s'il est actif.
  • -n: Pas de DNS
  • -R: DNS toujours

Techniques de scan de ports

  • -sS: Ne complète pas la connexion donc ne laisse pas de trace, très bon s'il peut être utilisé. (privilèges) C'est celui utilisé par défaut.
  • -sT: Complète la connexion, donc laisse une trace, mais peut être utilisé avec certitude. Par défaut sans privilèges.
  • -sU: Plus lent, pour UDP. Principalement : DNS(53), SNMP(161,162), DHCP(67 et 68), (-sU53,161,162,67,68) : ouvert (réponse), fermé (port injoignable), filtré (un autre ICMP), ouvert/filtré (rien). En cas d'ouvert/filtré, -sV envoie de nombreuses requêtes pour détecter l'une des versions que nmap prend en charge et peut détecter l'état réel. Cela augmente beaucoup le temps.
  • -sY: Le protocole SCTP échoue à établir la connexion, donc il n'y a pas de journaux, fonctionne comme -PY
  • -sN,-sX,-sF: Null, Fin, Xmas, ils peuvent pénétrer certains pare-feu et extraire des informations. Ils sont basés sur le fait que les machines conformes aux normes devraient répondre avec RST à toutes les requêtes qui n'ont pas de SYN, RST ou ACK : ouvert/filtré (rien), fermé (RST), filtré (ICMP injoignable). Peu fiable sur Windows, Cisco, BSDI et OS/400. Sur unix oui.
  • -sM: Scan Maimon : Envoie des drapeaux FIN et ACK, utilisé pour BSD, actuellement renverra tout comme fermé.
  • -sA, sW: ACK et Window, utilisés pour détecter les pare-feu, pour savoir si les ports sont filtrés ou non. Le -sW distingue entre ouvert/fermé puisque les ouverts répondent avec une valeur de fenêtre différente : ouvert (RST avec fenêtre autre que 0), fermé (RST fenêtre = 0), filtré (ICMP injoignable ou rien). Tous les ordinateurs ne fonctionnent pas de cette manière, donc s'il est tout fermé, cela ne fonctionne pas, s'il y a quelques ouverts, cela fonctionne bien, et s'il y en a beaucoup ouverts et peu fermés, cela fonctionne dans l'autre sens.
  • -sI: Scan Idle. Pour les cas où il y a un pare-feu actif mais nous savons qu'il ne filtre pas vers une certaine Ip (ou quand nous voulons simplement de l'anonymat), nous pouvons utiliser le scanner zombie (il fonctionne pour tous les ports), pour rechercher des zombies possibles, nous pouvons utiliser le script ipidseq ou l'exploit auxiliary/scanner/ip/ipidseq. Ce scanner est basé sur le numéro IPID des paquets IP.
  • --badsum: Envoie la somme incorrecte, les ordinateurs rejetteraient les paquets, mais les pare-feu pourraient répondre quelque chose, il est utilisé pour détecter les pare-feu.
  • -sZ: Scanner SCTP "bizarre", lors de l'envoi de sondes avec des fragments d'écho de cookie, ils devraient être abandonnés s'ils sont ouverts ou répondus avec ABORT s'ils sont fermés. Il peut passer à travers des pare-feu que init ne passe pas, le mauvais côté est qu'il ne distingue pas entre filtré et ouvert.
  • -sO: Scan de protocole Ip. Envoie de mauvais et vides en-têtes dans lesquels parfois même le protocole ne peut pas être distingué. Si un protocole injoignable ICMP arrive, il est fermé, si un port injoignable arrive, il est ouvert, si une autre erreur arrive, filtré, si rien n'arrive, ouvert|filtré.
  • -b <server>: FTPhost--> Il est utilisé pour scanner un hôte depuis un autre, cela se fait en connectant le ftp d'une autre machine et en lui demandant d'envoyer des fichiers aux ports que vous souhaitez scanner depuis une autre machine, selon les réponses, nous saurons s'ils sont ouverts ou non. [<user>:<password>@]<server>[:<port>] Presque tous les serveurs ftps ne vous laissent plus faire cela et donc c'est de peu d'utilité pratique.

Analyse de Focus

-p: Utilisé pour spécifier les ports à scanner. Pour sélectionner tous les 65,335 ports : -p- ou -p all. Nmap a une classification interne basée sur la popularité. Par défaut, il utilise les 1000 ports les plus utilisés. Avec -F (scan rapide), il analyse les 100 premiers. Avec --top-ports , il analyse ce nombre de ports les plus utilisés (de 1 à 65,335). Il vérifie les ports dans un ordre aléatoire ; pour éviter cela, utilisez -r. Nous pouvons également sélectionner des ports spécifiques : 20-30,80,443,1024- (ce dernier signifie chercher à partir de 1024). Nous pouvons également regrouper les ports par protocoles : U:53,T:21-25,80,139,S:9. Nous pouvons également choisir une plage parmi les ports populaires de Nmap : -p [-1024] analyse jusqu'au port 1024 parmi ceux inclus dans nmap-services. --port-ratio Analyse les ports les plus courants dans un ratio entre 0 et 1

-sV Scan de version, l'intensité peut être régulée de 0 à 9, par défaut c'est 7.

--version-intensity Nous régulons l'intensité, de sorte que plus elle est basse, elle lancera uniquement les sondes les plus probables, mais pas toutes. Avec cela, nous pouvons considérablement réduire le temps de scan UDP

-O Détection du système d'exploitation

--osscan-limit Pour un scan correct de l'hôte, au moins un port ouvert et un port fermé sont nécessaires. Si cette condition n'est pas remplie et que nous avons défini cela, il ne tentera pas de prédiction du système d'exploitation (économise du temps)

--osscan-guess Lorsque la détection du système d'exploitation n'est pas parfaite, cela le fait essayer plus fort

Scripts

--script |||[,...]

Pour utiliser les scripts par défaut, utilisez -sC ou --script=default

Les types disponibles sont : auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version, et vuln

  • Auth: exécute tous les scripts d'authentification disponibles
  • Default: exécute les scripts d'outils de base par défaut
  • Discovery: récupère des informations de la cible ou de la victime
  • External: script pour utiliser des ressources externes
  • Intrusive: utilise des scripts considérés comme intrusifs pour la victime ou la cible
  • Malware: vérifie les connexions ouvertes par du code malveillant ou des portes dérobées
  • Safe: exécute des scripts non intrusifs
  • Vuln: découvre les vulnérabilités les plus connues
  • All: exécute absolument tous les scripts d'extension NSE disponibles

Pour rechercher des scripts :

nmap --script-help="http-*" -> Ceux commençant par http-

nmap --script-help="not intrusive" -> Tous sauf ceux

nmap --script-help="default or safe" -> Ceux dans l'un ou l'autre ou les deux

nmap --script-help="default and safe" --> Ceux dans les deux

nmap --script-help="(default or safe or intrusive) and not http-*"

--script-args =,={=},={,}

--script-args-file

--script-help ||||all[,...]

--script-trace ---> Fournit des informations sur la progression du script

--script-updatedb

Pour utiliser un script, tapez simplement : nmap --script Script_Name target --> Lors de l'utilisation du script, à la fois le script et le scanner s'exécuteront, donc les options du scanner peuvent également être ajoutées. Nous pouvons ajouter "safe=1" pour exécuter uniquement ceux qui sont sûrs.

Contrôle du Temps

Nmap peut modifier le temps en secondes, minutes, ms : --host-timeout arguments 900000ms, 900, 900s, et 15m font tous la même chose.

Nmap divise le nombre total d'hôtes à scanner en groupes et analyse ces groupes par blocs, donc il ne passe pas au bloc suivant tant que tous n'ont pas été analysés (et l'utilisateur ne reçoit aucune mise à jour tant que le bloc n'a pas été analysé). De cette manière, il est plus optimal pour Nmap d'utiliser de grands groupes. Par défaut, dans la classe C, il utilise 256.

Cela peut être changé avec --min-hostgroup ; --max-hostgroup (Ajuster les tailles de groupe de scan parallèle)

Vous pouvez contrôler le nombre de scanners parallèles mais il est préférable de ne pas le faire (Nmap intègre déjà un contrôle automatique basé sur l'état du réseau) : --min-parallelism ; --max-parallelism

Nous pouvons modifier le délai d'attente RTT, mais cela n'est généralement pas nécessaire : --min-rtt-timeout , --max-rtt-timeout , --initial-rtt-timeout

Nous pouvons modifier le nombre de tentatives : --max-retries

Nous pouvons modifier le temps de scan d'un hôte : --host-timeout

Nous pouvons modifier le temps entre chaque test pour le ralentir : --scan-delay ; --max-scan-delay

Nous pouvons modifier le nombre de paquets par seconde : --min-rate ; --max-rate

De nombreux ports mettent longtemps à répondre lorsqu'ils sont filtrés ou fermés. Si nous ne sommes intéressés que par les ouverts, nous pouvons aller plus vite avec : --defeat-rst-ratelimit

Pour définir à quel point nous voulons que Nmap soit agressif : -T paranoid|sneaky|polite|normal|aggressive|insane

-T (0-1)

-T0 --> Scanne uniquement 1 port à la fois et attend 5min avant le suivant

-T1 et T2 --> Très similaires mais attendent seulement 15 et 0.4sec respectivement entre chaque test

-T3 --> Fonctionnement par défaut, inclut le scan parallèle

-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

Pare-feu/IDS

Ils n'autorisent pas l'accès aux ports et analysent les paquets.

-f Pour fragmenter les paquets, par défaut les fragmente en 8bytes après l'en-tête, pour spécifier cette taille, nous utilisons ..mtu (avec cela, ne pas utiliser -f), le décalage doit être un multiple de 8. Les scanners de version et les scripts ne prennent pas en charge la fragmentation

-D decoy1,decoy2,ME Nmap envoie des scanners mais avec d'autres adresses IP comme origine, de cette manière, ils vous cachent. Si vous mettez ME dans la liste, Nmap vous placera là, mieux vaut mettre 5 ou 6 avant vous pour vous masquer complètement. Des IPs aléatoires peuvent être générées avec RND: Pour générer d'IPs aléatoires. Elles ne fonctionnent pas avec les détecteurs de version TCP sans connexion. Si vous êtes à l'intérieur d'un réseau, vous êtes intéressé à utiliser des IPs actives, sinon il sera très facile de comprendre que vous êtes le seul actif.

Pour utiliser des IPs aléatoires : nmap -D RND:10 Target_IP

-S IP Pour quand Nmap ne capte pas votre adresse IP, vous devez la donner avec cela. Sert également à faire croire qu'une autre cible les scanne.

-e Pour choisir l'interface

De nombreux administrateurs laissent des ports d'entrée ouverts pour que tout fonctionne correctement et c'est plus facile pour eux que de trouver une autre solution. Ceux-ci peuvent être des ports DNS ou des ports FTP... pour trouver cette vulnérabilité, Nmap incorpore : --source-port ;-g Ils sont équivalents

--data Pour envoyer du texte hexadécimal : --data 0xdeadbeef et --data \xCA\xFE\x09

--data-string Pour envoyer du texte normal : --data-string "Scan effectué par Security Ops, extension 7192"

--data-length Nmap envoie uniquement des en-têtes, avec cela nous parvenons à ajouter un nombre de bytes supplémentaires (qui seront générés aléatoirement)

Pour configurer complètement le paquet IP, utilisez --ip-options

Si vous souhaitez voir les options dans les paquets envoyés et reçus, spécifiez --packet-trace. Pour plus d'informations et d'exemples d'utilisation des options IP avec Nmap, voir http://seclists.org/nmap-dev/2006/q3/52.

--ttl

--randomize-hosts Pour rendre l'attaque moins évidente

--spoof-mac <adresse MAC, préfixe ou nom de fournisseur> Pour changer la MAC exemples : Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, et Cisco

--proxies <Liste d'URLs de proxy séparées par des virgules> Pour utiliser des proxies, parfois un proxy ne maintient pas autant de connexions ouvertes que Nmap le souhaite, donc le parallélisme devrait être modifié : --max-parallelism

-sP Pour découvrir des hôtes dans notre réseau par ARP

De nombreux administrateurs créent une règle de pare-feu qui permet à tous les paquets provenant d'un port particulier de passer (comme 20,53 et 67), nous pouvons dire à Nmap d'envoyer nos paquets depuis ces ports : nmap --source-port 53 IP

Sorties

-oN file Sortie normale

-oX file Sortie XML

-oS file Sortie script kiddies

-oG file Sortie greppable

-oA file Tout sauf -oS

-v level verbosité

-d level débogage

--reason Pourquoi de l'hôte et état

--stats-every time Chaque fois que cela nous dit comment ça se passe

--packet-trace Pour voir quels paquets sortent, des filtres peuvent être spécifiés comme : --version-trace ou --script-trace

--open montre ouvert, ouvert|filtré et non filtré

--resume file Sorties un résumé

Divers

-6 Permet IPv6

-A est le même que -O -sV -sC --traceroute

Temps d'exécution

Pendant que Nmap fonctionne, nous pouvons changer les options :

v / V Augmenter / diminuer le niveau de verbosité

d / D Augmenter / diminuer le niveau de débogage

p / P Activer / désactiver le traçage des paquets

? Imprimer un écran d'aide d'interaction en temps réel

Vulscan

Script Nmap qui examine les versions des services obtenues dans une base de données hors ligne (téléchargée d'autres très importantes) et renvoie les vulnérabilités possibles

Les bases de données qu'il utilise sont :

  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

Pour télécharger et installer dans le dossier 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/

Vous devrez également télécharger les paquets de base de données et les ajouter à /usr/share/nmap/scripts/vulscan/

Utilisation :

Pour utiliser tout : sudo nmap -sV --script=vulscan HOST_TO_SCAN

Pour utiliser une base de données spécifique : sudo nmap -sV --script=vulscan --script-args vulscandb=cve.csv HOST_TO_SCAN

Accélérer le scan de service Nmap x16

Selon ce post, vous pouvez accélérer l'analyse de service nmap en modifiant toutes les valeurs totalwaitms dans /usr/share/nmap/nmap-service-probes à 300 et tcpwrappedms à 200.

De plus, les sondes qui n'ont pas de servicewaitms spécifiquement définie utilisent une valeur par défaut de 5000. Par conséquent, nous pouvons soit ajouter des valeurs à chacune des sondes, soit nous pouvons compiler nmap nous-mêmes et changer la valeur par défaut dans service_scan.h.

Si vous ne souhaitez pas changer les valeurs de totalwaitms et tcpwrappedms du tout dans le fichier /usr/share/nmap/nmap-service-probes, vous pouvez modifier le code de parsing de sorte que ces valeurs dans le fichier nmap-service-probes soient complètement ignorées.

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks