# Metasploit/Écriture Exploit Windows

* Introduction
* Installation
* Écriture d'exploit sous Windows
* Utilisation avancée
* Troubleshooting
* Introduction
* Installation
* Écriture d'exploit sous Windows
* Utilisation avancée
* Troubleshooting
[ Modifier le sommaire ]

## Allons-y

Dans le Framework Metasploit, un exploit est appelé "module exploit".
Les modules exploit se trouvent par défaut dans :
C:\Programmes\Metasploit\Framework3\home\framework\modules\exploits\
Les modules exploit sont classés par plate-formes (OSs) et par types (protocoles) dans des répertoires.

### Édition d'un module exploit

Une bonne manière de comprendre comment un module exploit est écrit est de commencer par en éditer un.
Nous éditons ce module : C:\Programmes\Metasploit\Framework3\home\framework\modules\exploits\windows\ftp\cesarftp_mkd.rb
#Les notes de l'auteur du présent document sont ajoutées en rouge.

### Écriture d'un module exploit
#### La cible

Pour comprendre comment écrire un module exploit pour le Framework Metasploit, on écrit un exploit pour une vulnérabilité facilement exploitable dans WarFTPD version 1.5.
(Notez que le module exploit pour cette vulnérabilité existe déjà dans le Framework Metasploit, mais nous allons essayer d'écrire notre propre exploit.)
Nous téléchargeons et installons WarFTPD sur notre machine Windows.
Nous démarrons WarFTPD Daemon.
Décocher la case "No anonymous logins".
Nous démarrons le serveur FTP (cliquez sur le bouton "Go Online/Offline")
Ok, le serveur nous attend...

#### La vulnérabilité

Nous pouvons trouver des informations sur la vulnérabilité sur plusieurs sites.
Voyez celui-ci par exemple :
http://osvdb.org/displayvuln.php?osvdb_id=875&print
L'on voit que le bogue survient en envoyant une requête spécialement conçue dans la commande USER.
Très souvent, une très longue chaîne de caractères provoque ce genre de bogue.
Nous vérifions ceci.

#### La preuve de concept (PoC)

En premier lieu, nous reproduisons la vulnérabilité.
Pour cela, nous utilisons directement le Framework Metasploit.
Nous créons ce fichier :
C:\Programmes\Metasploit\Framework3\home\framework\modules\exploits\windows\ftp\warftpd.rb
Nous l'ouvrons et écrivons (copier/coller) le code suivant dans ce dernier :
Le serveur WarFTPD est lancé (écoutant sur le port tcp 21 par défaut).
On lance maintenant la console du Framework Metasploit.
(Démarrer / Programmes / Metasploit3 / MSFConsole)
L'on peut maintenant voir notre exploit avec la commande :
show exploits
On lance alors notre exploit avec ces commandes :
use windows/ftp/warftpd set RHOST 127.0.0.1 set TARGET 0 set PAYLOAD generic/shell_bind_tcp exploit
Après quelques secondes, l'on voit disparaître (planter) le serveur FTP WarFTPD Dameon.
Nous avons reproduit le bogue avec succès.

##### Déboguage

Pour voir ce qui se passe quand le serveur plante, nous utilisons un débogueur.
Nous relançons WarFTPD Daemon et attachons notre débogueur à celui-ci.
=> Dans OllyDbg, on utilise "File/Attach", on choisit le processus WarFTPD, clic sur Run et une fois qu'il est lancé, on appuie sur F9 pour obtenir l'état Running.
Nous relançons notre exploit.
Nous pouvons alors regarder dans notre débogueur.
Nous voyons qu'une violation d'accès est déclenchée.
EIP est sur-écrit avec notre chaîne malicieuse (41414141 est l'équivalent hexadécimal pour AAAA)

#### Affinage
##### Trouver l'espace disponible

Nous devons trouver la quantité d'espace mémoire disponible pour y placer notre shellcode (payload).
Le Framework Metasploit inclut des outils pour nous aider.
D'abord, nous fermons notre débogueur.
On utilise la fonction PatternCreate pour générer une chaîne de caractères alpha-numériques qui ne se répètent pas.
Nous générons une chaîne de 1000 caractères et l'utilisons dans notre exploit pour déclencher le bogue à nouveau.
Ensuite nous utilisons patternOffset pour connaitre le nombre de caractères à envoyer avant de sur-écrire EIP.

##### Trouver une adresse de retour

Nous devons à présent trouver une adresse de retour fiable.
Là encore, le Framework Metasploit inclut des outils pour nous aider.
Nous pouvons utiliser 'msfpescan' pour chercher des adresses de retour pour des opcodes:
L'on peut également utiliser la base de données d'Opcodes du MSF :
http://metasploit.com/users/opcode/msfopcode.cgi
Notez que le Framework Metasploit inclut également un client embarqué pour utiliser cette base de données :
http://metasploit.com/projects/Framework/msf3/msfopcode_fr.html

##### Traiter les caractères interdits

Nous devons maintenant traiter les caractères interdits.
Nous devons pas inclure de caractère de terminaison de chaîne dans notre shellcode car cela interromperait son exécution.
Nous avons déjà fait cela dans notre exploit : 'BadChars' => "\x00"
De plus, une application cible modifie souvent les données reçues avant de les traiter.
Un exemple est une application qui va passer tous les caractères en majuscules.
Comme cela va modifier notre shellcode, nous devons traiter ce cas.
Pour cela, le Framework Metasploit va encoder notre shellcode pour en obtenir un ne contenant pas les caractères interdits spécifiés.
Nous avons seulement à lister les caractères interdits dans notre code d'exploit.

## Références

* ↑ Téléchargement de WarFTPD v1.5 : https://www.securinfos.info/old_softwares_vulnerable/WarFTP165_vulnerable_USER_BufferOverflow.exe
* Guide du développeur du Framework Metasploit v3.0 : https://www.securinfos.info/metasploit/Guide_Developpeur_Metasploit3.pdf
* Tutoriel de module exploit : http://Metasploit.com/projects/Framework/documentation.html#exploitTutorial
* Vinnie Liu - Writing Exploits III: http://www.syngress.com/book_catalog/327_SSPC/sample.pdf
* http://www.securityforest.com/wiki/index.php/Category:Buffer_Overflows_Education
* https://www.securinfos.info/docs.html
** https://www.securinfos.info/english/security-papers-hacking-whitepapers.php