Développer un scanner Metasploit dans Nmap

NmapNmapBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous reviendrons sur la structure des modules et l'analyse fonctionnelle de Metasploit, puis nous nous concentrerons sur l'introduction des scanners. Vous apprendrez à développer votre propre scanner Metasploit.

Ce laboratoire est un tutoriel pratique. Pour vous aider à comprendre certaines opérations, nous inclurons quelques éléments de théorie en sécurité informatique et vous recommandons des articles intéressants à lire, vous permettant de consolider vos bases théoriques tout en pratiquant.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/host_discovery("Host Discovery Techniques") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") subgraph Lab Skills nmap/port_scanning -.-> lab-416123{{"Développer un scanner Metasploit dans Nmap"}} nmap/host_discovery -.-> lab-416123{{"Développer un scanner Metasploit dans Nmap"}} nmap/target_specification -.-> lab-416123{{"Développer un scanner Metasploit dans Nmap"}} nmap/service_detection -.-> lab-416123{{"Développer un scanner Metasploit dans Nmap"}} end

Revoir la structure de Metasploit et créer le fichier simple_tcp.rb

Tout d'abord, revenons sur la structure de Metasploit.

Metasploit est conçu selon un concept modulaire pour améliorer l'efficacité de réutilisation du code. Le framework est développé en Ruby et inclut des composants écrits en Perl, C, Assembly et Python. Il est principalement conçu pour les systèmes d'exploitation Linux, donc sa structure de commandes est très similaire à celle d'un shell de commande Linux. Cependant, il prend désormais en charge tous les principaux systèmes d'exploitation, tels que Windows, Solaris et Mac.

+---------------+------------------+----------------------------------------------+
| English Name  | Module Name      | Description                                  |
+---------------+------------------+----------------------------------------------+
| `Aux`         | Auxiliary Module | Provides a wealth of auxiliary modules for   |
|               |                  | information gathering during penetration,    |
|               |                  | including scanning and fingerprinting        |
|               |                  | various network services, building fake      |
|               |                  | services to collect login credentials,       |
|               |                  | password guessing, etc.                      |
+---------------+------------------+----------------------------------------------+
| `Exploits`    | Exploit Module   | Code components that exploit discovered      |
|               |                  | security vulnerabilities or configuration    |
|               |                  | weaknesses to attack remote target systems,  |
|               |                  | plant and run payloads, and gain access      |
|               |                  | control over the target systems.             |
+---------------+------------------+----------------------------------------------+
| `Post`        | Post-Exploit     | Supports various post-exploitation actions   |
|               | Module           | on the controlled system after gaining       |
|               |                  | remote access control through exploitation,  |
|               |                  | such as obtaining sensitive information,     |
|               |                  | further pivoting, and launching pivot        |
|               |                  | attacks.                                     |
+---------------+------------------+----------------------------------------------+
| `Payloads`    | Payload Module   | Payloads are code segments that run on the   |
|               |                  | target system after a successful             |
|               |                  | exploitation, typically to open a control    |
|               |                  | session connection for the attacker.         |
+---------------+------------------+----------------------------------------------+
| `Encoders`    | Encoder Module   | After assembling the payload and NOP         |
|               |                  | instructions into an instruction sequence,   |
|               |                  | Metasploit needs to perform an important     |
|               |                  | encoding step before the exploit module      |
|               |                  | injects the malicious data buffer into the   |
|               |                  | target system for execution.                 |
+---------------+------------------+----------------------------------------------+
| `Nops`        | NOP Module       | NOP (No Operation) instructions are          |
|               |                  | operations or instructions that have no      |
|               |                  | substantial effect on the program's          |
|               |                  | execution state.                             |
+---------------+------------------+----------------------------------------------+

Metasploit intègre également plusieurs composants de scan de vulnérabilités, tels que :

  • Scanner Nmap : Adapté pour Windows, Linux et Mac OS. Utilisé pour la découverte d'hôtes, le scan ou l'énumération de ports, la découverte de services et la détection des systèmes d'exploitation, des adresses matérielles, des versions de logiciels et des vulnérabilités.

  • Scanner NeXpose : Scanne le réseau pour trouver les appareils en cours d'exécution, identifier leurs systèmes d'exploitation et les vulnérabilités des applications, analyser les données scannées et générer des rapports de scan de vulnérabilités.

  • Scanner Nessus : L'un des outils de scan de vulnérabilités les plus largement utilisés. Il adopte un modèle client/serveur, le serveur effectuant les vérifications de sécurité et le client configurant et gérant le serveur. Le serveur utilise également un système de plugins, permettant aux utilisateurs d'ajouter des plugins pour des fonctions spécifiques et des vérifications de sécurité plus complexes.

Maintenant, nous allons créer un nouveau module de scanner Metasploit appelé simple_tcp.rb.

  1. Ouvrez un terminal xfce sur la machine hôte LabEx et démarrez la cible Metasploitable2 en exécutant la commande suivante :
sudo virsh start Metasploitable2

Attendez que la machine cible démarre, cela peut prendre de 1 à 3 minutes.

  1. Testez la connectivité à la machine cible en l'envoyant des paquets ICMP (ping) :
ping 192.168.122.102

Appuyez sur Ctrl+C pour arrêter le ping.

  1. Lancez le conteneur Kali Linux et entrez dans l'environnement bash en exécutant :
docker run -ti --network host b5b709a49cd5 bash
  1. À l'intérieur du conteneur Kali, testez la connexion réseau à la machine cible :
ping 192.168.122.102

Appuyez sur Ctrl+C pour arrêter le ping.

  1. Ensuite, accédez au répertoire du module scanner :
cd /usr/share/metasploit-framework/modules/auxiliary/scanner
  1. Créez un nouveau fichier nommé simple_tcp.rb :
sudo vi simple_tcp.rb
  1. Copiez et collez le code suivant dans le fichier :
require 'msf/core'
class MetasploitModule < Msf::Auxiliary
    include Msf::Exploit::Remote::Tcp
    include Msf::Auxiliary::Scanner

    def initialize
        super(
            'Name'        => 'Mr_Zhou Scanner',
            'Version'     => '$Revision$',
            'Description' => 'Shiyanlou TCP Scanner',
            'Author'      => 'lucat',
            'License'     => MSF_LICENSE
        )
        register_options(
            [
                Opt::RPORT(12345)
            ], self.class)
    end

    def run_host(ip)
        connect()
        sock.puts('HELLO SERVER')
        data = sock.recv(1024)
        print_status("Received: #{data} from #{ip}")
        disconnect()
    end
end
  1. Ce code définit un nouveau module Metasploit appelé "Mr_Zhou Scanner" qui scanne les ports TCP et affiche les données reçues du serveur. Analysons le code :
def initialize
    super(
        'Name'        => 'Mr_Zhou Scanner',
        'Version'     => '$Revision$',
        'Description' => 'Shiyanlou TCP Scanner',
        'Author'      => 'lucat',
        'License'     => MSF_LICENSE
    )

Cette section définit les métadonnées du module, telles que son nom, sa description, son auteur et sa licence.

register_options(
    [
        Opt::RPORT(12345)
    ], self.class)

Cette ligne enregistre l'option de scanner le port 12345.

def run_host(ip)
    connect()
    sock.puts('HELLO SERVER')
    data = sock.recv(1024)
    print_status("Received: #{data} from #{ip}")
    disconnect()
end

Cette méthode est exécutée pour chaque adresse IP cible. Elle se connecte au port spécifié, envoie la chaîne "HELLO SERVER", reçoit et affiche les données du serveur, puis se déconnecte.

Enregistrez le fichier et quittez l'éditeur.

Configurer un serveur d'écoute

Pour tester notre scanner simple_tcp.rb, nous devons configurer un serveur d'écoute sur la machine cible.

Sur l'hôte LabEx, ouvrez un nouveau terminal Xfce et créez un fichier appelé shiyanlou.txt :

vi shiyanlou.txt

Dans ce fichier, entrez le texte de votre choix. Ce texte sera renvoyé au scanner lorsqu'il se connectera au port d'écoute. Par exemple :

Life is short, i use Python.

Enregistrez le fichier et quittez l'éditeur.

Ensuite, démarrez un serveur d'écoute sur le port 12345 (le port configuré pour notre scanner) et envoyez le contenu de shiyanlou.txt à tous les clients qui se connectent :

sudo nc -l 12345 < shiyanlou.txt

Le serveur écoute désormais sur le port 12345 et attend les connexions entrantes.

Exécuter le scanner simple_tcp

Maintenant que nous avons configuré notre module de scanner simple_tcp et un serveur d'écoute, exécutons le scanner et vérifions s'il fonctionne.

Tout d'abord, lancez la console Metasploit dans le conteneur Kali Linux :

cd ~
sudo msfconsole

Une fois la console chargée, utilisez notre module simple_tcp :

use auxiliary/scanner/simple_tcp

Vous pouvez afficher les informations sur le module avec la commande info :

info

Voici un exemple de sortie que vous pourriez voir :

Name:          Mr_Zhou Scanner
Description:   Shiyanlou TCP Scanner
Author:        lucat
License:       Metasploit Framework License (BSD)
Version:       $Revision$

Ensuite, définissez l'adresse IP de l'hôte cible :

set RHOSTS 192.168.122.1

Remarque : Utilisez RHOSTS (avec un 's'), pas RHOST. Vous pouvez vérifier quelle option utiliser avec la commande show options.

Enfin, exécutez le scanner :

run

Si tout est configuré correctement, vous devriez voir le message du serveur d'écoute :

[+] Received: Life is short, i use Python. from 192.168.122.1

Si vous n'avez pas reçu ce message, retournez au serveur d'écoute et exécutez à nouveau sudo nc -l 12345 < shiyanlou.txt.

Félicitations! Vous avez développé et testé avec succès votre propre module de scanner Metasploit.

Appuyez sur Ctrl+D pour quitter la console Metasploit, puis commencez l'inspection

Résumé

Dans ce laboratoire, vous avez appris à développer votre propre module de scanner Metasploit. Vous avez revu la structure des modules Metasploit, créé un nouveau module de scanner TCP appelé simple_tcp.rb, configuré un serveur d'écoute pour tester le scanner et exécuté avec succès le scanner pour recevoir et afficher les données du serveur.

Cette expérience pratique de développement d'un scanner Metasploit vous aidera à mieux comprendre les capacités du framework et à l'étendre avec des modules personnalisés. Vous pouvez utiliser ces connaissances pour créer des scanners plus avancés ou d'autres types de modules pour diverses tâches de test de pénétration.