Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
siofra — Simule le chargeur PE de Windows pour identifier les vulnérabilités de détournement de DLL, génère des DLL armées avec des charges utiles shellcode et détecte les contournements de l'élévation automatique de l'UAC. | Kitploit
Outils/GitHubGitHub/cybereason/siofra
Escalade de PrivilègesScanners de VulnérabilitésGénération de PayloadsAnalyse des VulnérabilitésAnalyse de BinairesGénération de ShellcodeExploitation de Binaires
GitHubcybereason/siofra

siofra

Simule le chargeur PE de Windows pour identifier les vulnérabilités de détournement de DLL, génère des DLL armées avec des charges utiles shellcode et détecte les contournements de l'élévation automatique de l'UAC.

Voir le dépôt
51185il y a 8 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Résumé

Siofra est un outil conçu pour identifier et exploiter les vulnérabilités de détournement de DLL dans les programmes Windows. Il est capable de simuler le chargeur Windows afin de donner une visibilité sur toutes les dépendances (et les vulnérabilités correspondantes) d'un PE sur disque, ou alternativement d'une image mémoire correspondant à un processus actif. Plus important encore, l'outil a la capacité de générer facilement des DLL pour exploiter ce type de vulnérabilités via une infection de PE avec création dynamique de shellcode. Ces DLL infectées conservent le code (DllMain, fonctions exportées) ainsi que les ressources d'une DLL pour préserver de manière transparente la fonctionnalité de l'application qui les charge, tout en permettant au chercheur de spécifier une charge utile exécutable à lancer soit comme processus séparé, soit chargée dans la cible comme module. De plus, l'outil contient des méthodes automatisées de combinaison des critères d'auto-élévation UAC avec la fonctionnalité susmentionnée afin de rechercher les vulnérabilités de contournement de l'UAC.

Vulnérabilités

À l'heure actuelle, il existe un très grand nombre de vulnérabilités que cet outil expose. Lors des tests de cet outil, je n'ai rencontré que quelques applications qui n'étaient pas vulnérables parmi des centaines que j'ai testées. Notez que ces vulnérabilités peuvent être exploitées malgré SafeDllSearchMode. Une idée fausse courante résulte de la confusion entre le « répertoire courant » (corrigé avec SafeDllSearchMode) et le « répertoire de l'application » (le dossier contenant le .exe lui-même). La grande majorité des vulnérabilités de détournement de DLL actuellement présentes dans les programmes Windows proviennent du répertoire de l'application (qui vient en premier dans l'ordre de recherche Windows). Quelques points saillants sont énumérés ci-dessous dans la sortie produite par le scanner de l'outil. La dernière fois que ces vulnérabilités ont été testées, c'était à la mi-juillet 2017.

  • Nom de l'application : Internet Explorer
  • Testé sur OS : Windows 10 x64 Home/Pro
  • Commande/sortie :

Siofra64.exe --mode file-scan -f "c:\Program Files\Internet Explorer\iexplore.exe" --enum-dependency --dll-hijack

======== c:\Program Files\Internet Explorer\iexplore.exe [64-bit PE] ======== iexplore.exe USER32.dll [KnownDLL] win32u.dll [Base] api-ms-win-core-privateprofile-l1-1-1.dll [API set] kernel32.dll [KnownDLL] GDI32.dll [KnownDLL] api-ms-win-gdi-internal-uap-l1-1-0.dll [API set] gdi32full.dll [Base] msvcp_win.dll [Base] api-ms-win-crt-string-l1-1-0.dll [API set] ucrtbase.dll [Base] msvcrt.dll [KnownDLL] api-ms-win-downlevel-shell32-l1-1-0.dll [API set] shcore.dll [KnownDLL] RPCRT4.dll [KnownDLL] combase.dll [KnownDLL] bcryptPrimitives.dll [Base] ADVAPI32.dll [KnownDLL] api-ms-win-eventing-controller-l1-1-0.dll [API set] sechost.dll [KnownDLL] iertutil.dll [!]

[!] Module iertutil.dll vulnérable à c:\Program Files\Internet Explorer\iertutil.dll (chemin réel : C:\WINDOWS\system32\iertutil.dll)

  • Nom de l'application : Windows Defender
  • Testé sur OS : Windows 10 x64 Home/Pro
  • Commande/sortie :

Siofra64.exe --mode file-scan -f "c:\Program Files\Windows Defender\MpCmdRun.exe" --enum-dependency --dll-hijack

======== c:\Program Files\Windows Defender\MpCmdRun.exe [64-bit PE] ======== MpCmdRun.exe msvcrt.dll [KnownDLL] KERNEL32.dll [KnownDLL] OLEAUT32.dll [KnownDLL] msvcp_win.dll [Base] api-ms-win-crt-string-l1-1-0.dll [API set] ucrtbase.dll [Base] combase.dll [KnownDLL] RPCRT4.dll [KnownDLL] bcryptPrimitives.dll [Base] ADVAPI32.dll [KnownDLL] api-ms-win-eventing-controller-l1-1-0.dll [API set] sechost.dll [KnownDLL] OLE32.dll [KnownDLL] GDI32.dll [KnownDLL] api-ms-win-gdi-internal-uap-l1-1-0.dll [API set] gdi32full.dll [Base] USER32.dll [KnownDLL] win32u.dll [Base] SspiCli.dll [!] mpclient.dll [!] CRYPT32.dll [Base] MSASN1.dll [Base] WINTRUST.dll [Base]

[!] Module SspiCli.dll vulnérable à c:\Program Files\Windows Defender\SspiCli.dll (chemin réel : C:\WINDOWS\system32\SspiCli.dll)

  • Nom de l'application : WMI
  • Testé sur OS : Windows 10 x64 Home/Pro
  • Commande/sortie :

Siofra64.exe --mode file-scan -f "c:\WINDOWS\System32\wbem\wmiprvse.exe" --enum-dependency --dll-hijack

======== c:\WINDOWS\System32\wbem\wmiprvse.exe [64-bit PE] ======== wmiprvse.exe msvcrt.dll [KnownDLL] FastProx.dll [!] wbemcomn.dll [!] bcrypt.dll [!] WS2_32.dll [KnownDLL] api-ms-win-eventing-obsolete-l1-1-0.dll [API set] sechost.dll [KnownDLL] RPCRT4.dll [KnownDLL] api-ms-win-core-heap-obsolete-l1-1-0.dll [API set] kernel32.dll [KnownDLL] NCObjAPI.DLL [!]

[!] Module wbemcomn.dll vulnérable à c:\WINDOWS\System32\wbem\wbemcomn.dll (chemin réel : C:\WINDOWS\system32\wbemcomn.dll) [!] Module bcrypt.dll vulnérable à c:\WINDOWS\System32\wbem\bcrypt.dll (chemin réel : C:\WINDOWS\system32\bcrypt.dll) [!] Module NCObjAPI.DLL vulnérable à c:\WINDOWS\System32\wbem\NCObjAPI.DLL (chemin réel : C:\WINDOWS\system32\NCObjAPI.DLL)

  • Nom de l'application : Windows Search Indexer/Search Protocol Host
  • Testé sur OS : Windows 10 x64 Home/Pro
  • Commande/sortie :

Siofra64.exe --mode file-scan -f "c:\WINDOWS\System32\SearchProtocolHost.exe" --enum-dependency --dll-hijack --explicit-loadlibrary

======== c:\WINDOWS\System32\SearchProtocolHost.exe [64-bit PE] ======== SearchProtocolHost.exe msvcrt.dll [KnownDLL] TQUERY.DLL [!] OLEAUT32.dll [KnownDLL] msvcp_win.dll [Base] api-ms-win-crt-string-l1-1-0.dll [API set] ucrtbase.dll [Base] combase.dll [KnownDLL] RPCRT4.dll [KnownDLL] api-ms-win-core-heap-obsolete-l1-1-0.dll [API set] kernel32.dll [KnownDLL] bcryptPrimitives.dll [Base] cryptdll.dll [!] api-ms-win-security-lsalookup-l2-1-1.dll [API set] advapi32.dll [KnownDLL] api-ms-win-eventing-controller-l1-1-0.dll [API set] sechost.dll [KnownDLL] api-ms-win-shell-namespace-l1-1-0.dll [API set] windows.storage.dll [Base] api-ms-win-shlwapi-winrt-storage-l1-1-1.dll [API set] shlwapi.dll [KnownDLL] GDI32.dll [KnownDLL] api-ms-win-gdi-internal-uap-l1-1-0.dll [API set] gdi32full.dll [Base] USER32.dll [KnownDLL] win32u.dll [Base] api-ms-win-appmodel-state-l1-2-0.dll [API set] kernel.appcore.dll [Base] api-ms-win-shcore-path-l1-1-0.dll [API set] shcore.dll [KnownDLL] api-ms-win-power-base-l1-1-0.dll [API set] powrprof.dll [Base] profapi.dll [Base] msfte.dll [Potential explicit Unicode] [!] msTracer.dll [Potential explicit Unicode] [!] Msidle.dll [Potential explicit Unicode] [!] winhttp.dll [Potential explicit Unicode] [!]

[!] Module msfte.dll vulnérable à C:\WINDOWS\system32\msfte.dll (chemin réel : Inconnu) [!] Module msTracer.dll vulnérable à C:\WINDOWS\system32\msTracer.dll (chemin réel : Inconnu)

Capacités

Les capacités de cet outil peuvent être divisées en 3 catégories distinctes, chacune correspondant à l'un des modes d'exécution de cet outil.

Mode infection

En mode infection, l'outil est capable de générer des copies infectées de fichiers DLL 32 et 64 bits. Ces fichiers infectés sont capables de détourner le flux d'exécution d'une application cible lorsqu'ils sont chargés lors de l'initialisation du processus, provoquant soit le chargement d'une DLL de charge utile, soit le lancement d'un exécutable de charge utile avant l'exécution du point d'entrée de l'application cible.

Mode analyse de fichiers

En mode analyse de fichiers, l'outil peut recevoir soit un chemin de fichier exécutable, soit un dossier (qui sera recherché pour les fichiers exécutables, éventuellement de manière récursive) dont les importations PE, les importations à chargement différé, les ensembles d'API, les dépendances d'assembly et les bibliothèques explicitement chargées seront récursivement énumérés et traités pour déterminer le chemin auquel chacun sera chargé lors de l'initialisation du processus en cours d'exécution. Grâce à ces informations, l'outil est capable d'identifier les modules vulnérables au détournement. Lors du traitement du PE et de la simulation du chargeur, l'outil est capable de gérer : 1. Les modules importés à l'aide de la section d'importations PE principale. 2. Les modules importés via le chargement différé. 3. La résolution des dépendances d'assembly WinSxS (la ressource manifeste du PE est analysée, les identifiants de dépendance d'assembly sont extraits, et le chemin du module WinSxS est identifié à l'aide d'une implémentation personnalisée). 4. Les modules explicitement chargés, importés via LoadLibrary au moment de l'exécution. 5. La résolution des ensembles d'API pour tous les types d'importations ci-dessus. Ceci est réalisé via une implémentation personnalisée d'un analyseur pour les structures de données non documentées trouvées dans ApiSetSchema.dll (notez que seules les versions 2, 4 et 6 ont été testées). 6. La recherche de modules importés spécifiques par nom. 7. L'identification des composants Windows qui peuvent être exploités pour des attaques de contournement UAC (les critères d'auto-élévation UAC sont appliqués à un PE cible spécifié de manière automatisée, puis utilisés conjointement avec une attaque de détournement si celle-ci est présente). 8. La détection et le filtrage automatiques des dépendances de modules qui ne sont pas vulnérables sur la base de : * KnownDLLs * Statut de DLL exonérée (« Base »). Kernelbase.dll, ntdll.dll, etc. * Mécanisme de sécurité de remplacement du manifeste (utilisé par Microsoft dans sysprep.exe)

Mode analyse mémoire

En mode analyse mémoire, l'outil peut soit énumérer les noms/ID de processus locaux, soit recevoir un ID de processus à analyser. Plutôt que d'analyser le fichier image correspondant au PID donné sur disque, l'outil énumérera les modules actuellement chargés dans le processus et identifiera lesquels peuvent être vulnérables au détournement. Ceci est utile dans les cas où un exécutable sur disque est compressé/obfusqué et où ses importations ne peuvent pas être identifiées par l'analyse de l'en-tête PE.

Utilisation

Afin d'afficher les informations d'utilisation de l'outil, il suffit de l'exécuter sans paramètres (sortie affichée ci-dessous). Il est très important d'utiliser la compilation appropriée de l'outil (32 ou 64 bits) pour la cible souhaitée selon qu'il s'agit d'un fichier PE 32 bits ou PE 64 bits. De même, la version 32 bits de l'outil ne peut énumérer et/ou cibler que les processus 32 bits (Wow64 sur un OS x64) et la version 64 bits ne peut énumérer et/ou cibler que les processus 64 bits. Ce principe s'applique à la fois à l'analyse (Siofra64.exe ignorera les PE 32 bits et Siofra32.exe ignorera les PE 64 bits) et à l'infection de PE. Siofra32.exe doit être utilisé pour infecter les DLL 32 bits et Siofra64.exe doit être utilisé pour infecter les DLL 64 bits.

Lorsque la version 32 bits de l'outil est exécutée sur des systèmes x64, la redirection de chemin Wow64 est explicitement désactivée par l'outil, ce qui signifie que si vous ciblez \Windows\System32\notepad.exe, il s'agirait d'un PE 64 bits (et par conséquent \Windows\Syswow64\notepad.exe devrait être utilisé à la place). De même, si vous ciblez \Program Files\Common Files\microsoft shared\MSInfo\msinfo32.exe, il s'agirait d'un PE 64 bits, et par conséquent \Program Files (x86)\Common Files\microsoft shared\MSInfo\msinfo32.exe devrait être utilisé à la place.

Utilisation de Siofra version 1.13 : Siofra32.exe --mode [Modes pris en charge : « file-scan », « mem-scan » et « infect »] -v [Facultatif. Niveau de verbosité de la sortie] Niveaux de verbosité : 0 - Aucune sortie 1 - Uniquement le statut critique de succès/échec (par défaut) 2 - Détails de statut supplémentaires pour le succès/échec, y compris les PE ignorés 3 - Tout Mode analyse de fichiers : -f [Fichier ou dossier à analyser] -r [Facultatif. Analyse récursive] --signed [Facultatif. Traiter uniquement les binaires signés] --delayload [Facultatif. Inclure les importations à chargement différé dans la liste des dépendances] --explicit-loadlibrary [Facultatif. Inclure les importations potentiellement explicites dans la liste des dépendances (ce sont des chaînes *.dll qui peuvent avoir été appelées via LoadLibrary(Ex)A/W] --auto-elevate [Facultatif. Analyser uniquement les binaires à auto-élévation] Mode analyse mémoire : --pid [ID de processus cible à analyser. Lorsqu'il n'est pas spécifié, une liste de noms/ID de processus 32 ou 64 bits sera énumérée (correspondant à la version 32 ou 64 bits de cet outil)] Tout mode d'analyse : --enum-dependency [Énumérer les dépendances] --show-unmapped-apiset [Facultatif. Inclure les ensembles d'API qui n'ont pas été mappés vers un module dans la sortie (ignoré par défaut)] --dll-hijack [Énumérer les vulnérabilités de détournement de DLL] --find-module [Facultatif. Analyser les dépendances pour un module spécifique. Notez que cela exclut les KnownDLLs] Mode infection : -f [Fichier DLL à infecter] -o [Fichier de sortie] --payload-path [Chemin de la DLL à charger dans la DLL infectée au moment de l'exécution, ou chemin de l'exécutable à lancer au moment de l'exécution] --payload-type [Le type de charge utile spécifié dans le chemin de la charge utile parasite. Cela peut être « process » (indiquant généralement un exe) ou « library » (indiquant généralement une DLL)]

Exemples

  1. Analyse de tout le lecteur personnel à la recherche de programmes 32 bits vulnérables au détournement de DLL en utilisant les importations standard ou à chargement différé via leurs en-têtes PE.

    Siofra32.exe --mode file-scan -f "C:/" -r --enum-dependency --dll-hijack --delayload

  2. Analyse du dossier d'application Windows Defender sur une version x64 de Windows à la recherche de modules vulnérables chargés via la table d'importations standard de leur en-tête PE.

    Siofra64.exe --mode file-scan -f "C:\Program Files\Windows Defender" -r --enum-dependency --dll-hijack

  3. Analyse du programme 32 bits Java Update Scheduler sur une version x64 de Windows à la recherche de modules vulnérables chargés via tout canal connu (importations standard ou à chargement différé, WinSxS, LoadLibrary).

    Siofra32.exe --mode file-scan -f "C:\Program Files (x86)\Common Files\Java\Java Update\jusched.exe" --enum-dependency --dll-hijack --delayload --explicit-loadlibrary

  4. Analyse du dossier Windows (et de tous ses sous-dossiers) à la recherche de modules vulnérables (importés via la table d'importations standard de l'en-tête PE) dans les programmes 64 bits qui pourraient être utilisés pour une attaque de contournement UAC (signés par Microsoft avec un manifeste d'auto-élévation).

    Siofra64.exe --mode file-scan -f "C:\Windows" -r --enum-dependency --dll-hijack --auto-elevate --signed

  5. Infection d'une copie 32 bits de WININET.dll (copiée de \Windows\SysWOW64\WININET.dll vers .\WININET_original.dll) avec un implant qui lancera un nouveau processus notepad lorsqu'il sera chargé lors de l'initialisation du processus par un programme vulnérable. Il est important de noter que le simple chargement d'une copie infectée de cette DLL (via LoadLibrary par exemple) ne déclenchera pas la charge utile. Les DLL infectées ne sont censées fonctionner que dans le contexte d'un module vulnérable chargé via la section d'importations standard de son processus hôte.

    Siofra32.exe --mode infect -f WININET_original.dll -o WININET.dll --payload-type process --payload-path c:\windows\system32\notepad.exe

  6. Infection d'une copie 64 bits de USERENV.dll (copiée de \Windows\System32\USERENV.dll vers .\USERENV_original.dll) avec un implant qui chargera une DLL de charge utile hypothétique stockée à C:\Payload.dll. Il est important de noter que toutes les DLL chargées par un processus 64 bits doivent être des DLL 64 bits, et toutes les DLL chargées par un processus 32 bits doivent être des DLL 32 bits. Par conséquent, dans ce scénario hypothétique, Payload.dll devrait être un fichier PE 64 bits pour pouvoir être chargé avec succès par l'implant dans USERENV.dll.

    Siofra64.exe --mode infect -f USERENV_original.dll -o USERENV.dll --payload-type library --payload-path "C:\Payload.dll"

Améliorations futures

  • Versions 32 et 64 bits de l'outil à combiner en un seul exécutable.
  • Capacité à effectuer des infections de PE qui peuvent charger avec succès des charges utiles DLL/exécutable dans des fichiers DLL infectés chargés explicitement via LoadLibrary ou via des importations différées.
  • Prise en charge de toutes les versions d'ensembles d'API.

Code source

J'ai décidé de rendre une partie de cet outil open source pour aider d'autres chercheurs en sécurité à comprendre les détails techniques de ce projet. Plus précisément, j'ai fourni le code source assembleur pour l'un des shellcodes d'implant 64 bits (pour l'infection de DLL PE 64 bits lors de la spécification d'un type de charge utile « process »).

Les détails concernant d'autres aspects techniques de l'outil et les détails du système d'exploitation liés au chargeur/ordre de recherche Windows, à l'UAC, à WinSxS, etc. peuvent être trouvés dans le PDF de ce projet.

Licence

Siofra est distribué sous licence GPL 3. Voir LICENSE.MD pour plus de détails.

Contact

Forrest Williams - [email protected] / [email protected]

Télécharger l’outil