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
jdam — Un fuzzer JSON conscient de la structure | Kitploit
Outils/GitLabGitLab/michenriksen/jdam
Analyse des VulnérabilitésExploitation d'Applications WebFuzzingTests d'Intrusion
GitLabmichenriksen/jdam

jdam

Un fuzzer JSON conscient de la structure

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

jdam - Fuzzing JSON conscient de la structure

jdam

jdam est un outil inspiré de Radamsa pour le fuzzing d'objets JSON arbitraires de manière consciente de la structure, ce qui garantit que les résultats du fuzzing seront toujours du JSON valide.

De nombreux outils de fuzzing existants modifient aveuglément l'entrée et rendent souvent le résultat invalide en JSON. Cela signifie que les tests de fuzzing ne sollicitent que l'analyseur JSON de l'application cible et n'atteignent jamais le code sous-jacent de l'application car les requêtes sont invalides. Jdam est une tentative de résoudre ce problème.

jdam est livré avec plusieurs modules de mutation qui visent tous à découvrir les problèmes potentiels et les vulnérabilités dans les systèmes qui traitent les données fuzzées. Certains modules effectuent des changements aléatoires tels que la suppression, le remplacement, l'échange et la répétition d'octets aléatoires, l'inversion de valeurs booléennes et la négation de nombres, tandis que d'autres modules remplacent les valeurs par des charges utiles qui tentent de déclencher des types de vulnérabilités spécifiques tels que :

  • SQL Injection
  • Command Injection
  • LDAP Injection
  • NoSQL Injection
  • Format String Injection
  • Local File Inclusion
  • Integer Overflow
  • et plus encore

Pour voir la liste complète des mutateurs disponibles, utilisez jdam -list.

Note

jdam est encore assez brut et des erreurs sont à prévoir. Il est néanmoins suffisamment stable pour être publié pour les personnes aventureuses, mais considérez-le comme un logiciel alpha pour l'instant !

Installation

Téléchargez une release précompilée pour votre système d'exploitation ou clonez le dépôt et compilez avec go build -o jdam cmd/jdam/*.

Usage

root@kitploit:~
Usage of jdam:
  -count int
    	Number of fuzzed objects to generate (default 1)
  -ignore string
    	Comma-separated list of fields to exclude from fuzzing
  -list
    	List available mutators
  -max-depth int
    	Maximum object depth to fuzz (default 100)
  -mutators string
    	Comma-separated list of mutator IDs to use (default: all)
  -nil-chance float
    	Probability of value being set to nil (between 0 (no nils) and 1 (all nils)) (default 0.75)
  -output string
    	Output file pattern to use for results (e.g. /tmp/jdam-%d.json)
  -rounds int
    	Number of times to fuzz object (default 1)
  -seed int
    	Seed to use for pseudo-random number generator (default: current UNIX timestamp)
  -verbose
    	Print activity information
  -version
    	Print current jdam version

jdam fonctionne en lui fournissant un objet JSON valide ({...}) via un pipe. Par défaut, jdam effectue une permutation aléatoire sur un champ aléatoire et affiche l'objet JSON résultant :

root@kitploit:~
$ echo '{"hello":"world"}' | jdam
{"hello":{"id":1}}

Le JSON sujet peut être muté plusieurs fois avec le drapeau -rounds, mais gardez à l'esprit que les charges utiles de fuzzing précédentes peuvent également être mutées :

root@kitploit:~
$ echo '{"hello":"world"}' | jdam -rounds 10
{"hello":{"_constructor":"${42*444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444442}"}}

Plusieurs objets fuzzés peuvent être générés avec le drapeau -count :

root@kitploit:~
$ echo '{"hello":"world"}' | jdam -count 10
{"hello":"sorld"}
{"hello":"../../../../../../../../../../../../../../../../../../../../etc/passwd"}
{"hello":"{{42*42}}"}
{"hello":null}
{"hello":"' \u0026\u0026 this.password.match(/.*/)//+\u0000"}
{"hello":{"$where":"1"}}
{"hello":"null"}
{"hello":"\";touch /tmp/jdam.70797.fail'"}
{"hello":null}
{"hello":"|| 1==1"}

Écriture des résultats dans des fichiers

jdam peut écrire les résultats de fuzzing dans des fichiers individuels si vous souhaitez préparer des fichiers de test plutôt que d'utiliser la sortie standard de la commande :

root@kitploit:~
$ echo '{"hello":"world"}' | jdam -count 10 -output "/tmp/jdam-%d.json"

La commande ci-dessus générera 10 fichiers dans /tmp de jdam-1.json à jdam-10.json. Le verbe spécial %d sera automatiquement remplacé par un numéro séquentiel afin que les résultats puissent être écrits dans des fichiers individuels.

Ignorer des champs

Si vous voulez vous assurer que jdam ne mute jamais certains champs dans l'objet JSON sujet, vous pouvez lui demander de les ignorer avec le drapeau -ignore :

root@kitploit:~
$ echo '{"id":13,"articleId":37,"comment":"Hello"}' | ./jdam -count 10 -ignore id,articleId
{"id":13,"articleId":37,"comment":"%x%x%x%x"}
{"id":13,"articleId":37,"comment":"search=')] | //user/*[contains(*,'"}
{"id":13,"articleId":37,"comment":"' and count(/comment())=1 and '1'='1"}
{"id":13,"articleId":37,"comment":"\u0016ello"}
{"id":13,"articleId":37,"comment":"/"}
{"id":13,"articleId":37,"comment":null}
{"id":13,"articleId":37,"comment":"{{{42*42}}}"}
{"id":13,"articleId":37,"comment":"@*"}
{"id":13,"articleId":37,"comment":"Helloooooooooooooooo"}
{"id":13,"articleId":37,"comment":"//*"}

Utiliser jdam avec Ffuf

ffuf est un fuzzer web fantastique et jdam peut facilement être utilisé comme entrée pour le fuzzing :

root@kitploit:~
ffuf -input-cmd 'cat subject.json | jdam -rounds 3' -d FUZZ -u http://localhost/api/todos/1 -X PUT -v -mc 500 -mr 'error|failed|failure|fault|abort|root:|1764|0x|\d{20}' -od /tmp/ffuf_test

La commande ci-dessus demandera à ffuf d'obtenir son entrée de fuzzing depuis jdam et de l'envoyer comme corps de requête à PUT /api/todos/1. Les détails de la requête et de la réponse seront écrits dans tmp/ffuf_test/ si la réponse est 500 Erreur Interne du Serveur ou si le corps de la réponse contient certaines chaînes intéressantes.

Utiliser jdam comme un package

Si vous connaissez Go et avez besoin d'un fuzzing très spécialisé, vous pouvez utiliser jdam dans votre propre code Go. Consultez le dossier examples/ pour des exemples d'utilisation.

Que rechercher

Le fuzzing n'est utile que si vous pouvez détecter qu'une mutation particulière a causé un problème ou déclenché une vulnérabilité. Ces signes varieront en fonction du système cible et de l'environnement, mais voici quelques bonnes généralités à surveiller :

  1. Crashs : si le système cible n'accepte plus de connexions, il y a de fortes chances qu'il ait planté en raison d'une sorte de bug de corruption mémoire. Rejouez la dernière requête et voyez si le crash peut être reproduit.
  2. Réponses inhabituellement lentes : si une requête provoque une réponse anormalement lente du serveur, il y a de grandes chances qu'une charge utile ait causé des problèmes à un système sous-jacent ou demandé à la base de données de faire sleep.
  3. Réponses inhabituellement volumineuses : si une réponse est anormalement volumineuse par rapport à la moyenne, elle pourrait contenir des données intéressantes qui n'étaient pas destinées à être renvoyées.
  4. 500 Erreur Interne du Serveur et autres réponses d'erreur : celles-ci surviennent généralement lorsqu'une charge utile a déclenché une erreur inattendue ou non gérée dans l'application.
  5. Mots-clés d'erreur et d'échec : les réponses contenant des mots-clés liés aux erreurs tels que error, failure, failed, etc.
  6. Contenu du fichier /etc/passwd : toutes les charges utiles d'inclusion de fichier local tentent d'inclure le fichier /etc/passwd afin d'avoir un contenu prévisible. Donc toute réponse contenant root: est très intéressante !
  7. Le nombre magique 1764 : toutes les charges utiles d'injection de template tenteront de faire évaluer 42*42 par les moteurs de template vulnérables, ce qui équivaut à 1.764. Si ce nombre apparaît jamais dans une réponse, il y a de fortes chances que le système soit vulnérable à l'injection de template.

Trophy Room

jdam est encore un outil très récent donc il n'a pas encore découvert de bons bugs. J'aimerais beaucoup avoir de vos nouvelles si jdam vous a aidé à obtenir un CVE ou une belle prime de bug et je lierai volontiers votre article ou rapport ici. :)

Credit

Je tiens à remercier et à attribuer le mérite à quelques autres projets :

  • Radamsa pour l'inspiration derrière jdam.
  • gofuzz pour m'avoir donné des idées sur la façon de coder jdam.
  • SecLists et PayloadsAllTheThings pour les charges utiles de fuzzing.
  • ffuf pour avoir rendu super facile l'utilisation de jdam contre des applications web.

Bon Fuzzing !

Télécharger l’outil
  • 0x et longs nombres : si une réponse contient 0x suivi d'une longue chaîne hexadécimale ou d'une longue chaîne numérique, cela pourrait être une indication qu'une charge utile a déclenché une vulnérabilité de chaîne de format.
  • La présence de /tmp/jdam.*.fail : toutes les charges utiles d'injection de commande tentent de créer un fichier dans le dossier /tmp du système avec le nom jdam.<number>.fail. Le nombre sera un nombre aléatoire de cinq chiffres pour faciliter l'identification de la charge utile responsable.