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
pyMalleableC2 — Interpréteur Python pour les profils C2 malléables de Cobalt Strike. Permet de les analyser, construire et modifier par programmation. | Kitploit
Outils/GitHubGitHub/byt3bl33d3r/pymalleablec2
Commandement et ContrôleUtilitaires et FrameworksRed TeamingDéveloppement de Charges Utiles
GitHubbyt3bl33d3r/pymalleablec2

pyMalleableC2

Interpréteur Python pour les profils C2 malléables de Cobalt Strike. Permet de les analyser, construire et modifier par programmation.

Voir le dépôt
2893547il y a 3 moisVé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

pyMalleableC2

pyMalleableC2

Un interpréteur Python pour les profils Malleable C2 de Cobalt Strike qui vous permet de les analyser, modifier, construire programmatiquement et valider la syntaxe.

Prend en charge toute la grammaire des profils Malleable C2 de Cobalt Strike à partir de la version 4.3.

Il n'est pas rétrocompatible avec les versions précédentes de Cobalt Strike.

Quelles sont les différences entre pyMalleableC2 et d'autres projets de cette nature ?

  1. Analyse les profils avec Lark en utilisant la notation eBNF. Cette approche est beaucoup plus robuste que les regex définies par l'utilisateur, les moteurs de templates ou méthodes similaires.
  2. Transforme les profils en un Arbre Syntaxique Abstrait (AST) qui peut ensuite être reconstruit en code source.
  3. Grâce à ce qui précède, pyMalleableC2 permet de construire des profils programmatiquement ou de les modifier à la volée.
  4. Permet de valider la syntaxe des profils Malleable C2 (n'effectue pas de vérifications à l'exécution, voir l'avertissement ci-dessous).
  5. Il dispose d'IA sous la forme de beaucoup de déclarations if.

Table des matières

  • pyMalleableC2
    • Installation
    • 🚨 Attention ! Pas de vérifications à l'exécution (encore !) 🚨
    • Auteur
    • Canal Discord Officiel
    • Exemples
    • FAQ

Installation

pyMalleableC2 a été construit avec Python 3.9, mais devrait être rétrocompatible jusqu'à Python 3.6.

Installer via Pip :

  • pip3 install pymalleablec2

🚨 AVERTISSEMENT 🚨

pyMalleableC2 vous considère comme un adulte consentant et suppose que vous savez écrire des profils Malleable C2. Il est capable de détecter les erreurs de syntaxe, mais aucune vérification à l'exécution n'est implémentée. Il générera volontiers des profils qui ne fonctionnent pas en production si on le lui demande. Exécutez toujours les profils générés via c2lint avant de les utiliser en production !

(Techniquement, vous pourriez construire une version Python de c2lint avec cette bibliothèque, *toux* les PRs sont les bienvenus *toux*)

Auteur

L'auteur principal de pyMalleableC2 est Marcello Salvati

Twitter : @byt3bl33d3r, Github : @byt3bl33d3r

Exemples

(Voir le dossier examples pour plus d'exemples)

Générer l'AST pour un profil Malleable C2 situé dans un fichier, puis reconstruire le code source à partir de l'AST :

root@kitploit:~
from malleablec2 import Profile

# Parse a profile given its path
p = Profile.from_file("amazon.profile")

# Print the generated AST
print(p.ast.pretty())

# Reconstruct source code from the AST and print to console
print(p.reconstruct())

# Shortcut for the above :)
print(p)

Générer l'AST pour un profil Malleable C2 'inline' puis reconstruire le code source à partir de l'AST :

root@kitploit:~
code = '''
set jitter "0";
set sleeptime "3000";

http-get {
    set uri "/wow/this/is/cool";
}

http-post {
    set uri "/pymalleablec2/is/the/shit";
}
'''

# Parse a profile from a string
p = Profile.from_string(code)

# Print the generated AST
print(p.ast.pretty())

# Reconstruct source code from the AST and print to console
print(p)

Construire un profil Malleable C2 programmatiquement à partir de zéro :

root@kitploit:~
from malleablec2 import Profile
from malleablec2.components import *

# Create an empty profile
p = Profile.from_scratch()

# Set some global options
p.set_option("sleeptime", "0")
p.set_option("jitter", "0")
p.set_option("pipename", "mojo__##")

# Create an http-get block
http_get = HttpGetBlock()
# Set the uri http-get option
http_get.set_option("uri", "/wat/a/tease")

# Create a client block
client = ClientBlock()
# Add a header statement to the client block
client.add_statement("header", "Accept", "*/*")

# Create a server block
server = ServerBlock()

# Add the client and server blocks to the http-get block
http_get.add_code_block(client)
http_get.add_code_block(server)

# Create a http-post block
http_post = HttpPostBlock()
# Set the uri http-post option
http_post.set_option("uri", "/wat/ucraycray")

# Add the http-get and http-post blocks to the profile
p.add_code_block(http_get)
p.add_code_block(http_post)

# Reconstruct source code from the generated AST and print to console
print(p)

Exemple très simple montrant comment randomiser programmatiquement un profil Malleable C2 :

root@kitploit:~
from malleablec2 import Profile
from malleablec2.randomizer import ProfileRandomizer
from lark import Token

class MyRandomizer(ProfileRandomizer):

    # We implement the global_option_set method which will get called on every parsed global option statement in the profile
    def global_option_set(self, tree):
        option_name = tree.children[0]

        if option_name == "pipename":
            # "Randomize" the pipename value
            tree.children[1].children[0] = Token('ESCAPED_STRING', '"my_random_pipename_##"')

# Parse a profile given its path
p = Profile.from_file("amazon.profile")

r = MyRandomizer()

# Walk through the generated profile AST and apply randomization rules
r.randomize(p)

# Reconstruct source code then output the profile to the console
print(p)
Télécharger l’outil