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
BokuLoader — Une preuve de concept de Reflective Loader Cobalt Strike qui vise à recréer, intégrer et améliorer les fonctionnalités d'évasion de Cobalt Strike ! | Kitploit
Outils/GitHubGitHub/xforcered/bokuloader
Frameworks de Tests d'IntrusionÉvasion IDS/IPSPost-ExploitationCommandement et ContrôleRed TeamingDéveloppement de Charges UtilesAttaque Adversariale
GitHubxforcered/bokuloader

BokuLoader

Une preuve de concept de Reflective Loader Cobalt Strike qui vise à recréer, intégrer et améliorer les fonctionnalités d'évasion de Cobalt Strike !

Voir le dépôt
335251il y a 2 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

BokuLoader : Chargeur réflectif Cobalt Strike

Un chargeur réflectif défini par l'utilisateur (UDRL) proof-of-concept qui vise à recréer, intégrer et améliorer les fonctionnalités d'évasion de Cobalt Strike !

Contributeurs :

ContributeurTwitterContributions notables
Bobby Cooke@0xBokuAuteur et mainteneur d'origine du projet
Santiago Pecin@s4ntiago_pAméliorations majeures du chargeur réflectif
Chris Spehn@ConsciousHackerScripting Aggressor
Joshua Magri@passthehashbrwnHooking IAT
Dylan Tran@d_tranmanSpoofing de pile d'appels réflectif
James Yeung@5cript1diotAppels système indirects

Considérations d'utilisation de l'UDRL

Le chargeur réflectif intégré de Cobalt Strike est robuste et prend en charge toutes les fonctionnalités d'évasion Malleable PE que Cobalt Strike offre. Le principal inconvénient de l'utilisation d'un UDRL personnalisé est que les fonctionnalités d'évasion Malleable PE peuvent ou non être prises en charge immédiatement.

L'objectif du projet public BokuLoader est d'aider les red teams à créer leur propre UDRL Cobalt Strike interne. Le projet vise à prendre en charge toutes les fonctionnalités d'évasion Malleable PE de CS qui en valent la peine. Certaines fonctionnalités d'évasion s'appuient sur l'intégration de CS, d'autres ont été entièrement recréées, et certaines ne sont pas prises en charge.

Avant d'utiliser ce projet, sous quelque forme que ce soit, vous devez tester correctement que les fonctionnalités d'évasion fonctionnent comme prévu. Entre le code C et le script Aggressor, la compilation avec différentes versions de systèmes d'exploitation, de compilateurs et de Java peut donner des résultats différents.

Fonctionnalités d'évasion

Fonctionnalités d'évasion spécifiques à BokuLoader

  • Spoofing de la pile d'appels réflectif via des trames synthétiques.
  • Code de chargeur réflectif personnalisé en ASM/C
  • Appels système NT indirects via les techniques HellsGate et HalosGate
    • Toutes les modifications de protection mémoire pour toutes les options d'allocation sont effectuées via un appel système indirect à NtProtectVirtualMemory
  • obfuscate "true" avec implémentation personnalisée du script Aggressor UDRL.
  • NOHEADERCOPY
    • Le chargeur ne copiera pas les en-têtes de la beacon DLL brute vers la beacon DLL virtuelle. Les premiers 0x1000 octets seront des zéros.
  • XGetProcAddress pour résoudre les symboles
    • N'utilise pas Kernel32.GetProcAddress
  • xLoadLibrary pour résoudre l'adresse de base des DLL et le chargement des DLL
    • Pour les DLL chargées, obtient l'adresse de base de la DLL depuis TEB->PEB->PEB_LDR_DATA->InMemoryOrderModuleList
    • N'utilise pas Kernel32.LoadLibraryA
  • Chiffrement de César pour l'obfuscation des chaînes
  • Taille UDRL de 100k
  • Les noms de DLL importées et les chaînes des noms d'entrées d'importation sont écrasés dans la beacon DLL virtuelle.

Fonctionnalités d'évasion Malleable PE prises en charge

Test

  • (2/22/23) Toutes les 4 méthodes d'allocation testées avec threatexpress/malleable-c2/master/jquery-c2.4.7.profile

Origines du projet

  • Basé sur l'incroyable projet Reflective Loader de Stephen Fewer :
    • https://github.com/stephenfewer/ReflectiveDLLInjection
  • Initialement créé en travaillant sur les vidéos Reflective DLL de Renz0h du cours Sektor7 Malware Developer Intermediate (MDI)

Utilisation

  1. Compilez le fichier objet BokuLoader avec make
  2. Démarrez votre serveur d'équipe Cobalt Strike
  3. Dans Cobalt Strike, importez le script Aggressor BokuLoader.cna
  4. Générez la beacon x64 (Attacks -> Packages -> Windows Executable (S))
  5. Utilisez la Script Console pour vous assurer que BokuLoader a été implémenté dans la build de la beacon
  • Ne prend pas en charge l'option x86. Le binaire x86 est le fichier objet du Reflective Loader d'origine.
  • La génération de beacons RAW fonctionne immédiatement. Lorsque vous utilisez l'Artifact Kit pour le chargeur de beacon, la variable stagesize doit être plus grande que la valeur par défaut.
    • Consultez la documentation Cobalt Strike User-Defined Reflective Loader pour plus d'informations

Conseils de détection

Chaînes codées en dur

  • BokuLoader remplace certaines chaînes couramment détectées par de nouvelles valeurs codées en dur. Ces chaînes peuvent être utilisées pour signer BokuLoader :
Chaîne Cobalt Strike d'origineChaîne Cobalt Strike BokuLoader
ReflectiveLoaderBokuLoader
Microsoft Base Cryptographic Provider v1.012367321236742382543232341241261363163151d
(admin)(tomin)
beaconbacons

Allocateurs mémoire

Stompage de module DLL

  • Kernel32.LoadLibraryExA est appelé pour mapper la DLL depuis le disque
  • Le 3e argument de Kernel32.LoadLibraryExA est DONT_RESOLVE_DLL_REFERENCES (0x00000001)
    • le système n'appelle pas DllMain
  • Ne résout pas les adresses de l'entrée LDR du PEB comme détaillé par MDSec ici
  • Détectable en analysant la mémoire du processus avec l'outil pe-sieve

Allocation par tas

  • Une mémoire exécutable RX ou RWX existera dans le tas si le kit sleepmask n'est pas utilisé.

Allocateur mappé

  • Kernel32.CreateFileMappingA et Kernel32.MapViewOfFile sont appelés pour allouer la mémoire de la beacon DLL virtuelle.

Détection de Sleepmask

  • Si le kit sleepmask est utilisé, il existe des méthodes de détection pour cette allocation mémoire indépendante comme détaillé par MDSec ici

Appels système indirects

  • BokuLoader appelle les appels système NT suivants pour configurer la mémoire exécutable de la beacon chargée : NtAllocateVirtualMemory, NtProtectVirtualMemory
  • Ils sont appelés indirectement depuis la mémoire exécutable de BokuLoader.
  • Placer des hooks userland dans ntdll.dll ne détectera pas ces appels système.
  • Il peut être possible d'enregistrer des kernelcallbacks à l'aide d'un pilote noyau pour surveiller les appels système ci-dessus et détecter leur utilisation.
  • BokuLoader lui-même contiendra les instructions assembleur mov eax, r11d; mov r11, r10; mov r10, rcx; jmp r11 dans sa mémoire exécutable.

En-tête de la beacon DLL virtuelle

  • Les premiers 0x1000 octets de la beacon DLL virtuelle sont des zéros.

Code source disponible

  • Le code source de BokuLoader est fourni dans le dépôt et peut être utilisé pour créer des signatures mémoire.
  • Si vous avez des conseils de détection supplémentaires, n'hésitez pas à contribuer en soumettant une pull request.

Crédits / Références

Spoofing de pile d'appels réflectif

  • LoudSunRun: Spoofer de pile d'appels à trames synthétiques avec appels système indirects
  • SilentMoonwalk: Implémentation PoC d'un spoofer de pile d'appels entièrement dynamique
  • Vulcan Raven: Implémentation PoC pour usurper des piles d'appels arbitraires lors d'appels système
  • CallStackMasker: Une implémentation PoC pour masquer dynamiquement les piles d'appels avec des minuteurs
  • ThreadStackSpoofer: PoC de spoofing de pile de threads
  • Behind the Mask: Spoofing dynamique des piles d'appels avec des minuteurs

Reflective Loader

  • https://github.com/stephenfewer/ReflectiveDLLInjection
  • Découvrez ces vidéos si vous êtes intéressé par les Reflective DLL :
    • Danser avec la table d'adresses d'importation (IAT) - Cours Sektor 7 MDI
    • Parcourir la table des adresses d'exportation - Cours Sektor 7 MDI
    • Injection réflective expliquée - Cours Sektor 7 MDI
    • Revue du code source de ReflectiveLoader - Cours Sektor 7 MDI
  • TitanLdr
  • AceLdr
  • KaynLdr

Appels système HalosGate

  • Reenz0h de @SEKTOR7net
    • Découvrez les superbes cours et blogs de Reenz0h !
    • Les meilleures formations de développement de malware que j'ai suivies.
    • Créateur de la technique Halos Gate. Son travail a été la motivation initiale de ce projet.
    • Blog Sektor7 HalosGate

Appels système HellsGate

  • @smelly__vx et @am0nsec (créateurs/éditeurs de la technique Hells Gate)
    • Je n'aurais pas pu réaliser mon implémentation de HellsGate sans eux :)
    • Superbe travail sur cette méthode, j'ai vraiment apprécié la travailler moi-même. Merci !
    • https://github.com/am0nsec/HellsGate
    • Lien vers le document Hell's Gate : https://vxug.fakedoma.in/papers/VXUG/Exclusive/HellsGate.pdf

Scripting Aggressor

  • sinusoid @the_bit_diddler : returnIntegerFromArray

Cobalt Strike User Defined Reflective Loader

  • https://www.cobaltstrike.com/help-user-defined-reflective-loader

Excellente ressource pour apprendre l'ASM Intel

  • Pentester Academy - SLAE64

Contournement d'ETW et d'AMSI

  • @anthemtotheego inline-ExecuteAssembly
  • @mariuszbit - pour l'idée géniale d'implémenter des contournements dans le chargeur réflectif !
  • @XPN Masquer votre .NET – ETW
  • ajpc500/BOFs
  • Offensive Security OSEP

Implémenter de l'ASM dans du code C avec GCC

  • https://outflank.nl/blog/2020/12/26/direct-syscalls-in-beacon-object-files/
  • https://www.cs.uaf.edu/2011/fall/cs301/lecture/10_12_asm_c.html
  • http://gcc.gnu.org/onlinedocs/gcc-4.0.2/gcc/Extended-Asm.html#Extended-Asm

Profils C2 Cobalt Strike

  • L'épique projet SourcePoint de Tylous
  • threatexpress/malleable-c2/jquery-c2.4.7.profile
Télécharger l’outil
CommandeOption(s)Prise en charge
allocatorHeapAlloc, MapViewOfFile, VirtualAllocToutes prises en charge via l'implémentation BokuLoader
module_x64string (DLL Name)Pris en charge via l'implémentation BokuLoader. Les mêmes exigences de DLL stomping que l'implémentation CS s'appliquent
obfuscatetrue/falseBeacons HTTP/S pris en charge via l'implémentation BokuLoader. SMB/TCP n'est actuellement pas pris en charge pour obfuscate true. Détails dans le ticket. Aide acceptée si vous pouvez corriger :)
entry_pointRVA as decimal numberPris en charge via l'implémentation BokuLoader
cleanuptruePris en charge via l'intégration CS
userwxtrue/falsePris en charge via l'implémentation BokuLoader
sleep_mask(true/false) or (Sleepmask Kit+true)Pris en charge. Lorsque vous utilisez le « sleepmask true » par défaut (sans kit sleepmask), définissez « userwx true ». Lorsque vous utilisez le kit sleepmask qui prend en charge la mémoire RX beacon.text (src47/Ekko), définissez « sleepmask true » et « userwx false ».
magic_mz_x644 char stringPris en charge via l'intégration CS
magic_pe2 char stringPris en charge via l'intégration CS
transform-x64 prependescaped hex stringModification du script Aggressor BokuLoader.cna
transform-x64 strrepstring stringModification du script Aggressor BokuLoader.cna
stomppetrue/falseNon pris en charge. BokuLoader ne copie pas les en-têtes de la beacon DLL. Les premiers 0x1000 octets de la beacon DLL virtuelle sont 0x00
checksumnumberExpérimental. Modification du script Aggressor BokuLoader.cna
compile_timedate-time stringExpérimental. Modification du script Aggressor BokuLoader.cna
image_size_x64decimal valueNon pris en charge
namestringExpérimental. Modification du script Aggressor BokuLoader.cna
rich_headerescaped hex stringExpérimental. Modification du script Aggressor BokuLoader.cna
stringwstringNon pris en charge
stringstringNon pris en charge