Comprendre les différents type de scans Nmap
 >  2019 , Réseaux , Sécuriser par l'attaque






À quoi servent les différents type de scan TCP Nmap (SYN, TCP Connect, FIN, XMAS, FIN et NULL) ? Comment interpréter les résultats ? Voici un petit topo.





0x01. LABO & MÉTHODOLOGIE


Le labo est composé de deux machines virtuelles sous Debian. Cette méthodologie scriptée, nous permettra de tester les différentes techniques de scan, d’afficher les résultats et la raison des résultats. En arrière plan, un sniffer est lancé (tshark), et enregistre les trames dans un fichier capture.pcap :


tshark -i vmnet8 -w capture.pcap


La machine qui sera l’objet de scan sera une VM sous Debian, avec comme règles :


killall ncat
iptables -X
iptables -F
iptables -Z
iptables -I INPUT -p tcp -m multiport --dports 41000:41010 -j DROP
iptables -I INPUT -p tcp -m multiport --dports 42000:42010 -j REJECT
( for i in $(seq 0 10) ; do ncat -klp $((44000+i)) & done & >/dev/null 2>&1 ) >/dev/null 2>&1


Le client n’aura pas de règles de firewall. Il aura le script suivant, qui permettra de scanner sur l’ensemble des ports et des switch TCP nmap :


target=172.42.208.182
filtered_port=41001
rejected_port=42001
closed_port=43001
open_port=44001
 
printf "\nFlag | Etat du port   | Port   | Résultat du scan  | Raison"
printf "\n---- | -------------- | ------ | ----------------- | ------------------"
 
for flag in sT sS sA sF sX sM sN ; do
 
  result=$(nmap -n -Pn -$flag $target -p $open_port --reason|grep '/tcp')
  state=$(echo "$result"|awk '{ print $2 }')
  reason=$(echo "$result"|awk -F'unknown ' '{ print $2 }')
  real_state="open"
  printf "\n%-4s | %-14s | %-6s | %-17s | %s" "$flag" "$real_state" "$open_port" "$state" "$reason"
 
  result=$(nmap -n -Pn -$flag $target -p $closed_port --reason|grep '/tcp')
  state=$(echo "$result"|awk '{ print $2 }')
  reason=$(echo "$result"|awk -F'unknown ' '{ print $2 }')
  real_state="closed"
  printf "\n%-4s | %-14s | %-6s | %-17s | %s" "$flag" "$real_state" "$closed_port" "$state" "$reason"
 
  result=$(nmap -n -Pn -$flag $target  -p $rejected_port --reason|grep '/tcp')
  state=$(echo "$result"|awk '{ print $2 }')
  reason=$(echo "$result"|awk -F'unknown ' '{ print $2 }')
  real_state="rejected"
  printf "\n%-4s | %-14s | %-6s | %-17s | %s" "$flag" "$real_state" "$rejected_port" "$state" "$reason"
 
  result=$(nmap -n -Pn -$flag $target  -p $filtered_port --reason|grep '/tcp')
  state=$(echo "$result"|awk '{ print $2 }')
  reason=$(echo "$result"|awk -F'unknown ' '{ print $2 }')
  real_state="filtered"
  printf "\n%-4s | %-14s | %-6s | %-17s | %s" "$flag" "$real_state" "$filtered_port" "$state" "$reason"
 
  open_port=$((open_port+1))
  closed_port=$((closed_port+1))
  filtered_port=$((filtered_port+1))
  rejected_port=$((rejected_port+1))
  source_port=$((source_port+1))
  echo
done
 




0x02. RESULTATS


Flag | Etat du port   | Port   | Résultat du scan  | Raison
---- | -------------- | ------ | ----------------- | ------------------
sT   | open           | 44001  | open              | syn-ack
sT   | closed         | 43001  | closed            | conn-refused
sT   | rejected       | 42001  | closed            | conn-refused
sT   | filtered       | 41001  | filtered          | no-response

sS   | open           | 44002  | open              | syn-ack ttl 64
sS   | closed         | 43002  | closed            | reset ttl 64
sS   | rejected       | 42002  | filtered          | port-unreach ttl 64
sS   | filtered       | 41002  | filtered          | no-response

sA   | open           | 44003  | unfiltered        | reset ttl 64
sA   | closed         | 43003  | unfiltered        | reset ttl 64
sA   | rejected       | 42003  | filtered          | port-unreach ttl 64
sA   | filtered       | 41003  | filtered          | no-response

sF   | open           | 44004  | open|filtered     | no-response
sF   | closed         | 43004  | closed            | reset ttl 64
sF   | rejected       | 42004  | filtered          | port-unreach ttl 64
sF   | filtered       | 41004  | open|filtered     | no-response

sX   | open           | 44005  | open|filtered     | no-response
sX   | closed         | 43005  | closed            | reset ttl 64
sX   | rejected       | 42005  | filtered          | port-unreach ttl 64
sX   | filtered       | 41005  | open|filtered     | no-response

sM   | open           | 44006  | closed            | reset ttl 64
sM   | closed         | 43006  | closed            | reset ttl 64
sM   | rejected       | 42006  | filtered          | port-unreach ttl 64
sM   | filtered       | 41006  | open|filtered     | no-response

sN   | open           | 44007  | open|filtered     | no-response
sN   | closed         | 43007  | closed            | reset ttl 64
sN   | rejected       | 42007  | filtered          | port-unreach ttl 64
sN   | filtered       | 41007  | open|filtered     | no-response




0x03. INTERPRETATION



TCP CONNECT SCAN
Flags TCP actif lors de la première émission : SYN, puis SYN/ACK
Utilité : vérifier si un port est accessible
Explications : si reçoit un ACK le port est ouvert, si reçoit un RST le port est fermé, sinon le port est filtré

SYN STEALTH SCAN
Flags TCP actif lors de la première émission : SYN
Utilité : vérifier si un port est accessible
Explications : si reçoit un ACK le port est ouvert, si reçoit un RST le port est fermé, sinon le port est filtré

ACK SCAN
Flags TCP actif lors de la première émission : ACK
Utilité : Vérifier si un port est filtré
Explications : une réponse avec le flag RST actif indique un port non filtré, sinon le port est considéré filtré
Exemple : si un scan SYN STEALTH détecte un port fermé, le scan ACK peut confirmer si le port est vraiment fermé ou si c’est le parefeu qui répond "fermé"

FIN, XMAS & NULL SCAN
Flags TCP actif lors de la première émission :
XMAS : FIN+PSH+URG
FIN : FIN
NULL : aucun
Utilité : vérifier si un port est ouvert ou filtré
Explications : Les systèmes respectant la RFC 793 (TCP), doivent renvoyer un paquet avec le flag RST actif si la requête ne contient pas SYN ou SYN/ACK. Une absence de réponse à l’un de ces 3 scans signifie que le port est ouvert... ou filtré car un parefeu moderne ignore ces requêtes

MAIMON SCAN
Flags TCP actif lors de la première émission :
Utilité : vérifier si un port est ouvert
Explications : port est ouvert ou filtré s’il n’y a pas de réponse
Quelques anciens systèmes BSD abandonne le paquet si le port est ouvert. Le lien sur le site de NMAP : Scan MAIMON





0x03. CAPTURE



Type de scan : TCP CONNECT


Port ouvert :
-------------

    1   0.000000 172.42.208.137 → 172.42.208.182 TCP 74 59406 → 44001 [SYN] Seq=0 Win=64240 Len=0
    2   0.000406 172.42.208.182 → 172.42.208.137 TCP 66 44001 → 59406 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0
    3   0.000438 172.42.208.137 → 172.42.208.182 TCP 54 59406 → 44001 [ACK] Seq=1 Ack=1 Win=64256 Len=0
    4   0.000542 172.42.208.137 → 172.42.208.182 TCP 54 59406 → 44001 [RST, ACK] Seq=1 Ack=1 Win=64256 Len=0
Port fermé :
-------------

    5   0.034185 172.42.208.137 → 172.42.208.182 TCP 74 50500 → 43001 [SYN] Seq=0 Win=64240 Len=0
    6   0.034569 172.42.208.182 → 172.42.208.137 TCP 60 43001 → 50500 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
Port rejeté (REJECT) :
----------------------

    7   0.068997 172.42.208.137 → 172.42.208.182 TCP 74 53530 → 42001 [SYN] Seq=0 Win=64240 Len=0
Port filtré (DROP) :
--------------------

    8   0.103033 172.42.208.137 → 172.42.208.182 TCP 74 58648 → 41001 [SYN] Seq=0 Win=64240 Len=0
    9   1.105896 172.42.208.137 → 172.42.208.182 TCP 74 58650 → 41001 [SYN] Seq=0 Win=64240 Len=0

Type de scan : SYN STEALTH


Port ouvert :
-------------

   10   2.255732 172.42.208.137 → 172.42.208.182 TCP 58 63930 → 44002 [SYN] Seq=0 Win=1024 Len=0 MSS=1460
   11   2.256428 172.42.208.182 → 172.42.208.137 TCP 60 44002 → 63930 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460
   12   2.256465 172.42.208.137 → 172.42.208.182 TCP 54 63930 → 44002 [RST] Seq=1 Win=0 Len=0
Port fermé :
-------------

   13   2.460200 172.42.208.137 → 172.42.208.182 TCP 58 43963 → 43002 [SYN] Seq=0 Win=1024 Len=0 MSS=1460
   14   2.461047 172.42.208.182 → 172.42.208.137 TCP 60 43002 → 43963 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
Port rejeté (REJECT) :
----------------------

   15   2.660210 172.42.208.137 → 172.42.208.182 TCP 58 65158 → 42002 [SYN] Seq=0 Win=1024 Len=0 MSS=1460
Port filtré (DROP) :
--------------------

   16   2.859309 172.42.208.137 → 172.42.208.182 TCP 58 35790 → 41002 [SYN] Seq=0 Win=1024 Len=0 MSS=1460
   17   2.961020 172.42.208.137 → 172.42.208.182 TCP 58 35791 → 41002 [SYN] Seq=0 Win=1024 Len=0 MSS=1460

Type de scan : ACK


Port ouvert et non filtré :
---------------------------

   18   3.256196 172.42.208.137 → 172.42.208.182 TCP 54 57632 → 44003 [ACK] Seq=1 Ack=1 Win=1024 Len=0
   19   3.257232 172.42.208.182 → 172.42.208.137 TCP 60 44003 → 57632 [RST] Seq=1 Win=0 Len=0
Port fermé et non filtré :
---------------------------

   20   3.448253 172.42.208.137 → 172.42.208.182 TCP 54 61077 → 43003 [ACK] Seq=1 Ack=1 Win=1024 Len=0
   21   3.448886 172.42.208.182 → 172.42.208.137 TCP 60 43003 → 61077 [RST] Seq=1 Win=0 Len=0
Port rejeté (REJECT) :
----------------------

   22   3.651083 172.42.208.137 → 172.42.208.182 TCP 54 33126 → 42003 [ACK] Seq=1 Ack=1 Win=1024 Len=0
Port filtré (DROP) :
--------------------

   23   3.852194 172.42.208.137 → 172.42.208.182 TCP 54 51557 → 41003 [ACK] Seq=1 Ack=1 Win=1024 Len=0
   24   3.954254 172.42.208.137 → 172.42.208.182 TCP 54 51558 → 41003 [ACK] Seq=1 Ack=1 Win=1024 Len=0

Type de scan : FIN


Port ouvert :
-------------

   25   4.267848 172.42.208.137 → 172.42.208.182 TCP 54 49540 → 44004 [FIN] Seq=1 Win=1024 Len=0
   26   4.369312 172.42.208.137 → 172.42.208.182 TCP 54 49541 → 44004 [FIN] Seq=1 Win=1024 Len=0
Port fermé :
------------

   27   4.675145 172.42.208.137 → 172.42.208.182 TCP 54 62324 → 43004 [FIN] Seq=1 Win=1024 Len=0
   28   4.675500 172.42.208.182 → 172.42.208.137 TCP 60 43004 → 62324 [RST, ACK] Seq=1 Ack=2 Win=0 Len=0
Port rejeté (REJECT) :
----------------------

   29   4.887507 172.42.208.137 → 172.42.208.182 TCP 54 51964 → 42004 [FIN] Seq=1 Win=1024 Len=0
Port filtré (DROP) :
--------------------

   30   5.080127 172.42.208.137 → 172.42.208.182 TCP 54 47434 → 41004 [FIN] Seq=1 Win=1024 Len=0
   31   5.181321 172.42.208.137 → 172.42.208.182 TCP 54 47435 → 41004 [FIN] Seq=1 Win=1024 Len=0

Type de scan : XMAS


Port ouvert :
-------------

   32   5.487889 172.42.208.137 → 172.42.208.182 TCP 54 37984 → 44005 [FIN, PSH, URG] Seq=1 Win=1024 Urg=0 Len=0
   33   5.589972 172.42.208.137 → 172.42.208.182 TCP 54 37985 → 44005 [FIN, PSH, URG] Seq=1 Win=1024 Urg=0 Len=0
Port fermé :
------------

   34   5.871036 172.42.208.137 → 172.42.208.182 TCP 54 40886 → 43005 [FIN, PSH, URG] Seq=1 Win=1024 Urg=0 Len=0
   35   5.871461 172.42.208.182 → 172.42.208.137 TCP 60 43005 → 40886 [RST, ACK] Seq=1 Ack=2 Win=0 Len=0
Port rejeté (REJECT) :
----------------------

   36   6.088200 172.42.208.137 → 172.42.208.182 TCP 54 39487 → 42005 [FIN, PSH, URG] Seq=1 Win=1024 Urg=0 Len=0
Port filtré (DROP) :
--------------------

   37   6.296285 172.42.208.137 → 172.42.208.182 TCP 54 45391 → 41005 [FIN, PSH, URG] Seq=1 Win=1024 Urg=0 Len=0
   38   6.397820 172.42.208.137 → 172.42.208.182 TCP 54 45392 → 41005 [FIN, PSH, URG] Seq=1 Win=1024 Urg=0 Len=0

Type de scan : MAIMON


Port ouvert :
-------------

   39   6.700350 172.42.208.137 → 172.42.208.182 TCP 54 54962 → 44006 [FIN, ACK] Seq=1 Ack=1 Win=1024 Len=0
   40   6.701325 172.42.208.182 → 172.42.208.137 TCP 60 44006 → 54962 [RST] Seq=1 Win=0 Len=0
Port fermé :
------------

   41   6.908176 172.42.208.137 → 172.42.208.182 TCP 54 64310 → 43006 [FIN, ACK] Seq=1 Ack=1 Win=1024 Len=0
   42   6.909046 172.42.208.182 → 172.42.208.137 TCP 60 43006 → 64310 [RST] Seq=1 Win=0 Len=0
Port rejeté (REJECT) :
----------------------

   43   7.127082 172.42.208.137 → 172.42.208.182 TCP 54 47762 → 42006 [FIN, ACK] Seq=1 Ack=1 Win=1024 Len=0
Port filtré (DROP) :
--------------------

   44   7.336071 172.42.208.137 → 172.42.208.182 TCP 54 49944 → 41006 [FIN, ACK] Seq=1 Ack=1 Win=1024 Len=0
   45   7.436911 172.42.208.137 → 172.42.208.182 TCP 54 49945 → 41006 [FIN, ACK] Seq=1 Ack=1 Win=1024 Len=0

Type de scan : NULL


Port ouvert :
-------------

   46   7.740204 172.42.208.137 → 172.42.208.182 TCP 54 62289 → 44007 [<None>] Seq=1 Win=1024 Len=0
   47   7.842615 172.42.208.137 → 172.42.208.182 TCP 54 62290 → 44007 [<None>] Seq=1 Win=1024 Len=0
Port fermé :
------------

   48   8.156304 172.42.208.137 → 172.42.208.182 TCP 54 36000 → 43007 [<None>] Seq=1 Win=1024 Len=0
   49   8.157207 172.42.208.182 → 172.42.208.137 TCP 60 43007 → 36000 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
Port rejeté (REJECT) :
----------------------

   50   8.356230 172.42.208.137 → 172.42.208.182 TCP 54 51449 → 42007 [<None>] Seq=1 Win=1024 Len=0
Port filtré (DROP) :
--------------------

   51   8.555740 172.42.208.137 → 172.42.208.182 TCP 54 60331 → 41007 [<None>] Seq=1 Win=1024 Len=0
   52   8.656629 172.42.208.137 → 172.42.208.182 TCP 54 60332 → 41007 [<None>] Seq=1 Win=1024 Len=0


   =>   Écrit par : Nicolas, le 26 novembre 2019


 
Mots clés :  
  network 
  
  security 
    >   Articles connexes :

GitVuln



HTTP Server, tell me who you are ?


Discuter avec un serveur web *apparement* muet ? Voici comment faire...

/tmp et /var/log en noexec sur macOS



Durcissement de Windows



6241575