
PyJFuzz - Fuzzer JSON Python

PyJFuzz est un petit framework extensible et prêt à l'emploi utilisé pour fuzzer des entrées JSON, comme les API REST d'endpoints mobiles, les implémentations JSON, les navigateurs, les exécutables en ligne de commande et bien plus encore.
| Version | 1.1.0 |
|---|---|
| Page d'accueil | http://www.mseclab.com/ |
| Github | https://github.com/mseclab/PyJFuzz |
| Auteur | Daniele Linguaglossa (@dzonerzy) |
| Licence | MIT - (voir le fichier LICENSE) |
Dépendances
Pour fonctionner, PyJFuzz a besoin de certaines dépendances : bottle, netifaces, GitPython et gramfuzz. Vous pouvez les installer via l'installation automatique de setup.py.
Installation
Vous pouvez installer PyJFuzz avec la commande suivante
git clone https://github.com/mseclab/PyJFuzz.git && cd PyJFuzz && sudo python setup.py install
Outil en ligne de commande
Une fois installé, PyJFuzz crée à la fois une bibliothèque Python et un utilitaire en ligne de commande appelé pjf (capture d'écran ci-dessous)
Bibliothèque
PyJFuzz peut également fonctionner comme une bibliothèque, vous pouvez l'importer dans votre projet comme suit
from pyjfuzz.lib import *
Classes
Les objets/classes disponibles sont les suivants :
Exemples
Voici quelques exemples simples de mise en œuvre d'un programme utilisant PyJFuzz
simple_fuzzer.py
from argparse import Namespace
from pyjfuzz.lib import *
config = PJFConfiguration(Namespace(json={"test": ["1", 2, True]}, nologo=True, level=6))
fuzzer = PJFFactory(config)
while True:
print fuzzer.fuzzed
custom_techniques.py
from argparse import Namespace
from pyjfuzz.lib import *
# Les techniques peuvent être définies par groupe ou par numéro de technique.
# Les groupes sont CHTPRSX. Pour comprendre ce qu'ils sont, veuillez exécuter pyjfuzz avec l'option -h ou regarder la capture d'écran de la ligne de commande.
# Ce qui suit initialise un objet de configuration qui utilise uniquement les attaques du groupe P, où P correspond à Path Traversal.
config = PJFConfiguration(Namespace(json={"test": ["1", 2, True]}, nologo=True, level=6, techniques="P"))
# Une fois un objet config défini, vous pouvez accéder à config.techniques pour voir les techniques sélectionnées pour votre groupe.
print("Techniques IDs: {0}".format(str(config.techniques)))
# Vous pouvez éventuellement les modifier !
config.techniques = [2]
# De cette façon, seule l'attaque numéro 2 (LFI Attack) sera effectuée !
fuzzer = PJFFactory(config)
while True:
print fuzzer.fuzzed
simple_server.py
from argparse import Namespace
from pyjfuzz.lib import *
config = PJFConfiguration(Namespace(json={"test": ["1", 2, True]}, nologo=True, level=6, debug=True, indent=True))
PJFServer(config).run()
Parfois, vous pouvez avoir besoin de modifier des paramètres standard non personnalisables, comme le port du serveur HTTPS ou HTTP. Cela peut être fait de la manière suivante
from argparse import Namespace
from pyjfuzz.lib import *
config = PJFConfiguration(Namespace(json={"test": ["1", 2, True]}, nologo=True, level=6, indent=True))
print config.ports["servers"]["HTTP_PORT"] # 8080
print config.ports["servers"]["HTTPS_PORT"] # 8443
print config.ports["servers"]["TCASE_PORT"] # 8888
config.ports["servers"]["HTTPS_PORT"] = 443 # Change HTTPS port to 443
Rappel : Lorsque vous modifiez les ports par défaut, vous devez toujours gérer les exceptions en raison des privilèges nécessaires !
Voici une liste complète de tous les paramètres/personnalisations disponibles de l'objet PJFConfiguration :
Tableau de configuration