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
.
- 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.
- 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.
- Lancez le conteneur Kali Linux et entrez dans l'environnement bash en exécutant :
docker run -ti --network host b5b709a49cd5 bash
- À 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.
- Ensuite, accédez au répertoire du module
scanner
:
cd /usr/share/metasploit-framework/modules/auxiliary/scanner
- Créez un nouveau fichier nommé
simple_tcp.rb
:
sudo vi simple_tcp.rb
- 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
- 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.