
Tout ce qu'il faut savoir sur la génération d'extensions Burp

Premièrement, installez Yeoman et generator-burp-extension avec npm (nous supposons que vous avez préinstallé node.js).
npm install -g yo
npm install -g generator-burp-extension
Ensuite générez votre nouveau projet :
yo burp-extension
Lorsque vous générez votre projet de plugin, le générateur vous demandera quelles fonctionnalités inclure dans votre plugin. Si vous êtes familier avec le développement d'extensions Burp, les noms des fonctionnalités seront suffisamment descriptifs, mais si vous débutez avec les extensions Burp, voici une brève description de ce qui peut être fait avec chaque fonctionnalité.
Onglet personnalisé qui sera ajouté à l'interface de Burp. Il est normalement utilisé pour ajouter une fonctionnalité (comme l'extension logger++) ou simplement pour permettre à l'utilisateur de configurer l'extension.

Onglet d'édition de message personnalisé qui sera ajouté à l'interface d'édition de message de Burp (Repeter, Intruder...). Il est normalement utilisé pour offrir une fonctionnalité d'édition/visualisation personnalisée dans les charges utiles des requêtes/réponses. Un exemple est l'extension JSON Beutifier.

Un menu contextuel personnalisé sera ajouté à l'interface de Burp presque partout, en cliquant avec le bouton droit. Burp permet d'afficher des menus contextuels dans n'importe laquelle de ces situations :
Un exemple simple de cette fonctionnalité est l'extension copy-as-python-requests, qui permet de copier une requête en tant que code Python (juste un exemple).

L'écouteur sera notifié des requêtes et réponses traitées par l'outil Proxy (écouteur Proxy) ou effectuées par tout outil Burp (écouteur HTTP). Les extensions peuvent effectuer une analyse ou une modification personnalisée de ces messages.
En d'autres termes, un écouteur Proxy intercepte les requêtes provenant du navigateur vers Burp et les réponses allant de Burp au navigateur. Un écouteur HTTP intercepte les requêtes sortantes de Burp vers le serveur web et les réponses entrantes provenant du serveur web.

Un exemple de plugin réel utilisant cette fonctionnalité d'extension est AutoRepeater
Étendez les charges utiles Intruder en ajoutant des capacités de générateur personnalisé. Une utilisation possible de cette fonctionnalité pourrait être de générer des numéros IBAN valides aléatoires. Un exemple réel est l'extension Intruder file payload generator (je ne l'utilise pas, ce n'est qu'un exemple)

Étendez les charges utiles Intruder en ajoutant des capacités de processeur personnalisé, un exemple possible pourrait être d'effectuer un chiffrement AES basé sur une clé statique.

Lors de l'analyse, Burp demandera à la vérification d'effectuer une analyse active ou passive sur la requête de base, et de signaler tout problème de scanner identifié.
Lorsqu'une requête est analysée activement, le scanner invoquera ce fournisseur, et celui-ci doit fournir une liste de points d'insertion personnalisés qui seront utilisés dans l'analyse.
Chaque action enregistrée sera disponible dans l'interface de règle de gestion de session pour que l'utilisateur la sélectionne comme action de règle. Les utilisateurs peuvent choisir d'invoquer une action directement en tant que telle, ou après l'exécution d'une macro.

L'écouteur sera notifié lorsque l'extension est déchargée de Burp. Remarque : toute extension qui démarre des threads en arrière-plan ou ouvre des ressources système (telles que des fichiers ou des connexions de base de données) doit enregistrer un écouteur et terminer les threads/fermer les ressources lorsque l'extension est déchargée.
L'écouteur sera notifié des nouveaux problèmes signalés par l'outil Scanner. Les extensions peuvent effectuer une analyse personnalisée ou une journalisation des problèmes du scanner en enregistrant un écouteur de scanner.
L'écouteur sera notifié à chaque fois qu'un changement se produit dans la portée cible globale de Burp.
Probablement inutile car Burp ne permet pas d'accéder à la définition de la portée globale.
Cette section explique certaines décisions prises lors du développement du modèle.
Tout d'abord, je ne suis pas fan de Java
Comme vous le savez peut-être, BurpSuite permet de développer des extensions dans trois langages principaux : Java, Python et Ruby. En réalité, ce n'est pas tout à fait vrai. Burp permet de développer en Jython et JRuby. Le vrai problème est que, lorsque vous utilisez Jython ou JRuby dans une extension Burp, vous devez encore penser en Java (car c'est le langage principal de Burp), donc au final, vous développerez en Python et Java, mais avec beaucoup de problèmes pour intégrer votre projet à un véritable IDE, avec autocomplétion et ce genre de choses modernes.
Une autre bonne raison d'utiliser Java plutôt que Jython est que ce dernier est basé sur Python 2.7, et je n'utilise pas JRuby parce que je n'aime pas Ruby, c'est tout.
Comme vous l'avez peut-être remarqué, toutes les implémentations d'une interface Burp suivent un pattern Singleton ; la raison principale est complètement subjective.
Le fait est que Burp est un excellent outil, mais il est un peu obscur concernant ses internes et probablement un peu désordonné. Ainsi, par exemple, Burp permet d'enregistrer plusieurs IHTTPListeners, mais vous perdrez des décisions importantes comme l'ordre d'appel de ces écouteurs. Ce genre de situations, à mon humble avis, peut obscurcir et rendre difficile la compréhension d'une extension Burp et la maintenabilité du code.
Vous pouvez voir chaque classe singleton comme un point de connexion nécessaire avec Burp, qui doit être unique. À partir de ce point de connexion, vous pouvez contrôler votre code, en réalisant n'importe quel type de conception orientée objet.
MIT © Raul Sampedro