Scan de vulnérabilité

Introduction

La recherche de vulnérabilité est l'une voir la phase la plus importante d'un test de pénétrattion. C'est cette recherche de vulnérabilité et d'information sur notre cible qui nous permettre de penser un scénario d'attaque précis. Un peu comme un sniper qui prépare le terrain anvant de se placer pour tirer, il doit connaitre sa distance de tir, calculer la force du vent par rapport à sa distance, orienter son angle en fonction de si la cible sera mobile ou static etc... Donc exactement comme un sniper le pentester doit récolter le maximum d'information sur sa cible avant d'attaquer pour bien déterminer sa fenêtre de tir et frapper là où il est suceptible d'entrer et sortir sans se faire remarquer.

Bon trêve de bavardage le but de cet article ici est de vous montrer comment on peut mener à bien une recherche d'information active qui à l'inverse de la recherche passive demande une certaine interaction avec le système ciblé.

prérequis

  1. virtualbox ou Vmware
  2. Kali Linux 192.168.1.6
  3. Metasploitable 192.168.1.22

Outils utilisé :

  1. Nmap
  2. Metasploit
  3. Scapy

Nmap Network Mapping

Sans doute l'outil de scan de vulnérabilité le plus utilisé par les pentester. Il permet entre autre de déterminer les ports ouvert d'un système, ainsi que leurs status si ils sont ouvert, fermer ou filtrer par un firewall. Il permet aussi d'afficher les services tournant sur ces ports, leurs versions et ainsi que leurs banière mais on verra tous ça dans un instant.

Commençons donc notre récolte d'informations sur notre cilbe avec nmap.

Commençons donc par un scan nmap simple sans aucune options

root@kali:~# nmap 192.168.1.22

Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-11 18:46 GMT
Nmap scan report for 192.168.1.22
Host is up (0.00021s 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: 08:00:27:27:8B:14 (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 16.16 seconds

Ici on a quelques informations mais ce n'est pas très précis car nous avons la liste des ports ouvert et les services qui tourne derrière et c'est tout. Ces informations peuvent nous être utiles pour débuté notre recherche mais ne nous permet pas de déterminer avec exactitude notre potentiel point d'entré. Donc on va affiner ça

Scan nmap de type Syn scan avec affichage des versions des services.

root@kali:~# nmap -v -sS -sV 192.168.1.22

Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-11 18:52 GMT
NSE: Loaded 42 scripts for scanning.
Initiating ARP Ping Scan at 18:52
Scanning 192.168.1.22 [1 port]
Completed ARP Ping Scan at 18:52, 0.20s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 18:52
Completed Parallel DNS resolution of 1 host. at 18:52, 13.01s elapsed
Initiating SYN Stealth Scan at 18:52
Scanning 192.168.1.22 [1000 ports]
Discovered open port 21/tcp on 192.168.1.22
Discovered open port 23/tcp on 192.168.1.22
Discovered open port 25/tcp on 192.168.1.22
Discovered open port 53/tcp on 192.168.1.22
Discovered open port 445/tcp on 192.168.1.22
Discovered open port 139/tcp on 192.168.1.22
Discovered open port 5900/tcp on 192.168.1.22
Discovered open port 3306/tcp on 192.168.1.22
...
Completed SYN Stealth Scan at 18:52, 2.65s elapsed (1000 total ports)
Initiating Service scan at 18:52
Scanning 23 services on 192.168.1.22
Completed Service scan at 18:52, 11.10s elapsed (23 services on 1 host)
NSE: Script scanning 192.168.1.22.
Initiating NSE at 18:52
...
PORT     STATE SERVICE     VERSION
21/tcp   open  ftp         vsftpd 2.3.4
22/tcp   open  ssh         OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
23/tcp   open  telnet      Linux telnetd
25/tcp   open  smtp        Postfix smtpd
53/tcp   open  domain      ISC BIND 9.4.2
80/tcp   open  http        Apache httpd 2.2.8 ((Ubuntu) DAV/2)
111/tcp  open  rpcbind     2 (RPC #100000)
139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
512/tcp  open  exec        netkit-rsh rexecd
513/tcp  open  login       OpenBSD or Solaris rlogind
514/tcp  open  tcpwrapped
1099/tcp open  rmiregistry GNU Classpath grmiregistry
1524/tcp open  shell       Metasploitable root shell
2049/tcp open  nfs         2-4 (RPC #100003)
2121/tcp open  ftp         ProFTPD 1.3.1
3306/tcp open  mysql       MySQL 5.0.51a-3ubuntu5
5432/tcp open  postgresql  PostgreSQL DB 8.3.0 - 8.3.7
5900/tcp open  vnc         VNC (protocol 3.3)
6000/tcp open  X11         (access denied)
6667/tcp open  irc         UnrealIRCd
8009/tcp open  ajp13       Apache Jserv (Protocol v1.3)
8180/tcp open  http        Apache Tomcat/Coyote JSP engine 1.1
MAC Address: 08:00:27:27:8B:14 (Oracle VirtualBox virtual NIC)
Service Info: Hosts:  metasploitable.localdomain, localhost, irc.Metasploitable.LAN; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Le résultat à volontairement été tronquer de ma part car trop long.

Ici notre scan est un peut plus verbeux grâce à l'option -v pour le mode verbeux. De plus une nouvelle colonne est apparut avec la version des services qui tourne sur chaques port. On observe aussi que la version de l'OS nous est donné à la fin du scan

On peut aussi lancer un scan agressif avec l'option -A qui va en plus afficher les banner des services.

root@kali:~# nmap -v -sS -sV -A 192.168.1.22

Scan avec metasploit

Metasploit est un outils très performant et très surprenant remplie de beaucoups de surprises. Metasploit possède beaucoups d'exploit, de payloads et de modules auxyliare et c'est bien ces modules auxyliare qui vont nous aider pour faire des scans nmap. Ce qui est bien avec les scans metasploit c'est qu'il reste stocker en base de données et pouvoir lister les résultats à tout moments. On peut aussi importer dans metasploit des scan nmap pour les utiliser lors de l'exploitation avec metasploit.

root@kali:~# msfconfole

Il faut savoir que l'outil nmap est déjà intégrer dans metasploit et qu'il utilise exactement la même syntaxe que nmap.

msf > db_nmap -v -sS -sV 192.168.1.22
[*] Nmap: Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-11 19:49 GMT
[*] Nmap: NSE: Loaded 42 scripts for scanning.
...
[*] Nmap: 8009/tcp open  ajp13       Apache Jserv (Protocol v1.3)
[*] Nmap: 8180/tcp open  http        Apache Tomcat/Coyote JSP engine 1.1
[*] Nmap: MAC Address: 08:00:27:27:8B:14 (Oracle VirtualBox virtual NIC)
[*] Nmap: Service Info: Hosts:  metasploitable.localdomain, localhost, irc.Metasploitable.LAN; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
[*] Nmap: Read data files from: /usr/bin/../share/nmap
[*] Nmap: Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
[*] Nmap: Nmap done: 1 IP address (1 host up) scanned in 27.85 seconds
[*] Nmap: Raw packets sent: 1026 (45.128KB) | Rcvd: 1026 (41.120KB)

Afficher les scans effectuer avec metasploit

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
-------       ---                ----  -------  ---------  -----  -------  ----  --------
192.168.1.22  08:00:27:27:8b:14        Linux                      server         
msf >

Afficher le résultat de notre scan :

msf > services 192.168.1.22

Services
========

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

Maintenant nous allons voir comment exporter un scan nmap dans metasploit.

Tout d'abord il faut lancer notre scan nmap avec l'option -ox outpout pour enregistrer le résultat au format xml.

root@kali:~# nmap -v -sS -sV -A -oX mon_scan 192.168.1.22 
Warning: The -o option is deprecated. Please use -oN

Une fois que cela est fait nous retournons dans metasploit pour importer notre scan. L'importation de scan dans metasploit est très simple il sufit de :

msf > db_import mon_scan
[*] Importing 'Nmap XML' data
[*] Import: Parsing with 'Nokogiri v1.8.1'
[*] Importing host 192.168.1.22
[*] Successfully imported /root/mon_scan
msf > 

Notre scan a bien été importé dans metasploit et pour lister le résultat dans metasploit rien de plus simple.

msf > services 192.168.1.22

Services
========

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

Quelques autres type de scan possible avec metasploit.

IDLE Scanning

Le IDLE scanning est une technique de scan dite furtife qui permet à un attaquant de scanner une cible en faisant croire à celle-ci que c'est un autre hôte du même réseau qui effectue le scan.

Pour effectuer se genre de scan il faut auparavant trouver un hote inactif sur le réseau de notre cible. Et pour cela Metasploit dispose d'un module pour trouver des hotes inactive et active sur le réseau.

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(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

msf auxiliary(ipidseq) > set RHOSTS 192.168.1.0/24
RHOSTS => 192.168.1.0/24
msf auxiliary(ipidseq) > set THREADS 5
THREADS => 5
msf auxiliary(ipidseq) > exploit

[*] 192.168.1.1's IPID sequence class: All zeros
[*] 192.168.1.4's IPID sequence class: Unknown
[*] 192.168.1.10's IPID sequence class: All zeros
[*] 192.168.1.19's IPID sequence class: Unknown
[*] 192.168.1.23's IPID sequence class: Incremental!
[*] 192.168.1.22's IPID sequence class: All zeros
[*] Scanned  26 of 256 hosts (10% complete)
[*] Scanned  52 of 256 hosts (20% complete)
[*] Scanned  77 of 256 hosts (30% complete)
[*] Scanned 103 of 256 hosts (40% complete)
[*] Scanned 129 of 256 hosts (50% complete)
[*] Scanned 154 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

Et hop on a trouvé un host inactive sur le réseau qui va faire les scans à notre place comme on peut le voir.

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

Mantenant on peut lancer notre IDLE Scanning zombie :

msf auxiliary(ipidseq) > nmap -Pn -sI 192.168.1.23 192.168.1.22
[*] exec: nmap -Pn -sI 192.168.1.23 192.168.1.22

Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-11 22:42 GMT
Idle scan using zombie 192.168.1.23 (192.168.1.23:80); Class: Incremental
Nmap scan report for 192.168.1.22
Host is up (0.056s latency).
Not shown: 977 closed|filtered 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: 08:00:27:27:8B:14 (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 45.68 seconds

On va maintenant utiliser un autre modules de matasploit pour faire des scans avec metasploit le module portscan/syn

On va donc chercher le module porscan

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

On va utiliser le module et afficher les options :

msf > use auxiliary/scanner/portscan/syn
msf auxiliary(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

On va donc modifier le RHOST et lancer le scan :

msf auxiliary(syn) > set RHOSTS 192.168.1.22
RHOSTS => 192.168.1.22
msf auxiliary(syn) > exploit

[+]  TCP OPEN 192.168.1.22:21
[+]  TCP OPEN 192.168.1.22:22
[+]  TCP OPEN 192.168.1.22:23
[+]  TCP OPEN 192.168.1.22:25
[+]  TCP OPEN 192.168.1.22:53
[+]  TCP OPEN 192.168.1.22:80
[+]  TCP OPEN 192.168.1.22:111
[+]  TCP OPEN 192.168.1.22:139

Nous allons maintenant effectuer un scan sur le service FTP de notre cible dont nous connaisons la version et le nom. Nous allons maintenant voir si ce FTP peut être parcouru en tant qu'utilisateur anonyme. Pour cela rien de plus simple il existe un module.

msf > search ftp/anonymous

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

   Name                             Disclosure Date  Rank    Description
   ----                             ---------------  ----    -----------
   auxiliary/scanner/ftp/anonymous                   normal  Anonymous FTP Access Detection

msf > use auxiliary/scanner/ftp/anonymous

On regarde les options disponible pour ce module.

msf auxiliary(anonymous) > show options

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

   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

On modifie les options RHOSTS (remote hosts) et THREADS (option pour la vitesse du scan).

msf auxiliary(anonymous) > set RHOSTS 192.168.1.22
RHOSTS => 192.168.1.22
msf auxiliary(anonymous) > set THREADS 5
THREADS => 5

Il ne reste plus qu'a lancer notre scan et regarder le résultat.

msf auxiliary(anonymous) > exploit

[+] 192.168.1.22:21       - 192.168.1.22:21 - Anonymous READ (220 (vsFTPd 2.3.4))
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

Il y a bien un compte anonymous qui uniquement des droits de lecture sur le FTP de notre cible.

Conclusion

Voilà nous en savons un peut plus sur la recherche d'informations avtive avec nmap et Metasploit. il faut savoir qu'il existe une multitude de module de scan dans metasploit et que ce montrer dans cette article ne représente qu'une infime partie des possibilité qu'offre metasploit pour le scan de vulnérabilité.