Test de pénétration part 1 la recherche de vulnérabilité

Metasploit est un framework fournissant une infrastructure permettant l'automatisation de tâches de pentest. Il permet en autres d'identifié, d'exploiter etc... des failles de sécrité dans des programmes, systèmes d'exploitation application lourd et application web etc...

Dans cet article nous allons essayer de comprendre l'organisation architecturale du Framework, son utilisation etc... Nous allons essayer d'apprivoiser ce framework afin de pouvoir l'utiliser de façon professionnel dans le cadre d'un test d'intrusion.

Cet article est le premier d'une série d'article concernant la mise en pratique d'un test d'intrusion dans le cadre d'un audit de sécurité avec Metasploit.

Pour ce premier numéros on verra comment fonctionne Metasploit, comment l'utilisé pour réaliser la première étape et certainement la plus importante d'un audit qui est la recherche d'informations sur notre cible.

Sachez que le fait d’accéder ou de se maintenir, frauduleusement, dans tout ou partie d’un système de traitement automatisé de données est puni de deux ans d’emprisonnement et de 30000 euros d’amende. Bien sûr inutile de vous dire que je ne serait être tenu responsable de tout utilisation malveillante de ce que vous apprendrez ici. Ceci est à but uniquement pédaogique.

Cet article s'adresse à un publique majeur équipé d'un cerveau et d'un sens du dicernement !

Les prérequis

Dans ce tutoriel j'utiliserai un mini lab sur vmware constitué de de quatres machines.

  1. Une Kali linux
  2. Un Mestploitable (serveur linux volontairement vulnérable pour s'entrainer)
  3. Deux VM windows 7

Dans cette permière partie du tutoriel qui seréa coupé en une série de plusieurs article nous utiliserons pas forcément la VM windows ou très peu. cependant il est mieux d'installer l'intégralité du lab afin de ne plus avoir à revenir dessus.

Passons au vif du sujet

Pour démarrer Metasploit il sufit dans un terminal sur kali linux de taper la comande suivante :

root@shado:~#msfconsole

Architecture de Metasploit

C'est aussi simple que ça oui ! Bon revenons à metasploit. msfconsole est un acronyme pour Metasploit Framework console.

Une fois lancé on apperçoit quelques information qui s'affiche sur notre console.

root@shado:~# msfconsole

                          ########                  #
                      #################            #
                   ######################         #
                  #########################      #
                ############################
               ##############################
               ###############################
              ###############################
              ##############################
                              #    ########   #
                 ##        ###        ####   ##
                                      ###   ###
                                    ####   ###
               ####          ##########   ####
               #######################   ####
                 ####################   ####
                  ##################  ####
                    ############      ##
                       ########        ###
                      #########        #####
                    ############      ######
                   ########      #########
                     #####       ########
                       ###       #########
                      ######    ############
                     #######################
                     #   #   ###  #   #   ##
                     ########################
                      ##     ##   ##     ##
                            http://metasploit.com

Payload caught by AV? Fly under the radar with Dynamic Payloads in
Metasploit Pro -- learn more on http://rapid7.com/metasploit

       =[ metasploit v4.14.10-dev                         ]
+ -- --=[ 1639 exploits - 944 auxiliary - 289 post        ]
+ -- --=[ 472 payloads - 40 encoders - 9 nops             ]
+ -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ]

msf > 

Tout d'abord on apperçoit une petite introduction assez sympa qui change à chaque lancement.

Ensuite on peut voir la version de metasploit que l'on utilise (metasploit v4.14.10-dev).

Ensuite nous avons une petite partie avec des définitions.

Nous allons voir en détails ce que tous cela signifie :

exploit : Un exploit est un code d'exploitation par lequel un attaquant pourra profité d'un défaut système afin de s'introduire ou de réaliser des action non prévu sur ce système. On utilisera donc des exploits sur nos cibles afin de leurs faire produire un résultat qui n'aurait pas été anticipé par les développeurs du programme ou du système. Nous pouvons voir qu'il existe actuellement 1639 exploits dans notre Framework metasploit.

Pour voir la liste des exploits :

msf > show exploits

Auxiliary : Les modules auxiliary sont souvent des outils de scan tel que les scans de port ouvert d'une machine cible ou de services. Nous avons dans le framework donc actuellemnt 944 auxiliary

Pour voir la liste des modules auxiliaire :

msf > show auxiliary

Posts : Les modules posts ou module de post-exploitation sont des modules permettant d'accéder des données confidentiel tel que des identifiants ou des mots de passes de services ou d'applications. Ces modules sont utilisé une fois une cible compromise afin d'élargir notre surface d'attaque ou de gagner des accès. Nous avons donc 289 posts.

Pour voir la liste des posts :

msf > show posts

Payload : Un payload est un code qu'un attaquant souhaitera exécuté à distance sur une machine cible comme par exemple un reverse shell qui permet d'ouvrir une connexion depuis la machine cible vers la machine attaquante. Nous avons donc 472 payloads

Pour voir la liste des payloads :

msf > show payloads

Encoder : Modules permettant de dissimuler des payloads ou des exploit en créant des couches de code sélectioner par l'attaquant selon le système sur la machine ciblé. Nous avons donc 40 encoders.

Pour voir la liste des encoders :

msf > show encoders

Nops : Les nops sont des codes qui permettrons de faire foonctionner un exploit ou un payload sur une infrastrure utilisant une structure plus spécifique comme par exemple pour du PHP. Nous avons donc 9 nops.

Pour voir la liste des nops :

msf > show nops

Recherche et analyse de vulnérabilité

Maintenant que nous connaisons l'infrastructure de metasploit commençons à joué avec celui-ci. Avant de pouvoir s'introduire dans une machine, un réseau ou un système nous devons récolter des informations sur ce dit réseau ou système afin de déterminer quel sera notre porte d'entré dans ce système.

Avant toutes chose il faut savoir une chose. Dans la réalisation d'un pentest il existe deux type de recherche d'information.

  • La recherche d'information passive
    • Qui consiste à récolter des informations concernant une cible sans aucune interaction direct avec celle-ci via des données disponibles publiquement (réseaux sociaux, BDD publique etc..)
  • La recherche d'information active
    • Qui contrairement à la recherche passive permet de récolter des informations en interagissant avec la cible (scanner de vulnérabilté, idle scanning etc...).

Dans cette article nous ne couvrirons pas la récolte d'informations passive.

Nous allons donc essayer de récolter des informations sur notre cible à l'aide de scanners de vulnérabilité. Dans un premier temps nous utiliserons le scanners le plus populaire dans le monde du pentest j'ai nommer nmap. Nous verrons ensuite comment réalisé des scans avec metasploit. Reprenons donc notre Lab. Nous avons un kali qui va nous servir pour faire notre pentest, une VM metasploitable 2 et deux VMs Windows.

Euh attend là ! C'est quoi un scanner de vulnérabilité ?

Oui c'est vrai qu'on en a pas parlé avant, toutes mes excuse . Un scanner de vulnérabilité c'est un outil qui va nous permettre d'identifier des failles de sécurité sur un système.

Il peut identifier le système présent sur la machine (finger-printing), les différents port ouvert et les services qui y sont en écoute, leur versions etc..., il peut aussi récupérer les banières des services d'un système et bien d'autres choses.

Maintenant qu'on a répondu à cette interrogation passons maintenant à la recherche d'information active sur notre cible.

L'adresse IP de ma cible (metasploitable 2) est pour ma part 172.16.86.131.

Comment tu sais que l'IP de ta cible est 172.16.86.131 si tu n'y a pas accès ? tu nous aurais pas un peu rouler dans la farine ? !!!

Remarque très pertinante, cependant loin de moi l'idée de vous rouler dans quoi que ce soit. Mon secret il est simple il y a une commande qui s'appel arp-scan et qui permet d'allez lire la table ARP sur un réseau et lister les adresses IPs.

root@shado:~# arp-scan -l
Interface: eth0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.9 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)
172.16.86.1 00:50:56:c0:00:08   VMware, Inc.
172.16.86.2 00:50:56:ed:7d:34   VMware, Inc.
172.16.86.131   00:0c:29:fa:dd:2a   VMware, Inc.
172.16.86.254   00:50:56:f2:03:12   VMware, Inc.

4 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9: 256 hosts scanned in 1.923 seconds (133.13 hosts/sec). 4 responded

A ce niveau là je procède de façon simple et logique en lançant un nmap sur ces IPs en demandant simplemant la détection de l'OS.

root@shado:~# nmap -O 172.16.86.1,2,131,254

Starting Nmap 7.40 ( https://nmap.org ) at 2018-01-29 19:54 CET
Nmap scan report for 172.16.86.1
Host is up (0.000094s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
443/tcp open  https
902/tcp open  iss-realsecure
....

Nmap scan report for 172.16.86.2
Host is up (0.000091s latency).
All 1000 scanned ports on 172.16.86.2 are closed
MAC Address: 00:50:56:ED:7D:34 (VMware)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: specialized
Running: VMware Player
OS CPE: cpe:/a:vmware:player
OS details: VMware Player virtual NAT device

....

Nmap scan report for 172.16.86.131
Host is up (0.00039s latency).
Not shown: 977 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
...
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6
OS details: Linux 2.6.9 - 2.6.33
Network Distance: 1 hop

j'ai volontairement tronqué la sortie afin de ne pas spoilier la fin du film (ça serait trop con au moment ou les choses commence à ce mettre en place). On vois que l'adresse 172.16.86.131 est c'elle qui nous intérresse. On reconnais cela par son OS et par sa version de kernel.

Ah ouais comment ça on reconnais directement ? Parle pour toi je ne vois pas la différence moi. Donc si tu peux m'expliquer car là je vois deux OS de type Linux alors pourquoi ça ne serait pas la 172.16.86.1 ?

Bonne remarque je l'entend et tu as parfaitement raison de poser cette question et de partager tes doute que je vais me faire un plaisir de dissiper.

Alors l'adresse 172.16.86.1 est bien un Linux mais si on fait bien attetion on se rend compte que le port 902 est ouvert et que le service iss-realsecure tourne desssus. Or le service iss-realsecure sur le port 902 fait référence à la console de Vmware ce qui signifie que c'est ma machine hôte qui est représenté par cette IP.

902/tcp open  iss-realsecure

Alors que les choses soit bien clair je ne dit pas ici que lorsque le port 902 est marqué comme ouvert il s'agit là de vmware. Pas du tout, c'est le service qui y tourne qui me met la puce à l'oreil car il y a des trojan qui peuvent très bien tourné sur le port 902 comme le trojan NetDevil par exemple.

De plus si on connais Metasploitable 2 on reconnais facilement son empreinte.

Enfin Bref, trêve de mondanité comme dirais l'autre passons à notre sujet principale.

Passons maintenant à la collecte d'information active avec nmap (network mapping pour les intimes) .

première chose la commande de base de nmap et c'elle qui sera sûrement la plus importante et qui devrait être celle que vous utiliserait le plus( j'espère du moins).

nmap -h 

Et oui chers amis c'est bien la commande pour afficher l'aide (RTFM comme on dit). C'est cette commande qui va nous permettre de voir quels sont les combinaisons d'options qui sont le plus avantagieux dans le cadre de notre pentest.

Pas de panique on va pas s'arrêter là ni vous demander d'apprendre par coeur toutes les options mais juste vous montrez que c'est vraiment très important donc à consommer sans modération.

Quelques combinaisons d'options sympa.

Options Descriptions
-sS SYN scan via TCP pour effectuer un scan discrèt sur les ports ouvert/fermer grâce au réponse ICMP de la cible (si le firewall bloque ICMP impossible de savoir)
-sU scan via UDP pour voir les ports ouvert/fermer grâce au réponse ICMP de la cible (si le firewall bloque ICMP impossible de savoir)
-Pn Réaliser un scan de type half-scan (c-a-d un scan sans établir de connexion) permet de bypasser le blocage de réponse ICMP par un firewall
-A Permet de faire des scans agressif (systeme d'exploitation, port ouvert, service qui tourne et leur version etc...)
-sV Permet d'analyser les banière applicative d'un programme (prologue envoyé par un programme pour souhaiter la bienvenue à un utilisateur)
sN Permet de montrer si les ports sont filtrés par un firewall
-v Mode verbeux, permet d'afficher les résultats du scan en temps réel et ne pas attendre jusqu'a ce que le scan soit entièrement fini

Bon maintenant qu'on connais quelques options de base passon à l'action. Nous allons donc réaliser notre premier scan sur notre cible.

Enfin depuis le temps qu'on attend que tu termine ton bla bla.

Du calme jeune padawane ça arrive.

root@shado:~# nmap -v -sS 172.16.86.131

Starting Nmap 7.40 ( https://nmap.org ) at 2018-01-29 20:48 CET
Initiating ARP Ping Scan at 20:48
Scanning 172.16.86.131 [1 port]
Completed ARP Ping Scan at 20:48, 0.00s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 20:48
Completed Parallel DNS resolution of 1 host. at 20:48, 13.00s elapsed
Initiating SYN Stealth Scan at 20:48
Scanning 172.16.86.131 [1000 ports]
Discovered open port 3306/tcp on 172.16.86.131
Discovered open port 53/tcp on 172.16.86.131
Discovered open port 139/tcp on 172.16.86.131
Discovered open port 111/tcp on 172.16.86.131
Discovered open port 5900/tcp on 172.16.86.131
Discovered open port 21/tcp on 172.16.86.131
Discovered open port 22/tcp on 172.16.86.131
Discovered open port 445/tcp on 172.16.86.131
Discovered open port 25/tcp on 172.16.86.131
Discovered open port 80/tcp on 172.16.86.131
Discovered open port 23/tcp on 172.16.86.131
Discovered open port 2049/tcp on 172.16.86.131
Discovered open port 5432/tcp on 172.16.86.131
Discovered open port 6667/tcp on 172.16.86.131
Discovered open port 514/tcp on 172.16.86.131
Discovered open port 513/tcp on 172.16.86.131
Discovered open port 8180/tcp on 172.16.86.131
Discovered open port 1524/tcp on 172.16.86.131
Discovered open port 8009/tcp on 172.16.86.131
Discovered open port 2121/tcp on 172.16.86.131
Discovered open port 1099/tcp on 172.16.86.131
Discovered open port 512/tcp on 172.16.86.131
Discovered open port 6000/tcp on 172.16.86.131
Completed SYN Stealth Scan at 20:48, 0.07s elapsed (1000 total ports)
Nmap scan report for 172.16.86.131
Host is up (0.0015s latency).
Not shown: 977 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
23/tcp   open  telnet
25/tcp   open  smtp
53/tcp   open  domain
80/tcp   open  http
111/tcp  open  rpcbind
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
512/tcp  open  exec
513/tcp  open  login
514/tcp  open  shell
1099/tcp open  rmiregistry
1524/tcp open  ingreslock
2049/tcp open  nfs
2121/tcp open  ccproxy-ftp
3306/tcp open  mysql
5432/tcp open  postgresql
5900/tcp open  vnc
6000/tcp open  X11
6667/tcp open  irc
8009/tcp open  ajp13
8180/tcp open  unknown
MAC Address: 00:0C:29:FA:DD:2A (VMware)

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 13.20 seconds
           Raw packets sent: 1001 (44.028KB) | Rcvd: 1001 (40.120KB)

Qu'est ce qu'on a fait ? C'est quoi tout ça ?

Nous avons réalisé un scan nmap simple, en demandant tout simple à nmap de scanner notre cible en faisant un SYN scan discret via TCP et nous lister les ports ouvert en temps réell.

A première vu ce scan nous donne pas mal d'informations sur notre cible. On peut voir les différents ports ouvert, les services deerrière chaque port, leur état (ouvert/fermé/filtré). Pour l'instant c'est ce que l'on voit au premier coup d'oeil.

Et si on devenait un peut plus agréssif dans notre scan. On va demander à nmap de nous afficher les banière de chaques services et leurs versions. Pour cela nous allons simplement utilisé l'option -A à la fin.

root@shado:~# nmap -v -sS -A 172.16.86.131

Starting Nmap 7.40 ( https://nmap.org ) at 2018-01-29 20:59 CET
NSE: Loaded 143 scripts for scanning.
NSE: Script Pre-scanning.
Initiating NSE at 20:59
...
Discovered open port 3306/tcp on 172.16.86.131
Discovered open port 5900/tcp on 172.16.86.131
Discovered open port 21/tcp on 172.16.86.131
Discovered open port 23/tcp on 172.16.86.131
Discovered open port 53/tcp on 172.16.86.131
Discovered open port 80/tcp on 172.16.86.131
Discovered open port 445/tcp on 172.16.86.131
Discovered open port 139/tcp on 172.16.86.131
Discovered open port 111/tcp on 172.16.86.131
Discovered open port 25/tcp on 172.16.86.131
Discovered open port 22/tcp on 172.16.86.131
...

PORT     STATE SERVICE     VERSION
21/tcp   open  ftp         vsftpd 2.3.4
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
22/tcp   open  ssh         OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
| ssh-hostkey: 
|   1024 60:0f:cf:e1:c0:5f:6a:74:d6:90:24:fa:c4:d5:6c:cd (DSA)
|_  2048 56:56:24:0f:21:1d:de:a7:2b:ae:61:b1:24:3d:e8:f3 (RSA)
23/tcp   open  telnet      Linux telnetd
25/tcp   open  smtp        Postfix smtpd
|_smtp-commands: metasploitable.localdomain, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, 
53/tcp   open  domain      ISC BIND 9.4.2
| dns-nsid: 
|_  bind.version: 9.4.2
80/tcp   open  http        Apache httpd 2.2.8 ((Ubuntu) DAV/2)
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.2.8 (Ubuntu) DAV/2
|_http-title: Metasploitable2 - Linux
111/tcp  open  rpcbind     2 (RPC #100000)
| rpcinfo: 
|   program version   port/proto  service
|   100000  2            111/tcp  rpcbind
|   100000  2            111/udp  rpcbind
|   100003  2,3,4       2049/tcp  nfs
|   100003  2,3,4       2049/udp  nfs
|   100005  1,2,3      40596/tcp  mountd
|   100005  1,2,3      52768/udp  mountd
|   100021  1,3,4      41862/udp  nlockmgr
|   100021  1,3,4      52242/tcp  nlockmgr
|   100024  1          37379/udp  status
|_  100024  1          45389/tcp  status
...
5900/tcp open  vnc         VNC (protocol 3.3)
| vnc-info: 
|   Protocol version: 3.3
|   Security types: 
|_    VNC Authentication (2)
6000/tcp open  X11         (access denied)
6667/tcp open  irc         UnrealIRCd
| irc-info: 
|   users: 1.0
|   servers: 1
|   lusers: 1
|   lservers: 0
|   server: irc.Metasploitable.LAN
|   version: Unreal3.2.8.1. irc.Metasploitable.LAN 
|   uptime: 0 days, 1:09:56
|   source ident: nmap
|   source host: FFA8B1FB.6040428C.168799A3.IP
|_  error: Closing Link: zotowmbfl[172.16.86.130] (Quit: zotowmbfl)
...
MAC Address: 00:0C:29:FA:DD:2A (VMware)
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6
OS details: Linux 2.6.9 - 2.6.33
Uptime guess: 0.046 days (since Mon Jan 29 19:56:18 2018)
Network Distance: 1 hop
TCP Sequence Prediction: Difficulty=203 (Good luck!)
IP ID Sequence Generation: All zeros
Service Info: Hosts:  metasploitable.localdomain, localhost, irc.Metasploitable.LAN; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
...

TRACEROUTE
HOP RTT     ADDRESS
1   0.43 ms 172.16.86.131
...
Nmap done: 1 IP address (1 host up) scanned in 126.14 seconds
           Raw packets sent: 1065 (47.606KB) | Rcvd: 1016 (41.430KB)

J'ai volontairement tronqué la sortie car c'est vraiment trop long (je vous laisse découvrir cela par vous même).

On peut déjà remarqué que le scan est beaucoup plus long, ensuite nous avons les informations en temps réel comme pour un scan normal. On voit aussi qu'il va détecter le système d'exploitation de la victime chose qu'il n'a pas fait pour le premier scan "simple" puis ensuite on vois que nmap est beaucoup plus verbeux et qu'il affiche plus de détails sur chaques services (versions, banière etc...). On vois aussi que nmap fait en fin de scan un petit traceroute (en scred) histoire de voir si on passerait par un routeur (malinx le lynx).

Prenons tout de même un service au hasard. Disons le service FTP qui tourne sur le port 21.

PORT     STATE SERVICE     VERSION
21/tcp   open  ftp         vsftpd 2.3.4
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)

Ben voyons c'est qui l'est bavard ce service, qu'est ce qu'il nous dit le petit coquin ?

  1. On vois tout d'abord qu'il écoute sur le port 21 (la base, le port par défaut du FTP).
  2. Le port est actuellement ouvert
  3. Le service en écoute sur ce port est le FTP (vsftp)
  4. Que c'est la version 2.3.4 de vsftpd (Ah bon ? C'est bizarre ça me dit un truc cette version, on verra ...)
  5. En plus le gentil vsftpd nous dit qu'il est possible de ce connecter dessus avec un login Anonymous donc sans mot de passe.

Bon déjà on peut constater que nous avons là une jolie porte d'entré sur ce service.

Pour commencé on peut se connecter dessus en Anonyme (pas bien !!!). En plus cette version de vsftpd me dit vraiment quelques chose.

Ah bon quoi ? J'en sais rien moi, dépêche toi crache le morceau !!!

Doucement jeune mousaillons les choses arrivent. Alors je disait concernant cette version avant d'être coupé par "Jean-kevin pirate" que cette version de vsftpd me dit quelques chose. Effectivement après une petite recherche je vois que cette version là à été conrompu par une tièrce personne (personne sais qui c'est !) qui y avait placé une jolie backdoor.

On à déjà une idée de part où est ce qu'on pourrait passez pour pénétrer ce système mais continuons notre prise d'informations afin de récolter le plus d'informations possible pour le bouquet final qui sera l'écriture de notre rapport.

maintenant que nous avons vu nmap, nous allons réaliser nos scan via Metasploit. Alors les scans sous Metasploit c'est juste génial. On peux réaliser des scan nmap directement via la console Metasploit (et même exécuter des commande système mais c'est pas le sujet), importer des scans nmap déjà réaliser, on peut stocker nos scan dans une base de données pour un usage ultérieur, ou bien on peux tout à fait faire nos scan via des modules auxiliaires (vous vous souvenez ?) fournis par Metasploit.

Bon finit de papoter passons au vif du sujet.

La recherche de vulnérabilité via Metasploit

Pour réaliser un scan nmap via Metasploit c'est simple il faut tout simplement lancer la msfconsole et taper la commande db_nmap pour database nmapping.

msf > db_nmap
[-] Database not connected
msf > 

Bon Metasploit n'est pas content et ne veux pas utilisé la base de données car elle n'est pas connecté. Pas de panique Metasploit à raison on aurait dû faire quelques manipulation élémentaire avant de lancer msfconsole depuis le début mais on va en profiter ici.

Première chose on va démarer le service postgresql :

root@shado:~# systemctl start postgresql

Ensuite ont peut aussi au passage mettre à jour la base de données d'exploits Metasploit. C'est parti :

root@shado:~# msfupdate

maintenant il nous reste plus qu'à initialisé la base de données de Metasploit et tout ira bien.

root@shado:~# msfdb init
Creating database user 'msf'
Saisir le mot de passe pour le nouveau rôle : 
Le saisir de nouveau : 
Creating databases 'msf' and 'msf_test'
Creating configuration file in /usr/share/metasploit-framework/config/database.yml
Creating initial database schema
root@shado:~# 

Ok maintenant que tout est propre on va essayer de reprendre là ou on en était. C'est à dire faire nos scan via metasploit donc lançons msfconsole.

root@shado:~# msfconsole
msf > db_nmap
[*] Usage: db_nmap [--save | [--help | -h]] [nmap options]
msf > 

Et là ça fonctionne !!! Bon c'est pas tout mais on a des scans à faire non ? Alors allons y !!!

Maintenant que tout est pret on va lancer exactement les mêmes scans qu'avec nmap c'est à dire un scan simple ensuite un scan agréssif.

Scan simple :

msf > db_nmap -v -sS 172.16.86.131
[*] Nmap: Starting Nmap 7.40 ( https://nmap.org ) at 2018-01-29 21:55 CET
[*] Nmap: Initiating ARP Ping Scan at 21:55
[*] Nmap: Scanning 172.16.86.131 [1 port]
[*] Nmap: Completed ARP Ping Scan at 21:55, 0.00s elapsed (1 total hosts)
[*] Nmap: Initiating Parallel DNS resolution of 1 host. at 21:55
[*] Nmap: Completed Parallel DNS resolution of 1 host. at 21:56, 13.00s elapsed
[*] Nmap: Initiating SYN Stealth Scan at 21:56
[*] Nmap: Scanning 172.16.86.131 [1000 ports]
[*] Nmap: Discovered open port 23/tcp on 172.16.86.131
[*] Nmap: Discovered open port 80/tcp on 172.16.86.131
[*] Nmap: Discovered open port 111/tcp on 172.16.86.131
[*] Nmap: Discovered open port 22/tcp on 172.16.86.131
[*] Nmap: Discovered open port 5900/tcp on 172.16.86.131
....
[*] Nmap: Completed SYN Stealth Scan at 21:56, 0.09s elapsed (1000 total ports)
[*] Nmap: Nmap scan report for 172.16.86.131
[*] Nmap: Host is up (0.00052s latency).
[*] Nmap: Not shown: 977 closed ports
[*] Nmap: PORT     STATE SERVICE
[*] Nmap: 21/tcp   open  ftp
[*] Nmap: 22/tcp   open  ssh
[*] Nmap: 23/tcp   open  telnet
[*] Nmap: 25/tcp   open  smtp
[*] Nmap: 53/tcp   open  domain
[*] Nmap: 80/tcp   open  http
[*] Nmap: 111/tcp  open  rpcbind
[*] ....
[*] Nmap: 8180/tcp open  unknown
[*] Nmap: MAC Address: 00:0C:29:FA:DD:2A (VMware)
[*] Nmap: Read data files from: /usr/bin/../share/nmap
[*] Nmap: Nmap done: 1 IP address (1 host up) scanned in 13.22 seconds
[*] Nmap: Raw packets sent: 1001 (44.028KB) | Rcvd: 1001 (40.120KB)

On vois que le scan est identique au scan nmap, d'ailleurs c'est le scan nmap.

Scan agressif :

msf > db_nmap -v -sS -A 172.16.86.131
...
[*] Nmap: Initiating SYN Stealth Scan at 21:58
[*] Nmap: Scanning 172.16.86.131 [1000 ports]
[*] Nmap: Discovered open port 5900/tcp on 172.16.86.131
[*] Nmap: Discovered open port 3306/tcp on 172.16.86.131
[*] Nmap: Discovered open port 25/tcp on 172.16.86.131
[*] Nmap: Discovered open port 23/tcp on 172.16.86.131
[*] Nmap: Discovered open port 53/tcp on 172.16.86.131
[*] Nmap: Discovered open port 22/tcp on 172.16.86.131
...
[*] Nmap: Completed SYN Stealth Scan at 21:58, 0.10s elapsed (1000 total ports)
[*] Nmap: Initiating Service scan at 21:58
[*] Nmap: Scanning 23 services on 172.16.86.131
[*] Nmap: Completed Service scan at 22:00, 93.60s elapsed (23 services on 1 host)
...
[*] Nmap: PORT     STATE SERVICE     VERSION
[*] Nmap: 21/tcp   open  ftp         vsftpd 2.3.4
[*] Nmap: |_ftp-anon: Anonymous FTP login allowed (FTP code 230)
[*] Nmap: 22/tcp   open  ssh         OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
[*] Nmap: | ssh-hostkey:
[*] Nmap: |   1024 60:0f:cf:e1:c0:5f:6a:74:d6:90:24:fa:c4:d5:6c:cd (DSA)
[*] Nmap: |_  2048 56:56:24:0f:21:1d:de:a7:2b:ae:61:b1:24:3d:e8:f3 (RSA)
[*] Nmap: 23/tcp   open  telnet      Linux telnetd
[*] Nmap: 25/tcp   open  smtp        Postfix smtpd
[*] Nmap: |_smtp-commands: metasploitable.localdomain, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN,
[*] Nmap: 53/tcp   open  domain      ISC BIND 9.4.2
[*] Nmap: | dns-nsid:
[*] Nmap: |_  bind.version: 9.4.2
[*] Nmap: 80/tcp   open  http        Apache httpd 2.2.8 ((Ubuntu) DAV/2)
...
[*] Nmap: 445/tcp  open  netbios-ssn Samba smbd 3.0.20-Debian (workgroup: WORKGROUP)
[*] Nmap: 512/tcp  open  exec        netkit-rsh rexecd
[*] Nmap: 513/tcp  open  login?
[*] Nmap: 514/tcp  open  shell       Netkit rshd
[*] Nmap: 1099/tcp open  java-rmi    Java RMI Registry
[*] Nmap: 1524/tcp open  shell       Metasploitable root shell
[*] Nmap: 2049/tcp open  nfs         2-4 (RPC #100003)
[*] Nmap: 2121/tcp open  ftp         ProFTPD 1.3.1
[*] Nmap: |_ftp-bounce: no banner
[*] Nmap: 3306/tcp open  mysql       MySQL 5.0.51a-3ubuntu5
...

Encore une fois j'ai volontairement tronqué les deux sorties

Si les scans nmap depuis un terminal et depuis metasploit sont les même pourquoi faire les deux ? nmaps ne suffit il pas ?

Excellente question, a laquelle la réponse est simple faire les scans nmap via Metasploit à deux avantage qui ne devrait pas être négligé.

  1. Ça permet de rester sur une seule console et ne pas avoir à switcher entre les différents terminaux entre nmap et la console Metasploit.
  2. Deuxième avantage et pas des moindres Metasploit permet de stocker le résultat de nos scan dans ça base de donnée.

D'ailleurs allons voir ça tout de suite :

msf > db_hosts
[-] The db_hosts command is DEPRECATED
[-] Use hosts instead

Hosts
=====

address        mac                name  os_name  os_flavor  os_sp  purpose  info  comments
-------        ---                ----  -------  ---------  -----  -------  ----  --------
172.16.86.131  00:0c:29:fa:dd:2a        Linux               2.6.X  server         
msf > 

Tiens tiens, vous n'avez rien remarquer ici ?

metasploit nous informe que la commande db_hosts est déprécier (en gros qu'elle est obsolète) et que je peux juste utiliser la commande hosts.

msf > hosts
Hosts
=====
address        mac                name  os_name  os_flavor  os_sp  purpose  info  comments
-------        ---                ----  -------  ---------  -----  -------  ----  --------
172.16.86.131  00:0c:29:fa:dd:2a        Linux               2.6.X  server         
msf > 

Et encore une fois il a raison !!!

Maintenant voyons comment on peut voir les services que nous avons scanner.

msf > services

Services
========

host           port  proto  name         state  info
----           ----  -----  ----         -----  ----
172.16.86.131  21    tcp    ftp          open   vsftpd 2.3.4
172.16.86.131  22    tcp    ssh          open   OpenSSH 4.7p1 Debian 8ubuntu1 protocol 2.0
172.16.86.131  23    tcp    telnet       open   Linux telnetd
172.16.86.131  25    tcp    smtp         open   Postfix smtpd
172.16.86.131  53    tcp    domain       open   ISC BIND 9.4.2
172.16.86.131  80    tcp    http         open   Apache httpd 2.2.8 (Ubuntu) DAV/2
172.16.86.131  111   tcp    rpcbind      open   2 RPC #100000
172.16.86.131  139   tcp    netbios-ssn  open   Samba smbd 3.X - 4.X workgroup: WORKGROUP
172.16.86.131  445   tcp    netbios-ssn  open   Samba smbd 3.0.20-Debian workgroup: WORKGROUP
172.16.86.131  512   tcp    exec         open   netkit-rsh rexecd
172.16.86.131  513   tcp    login        open   
172.16.86.131  514   tcp    shell        open   Netkit rshd
172.16.86.131  1099  tcp    java-rmi     open   Java RMI Registry
172.16.86.131  1524  tcp    shell        open   Metasploitable root shell
172.16.86.131  2049  tcp    nfs          open   2-4 RPC #100003
172.16.86.131  2121  tcp    ftp          open   ProFTPD 1.3.1
172.16.86.131  3306  tcp    mysql        open   MySQL 5.0.51a-3ubuntu5
172.16.86.131  5432  tcp    postgresql   open   PostgreSQL DB 8.3.0 - 8.3.7
172.16.86.131  5900  tcp    vnc          open   VNC protocol 3.3
172.16.86.131  6000  tcp    x11          open   access denied
172.16.86.131  6667  tcp    irc          open   UnrealIRCd
172.16.86.131  8009  tcp    ajp13        open   Apache Jserv Protocol v1.3
172.16.86.131  8180  tcp    http         open   Apache Tomcat/Coyote JSP engine 1.1

On voit bien que la base de données de Metasploit à bien sauvegardé mon scan. De plus la vu est beaucoup plus clair et plus light.

Autre chose que nous pouvons faire sous Metasploit c'est l'importation de nos scan nmap. on peut par exemple faire un scan via nmap qu'on enregistre dans un fichier xml pour ensuite l'importer dans Metasploit.

root@shado:~# nmap -sS -A -oX my-nmap-scan.xml 172.16.86.131

Starting Nmap 7.40 ( https://nmap.org ) at 2018-01-29 22:18 CET
NSE: Loaded 143 scripts for scanning.
...

root@shado:~# ls 
Bureau Modèles Public Documents Musique Téléchargements Images my-nmap-scan.xml  Vidéos

maintenant que nous avons généré notre fichier XML contenant notre scan importons le dans Metasploit

msf > db_import my-nmap-scan.xml
[*] Importing 'Nmap XML' data
[*] Import: Parsing with 'Nokogiri v1.8.1'
[*] Importing host 172.16.86.131
[*] Successfully imported /root/my-nmap-scan.xml
msf > 

Et voilà le tour est joué notre scan à bien été importé dans Metasploit sans problème.

Scan avec Metasploit

Il existe dans Metasploit plusieurs modules auxiliaires permettant de faires des scans en tout genre. Nous allons donc découvrir ici un certains nombre d'entre eux.

Enumération des ports ouvert sur une cible.

root@shado:~# msfconsole 
msf > search portscan

Matching Modules
================

   Name                                              Disclosure Date  Rank    Description
   ----                                              ---------------  ----    -----------
   auxiliary/scanner/http/wordpress_pingback_access                   normal  Wordpress Pingback Locator
   auxiliary/scanner/natpmp/natpmp_portscan                           normal  NAT-PMP External Port Scanner
   auxiliary/scanner/portscan/ack                                     normal  TCP ACK Firewall Scanner
   auxiliary/scanner/portscan/ftpbounce                               normal  FTP Bounce Port Scanner
   auxiliary/scanner/portscan/syn                                     normal  TCP SYN Port Scanner
   auxiliary/scanner/portscan/tcp                                     normal  TCP Port Scanner
   auxiliary/scanner/portscan/xmas                                    normal  TCP "XMas" Port Scanner
   auxiliary/scanner/sap/sap_router_portscanner                       normal  SAPRouter Port Scanner

Qu'est ce que nous faisons ici . C'est simple on commence en lançant Metasploit. Une fois la console lancé on cherche dans la base de Metasploit des modules ayant dans leur nom la chaine "portscan"

Le module qui nous intérresse ici est :

auxiliary/scanner/portscan/syn       normal  TCP SYN Port Scanner

Qui permet de faire des scan TCP/SYN et lister les ports ouvert.

Let's go

msf > use auxiliary/scanner/portscan/syn

Maintenant nous allons lister les options nécessaire pour l'utilisation de ce scan.

msf auxiliary(scanner/portscan/syn) > show options

Module options (auxiliary/scanner/portscan/syn):

   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   BATCHSIZE  256              yes       The number of hosts to scan per set
   DELAY      0                yes       The delay between connections, per thread, in milliseconds
   INTERFACE                   no        The name of the interface
   JITTER     0                yes       The delay jitter factor (maximum value by which to +/- DELAY) in milliseconds.
   PORTS      1-10000          yes       Ports to scan (e.g. 22-25,80,110-900)
   RHOSTS                      yes       The target address range or CIDR identifier
   SNAPLEN    65535            yes       The number of bytes to capture
   THREADS    1                yes       The number of concurrent threads
   TIMEOUT    500              yes       The reply read timeout in milliseconds

La seule option requis qui ne soit pas déjà configuré pour ce module est l'adresse de la cible, que nous allons modifier tout de suite et le THREADS aussi au passage qui permet de géré la rapidité du module.

msf auxiliary(scanner/portscan/syn) > set RHOSTS 172.16.86.131
RHOSTS => 172.16.86.131
msf auxiliary(scanner/portscan/syn) > set THREADS 50
THREADS => 50

Une fois que cela est fait on peut lancer notre scan OKLM.

msf auxiliary(scanner/portscan/syn) > exploit

[+]  TCP OPEN 172.16.86.131:21
[+]  TCP OPEN 172.16.86.131:22
[+]  TCP OPEN 172.16.86.131:23
[+]  TCP OPEN 172.16.86.131:25
[+]  TCP OPEN 172.16.86.131:53
[+]  TCP OPEN 172.16.86.131:80
[+]  TCP OPEN 172.16.86.131:111
[+]  TCP OPEN 172.16.86.131:139
[+]  TCP OPEN 172.16.86.131:445
[+]  TCP OPEN 172.16.86.131:512
[+]  TCP OPEN 172.16.86.131:513
[+]  TCP OPEN 172.16.86.131:514
[+]  TCP OPEN 172.16.86.131:1099
[+]  TCP OPEN 172.16.86.131:1524
[+]  TCP OPEN 172.16.86.131:2049
[+]  TCP OPEN 172.16.86.131:2121
[+]  TCP OPEN 172.16.86.131:3306
[+]  TCP OPEN 172.16.86.131:3632
[+]  TCP OPEN 172.16.86.131:5432
[+]  TCP OPEN 172.16.86.131:5900
[+]  TCP OPEN 172.16.86.131:6000
[+]  TCP OPEN 172.16.86.131:6667
[+]  TCP OPEN 172.16.86.131:6697
[+]  TCP OPEN 172.16.86.131:8009
[+]  TCP OPEN 172.16.86.131:8180
[+]  TCP OPEN 172.16.86.131:8787
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

On a aussi la possibilité de faire des scans personalisés pour des services personnalisés tel que SSH, SMTP, FTP etc... qui sont des vecteurs d'attaques très répandu et simple à exploiter. Nous allons donc en tester quelques un.

Scan sur le service SSH

Lors de notre scan nmap on a pu déterminer que le service SSH écoutait sur le port 22. Cependant on aurait très bien pu le faire avec Metasploit qui à un module pour déterminer la version du SSH présent sur un port.

msf auxiliary(scanner/ip/ipidseq) > search ssh_version

Matching Modules
================

   Name                                       Disclosure Date  Rank    Description
   ----                                       ---------------  ----    -----------
   auxiliary/fuzzers/ssh/ssh_version_15                        normal  SSH 1.5 Version Fuzzer
   auxiliary/fuzzers/ssh/ssh_version_2                         normal  SSH 2.0 Version Fuzzer
   auxiliary/fuzzers/ssh/ssh_version_corrupt                   normal  SSH Version Corruption
   auxiliary/scanner/ssh/ssh_version                           normal  SSH Version Scanner

Nous allons ici utilisé le module ssh_version

msf auxiliary(scanner/ip/ipidseq) > use auxiliary/scanner/ssh/ssh_version 
msf auxiliary(scanner/ssh/ssh_version) > show options

Module options (auxiliary/scanner/ssh/ssh_version):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   RHOSTS                    yes       The target address range or CIDR identifier
   RPORT    22               yes       The target port (TCP)
   THREADS  1                yes       The number of concurrent threads
   TIMEOUT  30               yes       Timeout for the SSH probe

La seule option que nous avons à fournir est l'IP de la cible.

msf auxiliary(scanner/ssh/ssh_version) > set RHOSTS 172.16.86.131
RHOSTS => 172.16.86.131
msf auxiliary(scanner/ssh/ssh_version) > exploit

[+] 172.16.86.131:22      - SSH server version: SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu1 ( service.version=4.7p1 openssh.comment=Debian-8ubuntu1 service.vendor=OpenBSD service.family=OpenSSH service.product=OpenSSH os.vendor=Ubuntu os.device=General os.family=Linux os.product=Linux os.version=8.04 service.protocol=ssh fingerprint_db=ssh.banner )
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

On obtiens donc la version du service SSH sur la cible qu'on peut comparer avec c'elle scanner par nmap

msf > services

Services
========

host           port  proto  name         state  info
----           ----  -----  ----         -----  ----
...
172.16.86.131  22    tcp    ssh          open   OpenSSH 4.7p1 Debian 8ubuntu1 protocol 2.0
...

Scan du service FTP

Toujours dans la même optique de récolter un maximum de preuve et de comparer le résultat de plusieurs outils de scan afin d'éviter les faux positif on va s'atarder sur le service FTP. Sachant que le protocole FTP est un protocole pas très sécurisé il se peut que nous récoltons des informations plus fines en le scannant de manière plus ciblé et précise. On pourrait trouvé une porte d'entré facile à exploité.

On procède comme à l'habitude en cherchant le module correspondant.

msf > search ftp_version

Matching Modules
================

   Name                               Disclosure Date  Rank    Description
   ----                               ---------------  ----    -----------
   auxiliary/scanner/ftp/ftp_version                   normal  FTP Version Scanner

On affiche et renseigne les options nécessaire

msf > use auxiliary/scanner/ftp/ftp_version
msf auxiliary(scanner/ftp/ftp_version) > show options

Module options (auxiliary/scanner/ftp/ftp_version):

   Name     Current Setting      Required  Description
   ----     ---------------      --------  -----------
   FTPPASS  mozilla@example.com  no        The password for the specified username
   FTPUSER  anonymous            no        The username to authenticate as
   RHOSTS                        yes       The target address range or CIDR identifier
   RPORT    21                   yes       The target port (TCP)
   THREADS  1                    yes       The number of concurrent threads

msf auxiliary(scanner/ftp/ftp_version) > set RHOSTS 172.16.86.131
RHOSTS => 172.16.86.131

Ensuite on lance le module de scan

msf auxiliary(scanner/ftp/ftp_version) > exploit

[+] 172.16.86.131:21      - FTP Banner: '220 (vsFTPd 2.3.4)\x0d\x0a'
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf auxiliary(scanner/ftp/ftp_version) > 

Scanner le service SMTP

Ici plutôt que la version nous allons faire ce qu'on appelle dans le jargon de l'énumération.Ccomme vous l'aurez deviner nous allons énuméré les utilisateurs du service SMTP.

Comme d'habitude :

msf > search smtp_enum

Matching Modules
================

   Name                              Disclosure Date  Rank    Description
   ----                              ---------------  ----    -----------
   auxiliary/scanner/smtp/smtp_enum                   normal  SMTP User Enumeration Utility

On renseigne les options :

msf > use auxiliary/scanner/smtp/smtp_enum 
msf auxiliary(scanner/smtp/smtp_enum) > show options

Module options (auxiliary/scanner/smtp/smtp_enum):

   Name       Current Setting                                                Required  Description
   ----       ---------------                                                --------  -----------
   RHOSTS                                                                    yes       The target address range or CIDR identifier
   RPORT      25                                                             yes       The target port (TCP)
   THREADS    1                                                              yes       The number of concurrent threads
   UNIXONLY   true                                                           yes       Skip Microsoft bannered servers when testing unix users
   USER_FILE  /usr/share/metasploit-framework/data/wordlists/unix_users.txt  yes       The file that contains a list of probable users accounts.

msf auxiliary(scanner/smtp/smtp_enum) > set RHOSTS 172.16.86.131
RHOSTS => 172.16.86.131

Puis on lance le module d'énumération.

msf auxiliary(scanner/smtp/smtp_enum) > exploit

[*] 172.16.86.131:25      - 172.16.86.131:25 Banner: 220 metasploitable.localdomain ESMTP Postfix (Ubuntu)

technique de scan furtif

Les objectifs finaux des attaquants seront très souvent différents, certains sont là pour nuir, d'autres pour faire du profit, d'autres pour un test d'intrusion, d'autres pour des raisons diverses et varié mais la seule chose que pratiquement tous les attaquants auront en communs c'est la volonté de passer inaperçu pour qu'on ne puisse dans l'idéal même pas s'apercevoir de leur passage ou au mieux ne pas pouvoir remonter jusqu'à eux. Cette volonté de passé inaperçu est aussi valable lors des scans et pour ce faire il y a une technique de scan qui s'appel le IDLE scanning et qui permet de faire des scans en se faisant pour une autre machine du réseau de la victime ou autre.

Comment ça marche

Pour comprendre comment marche le IDLE scanning ou zombie scan il faut voir un peu la téhorie et comprendre comment fonctionne le protocole IP et le protocole ICMP.

Tout d'abord il faut savoir qu'un paquet TCP/IP est au moins composé de deux protocole le protocole IP et le protocole TCP. Vous me direz que c'est évident mais ce que je veux dire est et c'est important c'est que ce sont bien deux protocole bien distinct.

Sur le protocole IP nous pouvons très bien monté un protocole de couche supérieur comme ICMP etc...

Ok TCP/IP c'est deux protocole bien distinct, on a compris merci, maintenant ton IDLE scanning zombie machin ... Comment ça marche ?

Du calme papillon nous allons y venir, mais nous devons d'abord poser les bases.

Bon voyons le pourquoi du comment. Quand un hôte reçoit plusieurs paquets de façon rapproché, celui-ci doit être en mesure de déterminer de façon sûr l'ordre de ces paquets. Pour cela le protocole IP à un champ prévu pour cet effet. Ce champ s'appel l'IPID qui est incrémentale chaque paquets ce verra attribué l'IPID du paquet précédent incrémenté de 1.

Si l'IPID du paquet X est 500 l'IPID du paquet Y sera 501 et ainsi de suite.

Et comme vous vous en doutez certainement c'est grâce à ce champ IPID que nous allons pouvoir exploiter la technique de scan furtif ou scan zombie.

Pour visualiser l'IPID d'un paquet ICMP par exemple on peut utiliser hping3 pour lancé un ping vers une machine quelconques.

root@shado:~# hping3 172.16.86.131 -1
HPING  (172.16.86.131): icmp mode set, 28 headers + 0 data bytes
len=28 ip=172.16.86.131 ttl=64 id=59058 icmp_seq=0 rtt=4.4 ms
len=28 ip=172.16.86.131 ttl=64 id=59059 icmp_seq=1 rtt=4.3 ms
len=28 ip=172.16.86.131 ttl=64 id=59060 icmp_seq=2 rtt=4.4 ms
len=28 ip=172.16.86.131 ttl=64 id=59061icmp_seq=3 rtt=4.4 ms

On peut constater que le champ ID est incrémenté à chaque requête.

Bon maintenant qu'on a vu l'IPID qui s'incrémente tu nous dit c'est quoi le rapport avec le IDLE scanning ou pas ?

Bon allons y. Comment est ce que cela fonctionne ? C'est simple (enfin pas tant que ça en fait), la première chose à faire est de trouver une machine dite zombie sur le réseau. Une machine zombie est rien d'autre qu'une machine inactif sur le réseau.

Une fois que cela est fait nous devons découvrir le numéros d'IPID de notre zombie, pour ce faire un paquet TCP lui est envoyé avec des informations erronées. Le paquet TCP envoyé sera un paquet de SYN/ACK (pour synchronisation/Acknowlegment). En recevant ce paquet le zombie va nous renvoyé un paquet RST (Reset) dans lequel ce trouvera son fameux numéro IPID qui sera gardé bien au chaud.

Une fois cela effectué, la seconde étape sera d'envoyer un paquet de type SYN directement à la cible mais en usurpant l'IP de la machine zombie dans le champ IP source du paquet. Si le port de la machine est ouvert la machine cible répondra au zombie avec un paquet de type SYN/ACK. La machine zombie va donc envoyer un paquet RST à la cible étant donné qu'il n'est pas le véritable émmeteur de la requête SYN. La machine zombie ayant envoyer un paquet RST à la cible elle incrémente donc son IPID de 1.

Vous comprenez ce qui est en train de ce passer là ?

C'est donc cette incrémentation qui permet à l'attaquant de déterminer si le port est ouvert ou pas.

Dernière étape de notre incantation. On envoie un nouveau paquet TCP SYN/ACK à notre machine zombie qui va nous répondre avec un paquet RST. Mais ce qui est important à relevé sera son IPID. Si l'IPID est incrémenté de 2 cela veux dire que le port scanné est ouvert si l'IPID est incrémenté de 1 cela veux dire que le port est fermé ou filré.

Heureusement pour nous nous n'avons pas à nous préocuper de tout cela, des outils sont déjà à notre disposition qui vont réaliser cela pour nous.

Il existe plusieurs façon de faire du idle scanning je présenterais ici trois façon de faire :

  1. IDLE scanning by nmap
  2. IDLE scanning by Metasploit + nmap
  3. IDLE scanning by scapy (bonus)

IDLE Scan avec nmap

nmpa permet de faire du IDLE scanning sur un réseau donné, cependant c'est à nous de déterminer qu'elle est la machine zombie sur le réseau. Une fois que nous avons notre machine zombie ont peut lancé un scan de cette manière :

root@shado:~# nmap -Pn -sI 172.16.86.132 172.16.86.131

IDLE Scan avec nmap et Metasploit combiné

Avec nmap seulement pour pouvoir faire un IDLE scanning zombie il faut au préalable connaitre l'IP d'une machine inactive sur le réseau. Il est cependant possible de demander à Metasploit de trouver pour nous un hôte inactif sur le réseau. Pour ce faire nous utiliserons un module auxiliaire appelé idpsec.

msf > search ipidseq

Matching Modules
================

   Name                          Disclosure Date  Rank    Description
   ----                          ---------------  ----    -----------
   auxiliary/scanner/ip/ipidseq                   normal  IPID Sequence Scanner

msf > use auxiliary/scanner/ip/ipidseq
msf auxiliary(scanner/ip/ipidseq) > show options

Module options (auxiliary/scanner/ip/ipidseq):

   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   INTERFACE                   no        The name of the interface
   RHOSTS                      yes       The target address range or CIDR identifier
   RPORT      80               yes       The target port
   SNAPLEN    65535            yes       The number of bytes to capture
   THREADS    1                yes       The number of concurrent threads
   TIMEOUT    500              yes       The reply read timeout in milliseconds

Ont renseigne le réseau qu'on souhaite balayer pour trouver un hôte inactif.

msf auxiliary(scanner/ip/ipidseq) > set RHOSTS 172.16.86.0/24
RHOSTS => 172.16.86.0/24

C'est parti !!!

msf auxiliary(scanner/ip/ipidseq) > exploit

[*] 172.16.86.1's IPID sequence class: Unknown
[*] 172.16.86.2's IPID sequence class: Incremental!
[*] Scanned  30 of 256 hosts (11% complete)
[*] Scanned  52 of 256 hosts (20% complete)
[*] Scanned  78 of 256 hosts (30% complete)
[*] Scanned 105 of 256 hosts (41% complete)
[*] Scanned 130 of 256 hosts (50% complete)
[*] 172.16.86.131's IPID sequence class: All zeros
[*] 172.16.86.133's IPID sequence class: Incremental!
[*] Scanned 155 of 256 hosts (60% complete)
[*] Scanned 180 of 256 hosts (70% complete)
[*] Scanned 205 of 256 hosts (80% complete)
[*] Scanned 231 of 256 hosts (90% complete)
[*] Scanned 256 of 256 hosts (100% complete)
[*] Auxiliary module execution completed
e)

Metasploit nous a trouvé deux hôtes inactif sur le réseau qu'on peut remarqué grâce à la sortie suivante dans notre scan :

[*] 172.16.86.132's IPID sequence class: Incremental!

Donc notre zombie sera l'hôte 172.16.86.132 que nous allons utilisé pour faire notre IDLE scanning zombie grâce à nmap comme on l'a déjà fait plus haut.

msf auxiliary(scanner/ip/ipidseq) > nmap -Pn -sI 172.16.86.132 172.16.86.131

Petite info lors du test si votre zombie est une VM Windaube windows il se peut que Metasploit n'arrive pas à la détecter car celui ci utilise le protocole ICMP il faut donc désactivé le par-feu windows.

IDLE scan via Scapy (Bonus)

Scapy est un outil d'injection et de manipulation de paquets dans un réseau. Scapy est un module très puissant pour Python permettant de forger, décoder, émettre et recevoir les paquets d’une multitude de protocoles (ARP, DHCP, DNS, ICMP, IP...). Il peut facilement manipuler la plupart des tâches classiques comme le scan, traceroute, etc...

J'ai intenionnellement laissé cette partie pour la fin car c'est vraiment un bonus pour ce qui souhaite découvrir quelques chose de plus avancé.

Pour lancer scapy il siffit de taper la commande suivante dans un terminal

root@shado:~# scapy
WARNING: No route found for IPv6 destination :: (no default route?)
Welcome to Scapy (2.3.3)
>>>

Scapy offre plusieurs commandes/options pour forger des requêtes de tout genre parmis elle on peut citer .

Valeurs Description
x =IP() Création d'une couche IP qu'on affecte à une variable
x.display() Visualiser les componsant du paquet x
x.dst = @IP Assigner une adresse de destination à notre paquet IP
x.display Visualiser les composants du paquet IP
u = UDP() Création d'un paquet UDP qu'on affecte à une variable u
u.display() Visualiser les composant du paquet
u.dport Visualiser le port du paquet UDP
u.port = 123 Assigner le port 123 (ntp) au paquet udp
request = (i/u) Combiner les deux couches i(IP) et u(UDP) dans la variable request
request.display() Visualiser les composant de notre requête composer du paquet IP et du paquet UDP
response = sr1(request) Récupération de la réponse
response.display() Analyser la réponse

A partir de là et maintenant que l'on sait comment manipuler scapy on peut tenter un IDLE scanning zombie avec cette outil.

root@shado:~# scapy
WARNING: No route found for IPv6 destination :: (no default route?)
Welcome to Scapy (2.3.3)
>>> 

Maintenant ce qu'on va faire c'est qu'on va dérouler le procéder décrit plus haut sur le fonctionnement du IDLE scanning. Nous allons le faire à la main avec scapy afin de mieux comprendre comment ça fonctionne.

C'est parti !!!

On envoie le premier paquet à notre zombie afin de déterminer son numéro d'IPID.

>>> pak_1 = sr1(IP(dst="172.16.86.136")/TCP(sport=12345,dport=(123),flags="SA"),verbose=0)

On stock le numéro IPID dans une variable.

>>> debut_id = pak_1.id

Nous envoyons ensuite notre scan du port 80 (pour l'exemple on scan juste le port 80)

>>> pak_2 = send(IP(dst="172.16.86.131",src="172.16.86.136")/TCP(sport=12345,dport=(80),flags="S"),verbose=0)

On renvoie un paquet IP SYN/ACK pour pouvoir déterminer la valeur actuelle du IPID

>>> pak_3 = sr1(IP(dst="172.16.86.136")/TCP(sport=12345,dport=(123),flags="SA"),verbose=0)

On affecte le IPID à une variable.

>>> fin_id = pak_3.id

On regarde le contenue de l'IPID au début et à la fin

>>> debut_id
2148
>>> fin_id
2150

Si l'écart est de 1 le port 80 est fermé par contre si l'écart est de deux ou plus cela veux dire que le port est ouvert. On peut le constater facilement en faisant comme suis :

>>> fin_id - debut_id
2 

Voilà nous avons réalisé un IDLE scanning zombie à la main enfin avec scapy (et python) mais sans outils d'automatisation.

Pour les plus courageux qui veulent élargir le sujet je vous laisse pensez à une manière de réaliser un script qui automatiserait cette vérification de port avec python et le module scapy.

Il faudra tout de même que vous importiez le module scapy dans votre script python pour pouvoir utilisé le module.

Je suis gentil je vous file un petit coup de pouce pour les modules à importer.

#!/usr/bin/python
import os
import sys
from scapy.all import *
...
...

A vous de jouer maintenant.

Je vous donne donc rendez vous pour la deuxième partie de cette série de tutoriel sur la réalisation d'un pentest.