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
uniFuzzer — Un outil de fuzzing pour binaires closed-source basé sur Unicorn et LibFuzzer | Kitploit
Outils/GitHubGitHub/pagalaxylab/unifuzzer
Sécurité des Systèmes EmbarquésSécurité IoTFuzzingAnalyse de Binaires
GitHubpagalaxylab/unifuzzer

uniFuzzer

Un outil de fuzzing pour binaires closed-source basé sur Unicorn et LibFuzzer

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

uniFuzzer

uniFuzzer est un outil de fuzzing pour les binaires closed-source basé sur Unicorn et LibFuzzer. Actuellement, il supporte le fuzzing des fichiers ELF 32 bits LSB sur ARM/MIPS, que l'on trouve généralement dans les appareils IoT.

Introduction en chinois

Fonctionnalités

  • très peu de bidouille et facile à construire
  • peut cibler toute fonction ou extrait de code spécifié
  • fuzzing guidé par couverture avec une vitesse considérable
  • dépendances résolues et chargées automatiquement
  • surcharge de fonctions de bibliothèque via PRELOAD

Construction

  1. Reversez le binaire cible et trouvez des fonctions intéressantes pour le fuzzing.
  2. Créez un fichier .c dans le répertoire callback, qui doit contenir les callbacks suivants :
  • void onLibLoad(const char *libName, void *baseAddr, void *ucBaseAddr) : Elle est invoquée à chaque fois qu'une bibliothèque dépendante est chargée dans Unicorn.
  • int uniFuzzerInit(uc_engine *uc) : Elle est invoquée juste après que tous les binaires aient été chargés dans Unicorn. La pile/tas/registres peuvent être configurés ici.
  • int uniFuzzerBeforeExec(uc_engine *uc, const uint8_t *data, size_t len) : Elle est invoquée avant chaque cycle d'exécution du fuzzing.
  • int uniFuzzerAfterExec(uc_engine *uc) : Elle est invoquée après chaque cycle d'exécution du fuzzing.
  1. Exécutez make et obtenez l'outil de fuzzing nommé uf.

Exécution

uniFuzzer utilise les variables d'environnement suivantes comme paramètres :

  • UF_TARGET : Chemin du fichier ELF cible
  • UF_PRELOAD : Chemin de la bibliothèque de préchargement. Assurez-vous que la bibliothèque a la même architecture que la cible.
  • UF_LIBPATH : Chemins dans lesquels se trouvent les bibliothèques dépendantes. Utilisez : pour séparer plusieurs chemins.

Et le fuzzing peut être démarré avec la commande suivante :

root@kitploit:~
UF_TARGET=<target> [UF_PRELOAD=<preload>] UF_LIBPATH=<libPath> ./uf

Démonstration

Voici une démonstration pour une utilisation de base. La démo contient les fichiers suivants :

  • demo-vuln.c : C'est la cible pour le fuzzing. Elle contient une fonction simple nommée vuln() qui est vulnérable aux débordements de pile/tas.
  • demo-libcpreload.c : Ceci est pour le hooking PRELOAD. Il définit un printf() vide et malloc()/free() simplifiés.
  • callback/demo-callback.c : Ceci définit les callbacks nécessaires pour fuzzer la fonction vuln() de la démo.

Tout d'abord, veuillez installer gcc pour mipsel (paquet gcc-mipsel-linux-gnu sur Debian) pour construire la démo :

root@kitploit:~
# the target binary
# '-Xlinker --hash-style=sysv' tells gcc to use 'DT_HASH' instead of 'DT_GNU_HASH' for symbol lookup
# since currently uniFuzzer does not support 'DT_GNU_HASH'
mipsel-linux-gnu-gcc demo-vuln.c -Xlinker --hash-style=sysv -no-pie -o demo-vuln

# the preload library
mipsel-linux-gnu-gcc -shared -fPIC -nostdlib -Xlinker --hash-style=sysv demo-libcpreload.c -o demo-libcpreload.so

Ou vous pouvez simplement utiliser les fichiers demo-vuln et demo-libcpreload.so, qui sont compilés avec les commandes ci-dessus.

Ensuite, exécutez make pour construire uniFuzzer. Veuillez noter que si vous avez compilé la démo MIPS vous-même, certaines adresses peuvent être différentes de celles préconstruites et demo-callback.c doit être mis à jour en conséquence.

Enfin, assurez-vous que la bibliothèque libc de MIPS est prête. Sur Debian, elle se trouve dans /usr/mipsel-linux-gnu/lib/ après l'installation du paquet libc6-mipsel-cross, et c'est ce que UF_LIBPATH doit être :

root@kitploit:~
UF_TARGET=<path to demo-vuln> UF_PRELOAD=<path to demo-libcpreload.so> UF_LIBPATH=<lib path for MIPS> ./uf

Bidouille sur Unicorn

Unicorn vide le cache JIT de QEMU en raison de ce problème, ce qui ralentit la vitesse du fuzzing car le binaire cible doit être re-compilé JIT à chaque cycle d'exécution.

Nous pouvons commenter tb_flush(env); comme indiqué dans ce problème pour des performances.

TODO

  • support pour les appels système
  • support pour d'autres architectures et formats binaires
  • support de GNU_HASH
  • support de IFUNC
  • intégrer la configuration de l'environnement et fournir des API
Télécharger l’outil