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
Pyramid — un outil pour aider à opérer dans les angles morts des EDRs | Kitploit
Outils/GitHubGitHub/naksyn/pyramid
Post-ExploitationTests d'IntrusionRed Teaming
GitHubnaksyn/pyramid

Pyramid

un outil pour aider à opérer dans les angles morts des EDRs

Voir le dépôt
77590il 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

Supported Python versions Twitter

Pyramid

immagine

Qu'est-ce que c'est

Pyramid est composé de :

  1. un serveur HTTP/S Python pouvant délivrer des fichiers chiffrés (chacha, xor)
  2. des modules Python pouvant charger en mémoire les dépendances d'outils offensifs tels que Bloodhound-py, secretsdump, LaZagne, Pythonnet, DonPAPI, pythonmemorymodule, paramiko, pproxy.
  3. des dépendances Python fixes (fichiers zip) pouvant être importées en mémoire
  4. un loader Python capable de télécharger, déchiffrer et exécuter en mémoire les modules Pyramid

Pourquoi est-ce utile

Pyramid est utile pour effectuer des tâches de post-exploitation de manière furtive, en exécutant des outils offensifs depuis un binaire signé (par exemple python.exe) grâce à l'importation en mémoire de leurs dépendances. Ceci est possible car :

  1. le package Python Embeddable fournit un interpréteur Python signé avec bonne réputation ;
  2. Python a de nombreuses applications légitimes, donc il existe une grande variété de télémétries provenant du binaire python.exe puisque l'interpréteur exécute nativement les APIs. Ceci peut être abusé en opérant à l'intérieur du processus Python.exe et en tentant de se fondre dans l'immense « empreinte télémétrique » du binaire python.exe.
  3. Il y a un manque d'audit pour l'exécution de code Python – PEP-578 a tenté de résoudre cela mais le binaire python.exe standard n'a pas de capacités d'audit activées par défaut.
  4. Les opérations peuvent être effectuées nativement depuis python.exe en utilisant le langage Python pour réaliser des tâches de post-exploitation telles que l'importation dynamique de modules Python pour exécuter des outils offensifs et l'exécution de Beacon Object Files (après quelques modifications BOF) directement dans python.exe.

Pour plus d'informations, veuillez consulter le diaporama du talk DEFCON30 - Adversary village "Python vs Modern Defenses" et cet article sur mon blog.

Avertissement

Cet outil a été créé pour démontrer une stratégie de contournement des EDR basée sur certaines hypothèses de zones d'ombre. C'est une combinaison de techniques et d'outils déjà existants, présentée (à ma connaissance) d'une manière nouvelle qui peut aider à contourner les défenses. Le seul but de l'outil est d'aider la communauté à prendre conscience de ce type d'utilisation et d'accélérer une résolution. Ce n'est pas un 0day, ce n'est pas un C2 complet et brillant, Pyramid exploite ce qui pourrait être les angles morts des EDR et l'outil a été rendu public pour les mettre en lumière. Un paragraphe sur la défense a été inclus, en espérant que les blue-teamers expérimentés puissent contribuer et apporter une meilleure résolution possible au problème que Pyramid cherche à mettre en évidence. Toutes les informations sont fournies à des fins éducatives uniquement. Suivez les instructions à vos risques et périls. Ni l'auteur ni son employeur ne sont responsables de tout dommage ou perte directe ou indirecte résultant d'une personne ou d'une organisation.

Crédits

Le chargement en mémoire de Pyramid a été initialement inspiré et étendu à partir de la Finder Class d'xorrior pour EmPyre.

Contributeurs

snovvcrash a construit les modules mod-DonPAPI.py - mod-LaZagne.py - mod-clr.py

Fonctionnalités actuelles

Les capacités des modules Pyramid peuvent être exécutées directement depuis un interpréteur Python et sont actuellement :

  1. Téléchargement, déchiffrement et chargement en mémoire des dépendances Python.
  2. Chargement dynamique et exécution de BloodHound Python, impacket secretsdump, DonPAPI, LaZagne.
  3. Chargement en mémoire d'une DLL ou d'un EXE récupéré à distance via PythonMemoryModule.
  4. Proxy SOCKS5 via un tunnel SSH de redirection de port inverse.
  5. Chargement d'assembly .NET en mémoire via Pythonnet

Fonctionnalités principales du serveur HTTP Pyramid :

  1. Chiffrement à la volée (chacha, xor) des fichiers à délivrer
  2. Génération automatique des configurations serveur basées sur la ligne de commande pyramid
  3. Décodage et déchiffrement des paramètres HTTP (URL)
  4. Authentification HTTP basique

Fonctionnalités principales du loader :

  1. Téléchargement, déchiffrement et exécution en mémoire des modules Pyramid.
  2. Dépendance uniquement aux bibliothèques standard de Python.

Description

Pyramid peut être utilisé avec un interpréteur Python déjà existant sur une machine cible, ou en décompressant un package Python embeddable officiel puis en exécutant python.exe pour lancer un loader de téléchargement Python. C'est un moyen simple d'éviter de créer des arbres de processus inhabituels et de ressembler à une utilisation normale d'une application Python.

Dans Pyramid, le loader de téléchargement est utilisé pour atteindre un serveur Pyramid via HTTP/S afin de récupérer des modules et des dépendances.

Les modules sont spécifiques à la fonctionnalité que vous souhaitez utiliser et contiennent :

  1. Une classe Finder personnalisée pour importer en mémoire les dépendances requises (fichiers zip).
  2. Le code pour télécharger les dépendances requises.
  3. La logique principale du programme que vous souhaitez exécuter (bloodhound, secretsdump, paramiko, etc.).

Les dépendances Python ont déjà été modifiées et corrigées pour être importées en mémoire sans conflit.

Il existe actuellement 8 modules Pyramid disponibles :

  1. bh.py importera en mémoire et exécutera python-BloodHound.
  2. secretsdump.py importera en mémoire et exécutera Impacket secretsdump.
  3. shellcode.py est un injecteur de shellcode simple en mémoire.
  4. DonPAPI.py importera en mémoire et exécutera DonPAPI. Les résultats et identifiants extraits sont sauvegardés sur disque dans le répertoire du package Python Embeddable.
  5. LaZagne.py importera en mémoire et exécutera LaZagne
  6. tunnel-socks5 importe et exécute paramiko dans un nouveau thread pour créer un tunnel SSH de redirection de port inverse vers un serveur SSH, puis un serveur proxy socks5 est exécuté localement sur la cible et rendu accessible à distance via le tunnel SSH.
  7. clr importe Pythonnet pour charger et exécuter un assembly .NET en mémoire.
  8. pythonmemorymodule importe PythonMemoryModule pour charger une DLL depuis la mémoire.

Utilisation

Démarrage du serveur

git clone https://github.com/naksyn/Pyramid

Générer les certificats SSL pour le serveur HTTP :

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365

Si vous souhaitez utiliser votre propre certificat SSL signé, assurez-vous de :

  1. utiliser le format pem
  2. renommer les fichiers en key.pem et cert.pem
  3. placer les deux fichiers dans le dossier Server.

Configuration du module

Par exemple, si vous souhaitez utiliser pythonmemorymodule avec Pyramid, placez votre payload dans le dossier Delivery_files, puis ouvrez pythonmemorymodule.py et configurez les paramètres nécessaires en haut du script, comme le nom du fichier payload et la procédure à appeler après le chargement du PE.

Décompresser le package embeddable et exécuter le loader sur la cible

Une fois le serveur Pyramid en cours d'exécution et le script Base prêt, vous pouvez définir la variable pyramid_module dans le fichier Agent/cradle.py et l'exécuter sur la cible. Le loader est conçu pour être exécuté avec les bibliothèques standard de Python.

Exemple

Exemple d'exécution du serveur HTTP Pyramid avec certificat SSL, authentification basique, chiffrement des fichiers de livraison avec ChaCha et génération automatique de la configuration serveur dans les modules, avec affichage d'un loader prêt à l'emploi pour pythonmemorymodule :

root@kitploit:~
python3 pyramid.py -p 443 -ssl -u testuser -pass Sup3rP4ss! -enc "chacha20" -passenc "TestPass1" -server "192.168.1.2" -generate -setcradle pythonmemorymodule.py

Au démarrage, pyramid.py analysera sa propre structure de dossiers pour chercher key.pem, cert.pem et délivrera les fichiers depuis le dossier Server.

https://github.com/naksyn/Pyramid/assets/59816245/4fbc997e-af2d-4ead-881b-ee108c91d195

Astuce pour exécuter Pyramid sans invite visible

Pour exécuter Pyramid sans afficher d'invite python.exe visible, vous pouvez utiliser pythonw.exe qui n'ouvre pas de fenêtre de console lors de l'exécution et qui est contenu dans le même package Windows Embeddable. L'image suivante illustre un exemple d'utilisation de pythonw.exe pour exécuter base-tunnel-socks5.py sur une machine distante sans ouvrir de fenêtre de console python.exe.

image

Limitations

Le chargement dynamique de modules Python ne prend pas en charge nativement l'importation de fichiers *.pyd qui sont essentiellement des DLL. La seule solution publique à ma connaissance qui résout ce problème est fournie par Scythe *(in-memory-execution) en ré-architecturant l'interpréteur CPython. Afin de ne pas perdre la signature numérique, une solution qui permettrait d'utiliser le package Python embeddable natif consiste à déposer sur disque les fichiers pyd ou wheels nécessaires. Cela ne devrait pas avoir d'implications OPSEC significatives dans la plupart des cas, mais gardez à l'esprit que les wheels suivants contenant des fichiers pyd sont déposés sur disque pour permettre le chargement dynamique : *. Cryptodome – nécessaire pour Bloodhound-Python, Impacket, DonPAPI et LaZagne *. bcrypt, cryptography, nacl, cffi – nécessaire pour paramiko

Comment se défendre contre cette technique

Python.exe est un binaire signé avec une bonne réputation et ne fournit pas de visibilité sur le code dynamique Python. Pyramid exploite ces propriétés d'évasion en effectuant des tâches offensives depuis le même processus python.exe.

Pour cette raison, l'une des solutions les plus efficaces serait de bloquer par défaut les binaires et DLL signés par la Python Foundation, en créant des exceptions uniquement pour les utilisateurs qui ont réellement besoin d'utiliser des binaires Python.

Des alertes sur les téléchargements de packages embeddables peuvent également être déclenchées.

Le déploiement de PEP-578 est également envisageable bien que complexe, voici un exemple d'implémentation. Cependant, déployer PEP-578 sans bloquer l'utilisation des binaires Python standard pourrait rendre cette contre-mesure inutile.

Télécharger l’outil