
Alles, was Sie über die Erstellung von Burp-Erweiterungen wissen müssen

Zuerst installieren Sie Yeoman und generator-burp-extension mit npm (wir gehen davon aus, dass Sie node.js bereits installiert haben).
npm install -g yo
npm install -g generator-burp-extension
Dann generieren Sie Ihr neues Projekt:
yo burp-extension
Wenn Sie Ihr Plugin-Projekt generieren, fragt der Generator, welche Funktionen in Ihrem Plugin enthalten sein sollen. Wenn Sie mit der Entwicklung von Burp-Erweiterungen vertraut sind, werden die Namen der Funktionen aussagekräftig genug sein. Falls Sie jedoch neu bei Burp-Erweiterungen sind, finden Sie hier eine kurze Beschreibung dessen, was mit jeder Funktion gemacht werden kann.
Ein benutzerdefinierter Tab, der zur Benutzeroberfläche von Burp hinzugefügt wird. Normalerweise wird er verwendet, um Funktionalität hinzuzufügen (wie die Erweiterung logger++) oder einfach um dem Benutzer die Konfiguration der Erweiterung zu ermöglichen.

Ein benutzerdefinierter Nachrichtenbearbeitungstab, der zur Benutzeroberfläche des Nachrichtenbearbeiters von Burp hinzugefügt wird (Repeater, Intruder…). Normalerweise wird er verwendet, um eine benutzerdefinierte Bearbeitungs-/Ansichtsfunktion für Anfrage-/Antwort-Payloads bereitzustellen. Ein Beispiel ist die Erweiterung JSON Beutifier.

Ein benutzerdefiniertes Kontextmenü wird fast überall zur Burp-Oberfläche hinzugefügt, indem man die rechte Maustaste drückt. Burp erlaubt die Anzeige von Kontextmenüs in jeder dieser Situationen:
Ein einfaches Beispiel für diese Funktionalität ist die Erweiterung copy-as-python-requests, mit der eine Anfrage als Python-Code kopiert werden kann (nur ein Beispiel).

Der Listener wird über Anfragen und Antworten benachrichtigt, die vom Proxy-Tool (Proxy-Listener) oder von einem beliebigen Burp-Tool (HTTP-Listener) verarbeitet werden. Erweiterungen können eine benutzerdefinierte Analyse oder Modifikation dieser Nachrichten durchführen.
Mit anderen Worten: Ein Proxy-Listener fängt die Anfragen vom Browser an Burp und die Antworten von Burp an den Browser ab. Ein HTTP-Listener fängt ausgehende Anfragen von Burp an den Webserver und eingehende Antworten vom Webserver ab.

Ein reales Beispiel-Plugin, das diese Erweiterungsfunktion nutzt, ist AutoRepeater.
Erweitern Sie Intruder-Payloads um benutzerdefinierte Generatorfähigkeiten. Eine mögliche Anwendung dieser Funktionalität könnte die Generierung zufälliger gültiger IBAN-Nummern sein. Ein reales Beispiel ist die Erweiterung Intruder file payload generator (ich verwende sie nicht, es ist nur ein Beispiel).

Erweitern Sie Intruder-Payloads um benutzerdefinierte Prozessorfähigkeiten. Ein mögliches Beispiel wäre die Durchführung einer AES-Verschlüsselung basierend auf einem statischen Schlüssel.

Beim Scannen wird Burp die Prüfung auffordern, aktives oder passives Scannen auf der Basis-Anfrage durchzuführen und alle identifizierten Scanner-Probleme zu melden.
Wenn eine Anfrage aktiv gescannt wird, ruft der Scanner dies auf, und der Anbieter sollte eine Liste benutzerdefinierter Einfügungspunkte bereitstellen, die im Scan verwendet werden.
Jede registrierte Aktion wird in der Benutzeroberfläche der Sitzungsbehandlungsregel zur Verfügung stehen, damit der Benutzer sie als Regelaktion auswählen kann. Benutzer können wählen, eine Aktion direkt eigenständig auszuführen oder nach Ausführung eines Makros.

Der Listener wird benachrichtigt, wenn die Erweiterung aus Burp entladen wird. Hinweis: Erweiterungen, die Hintergrundthreads starten oder Systemressourcen (wie Dateien oder Datenbankverbindungen) öffnen, sollten einen Listener registrieren und Threads beenden / Ressourcen schließen, wenn die Erweiterung entladen wird.
Der Listener wird über neue Probleme benachrichtigt, die vom Scanner-Tool gemeldet werden. Erweiterungen können eine benutzerdefinierte Analyse oder Protokollierung von Scanner-Problemen durchführen, indem sie einen Scanner-Listener registrieren.
Der Listener wird benachrichtigt, wenn eine Änderung am suite-weiten Zielbereich von Burp auftritt.
Wahrscheinlich nutzlos, da Burp keinen Zugriff auf die globale Bereichsdefinition erlaubt.
Dieser Abschnitt erläutert einige Entscheidungen bei der Entwicklung der Vorlage.
Zuallererst, ich bin kein Java-Fan.
Wie Sie vielleicht wissen, erlaubt BurpSuite die Entwicklung von Erweiterungen in drei Hauptsprachen: Java, Python und Ruby. Eigentlich stimmt das nicht ganz. Burp erlaubt die Entwicklung in Jython und JRuby. Das eigentliche Problem hier ist, dass Sie, wenn Sie Jython oder JRuby in einer Burp-Erweiterung verwenden, immer noch in Java denken müssen (da dies die Hauptsprache von Burp ist). Am Ende entwickeln Sie also in Python und Java, aber mit vielen Problemen, Ihr Projekt in eine echte IDE zu integrieren, mit Autovervollständigung und diesen modernen Dingen.
Ein weiterer guter Grund, Java anstelle von Jython zu verwenden, ist, dass es auf Python 2.7 basiert, und ich verwende JRuby nicht, weil ich Ruby nicht mag, das ist alles.
Wie Sie vielleicht bemerken, folgen alle Implementierungen eines Burp-Interfaces einem Singleton-Pattern. Der Hauptgrund dafür ist völlig subjektiv.
Die Sache ist die, dass Burp ein großartiges Werkzeug ist, aber seine Interna sind etwas undurchsichtig und wahrscheinlich ein wenig chaotisch. So erlaubt Burp Ihnen beispielsweise, mehrere IHTTPListener zu registrieren, aber Sie verlieren wichtige Entscheidungen wie die Reihenfolge des Aufrufs dieser Listener. Diese Art von Situationen könnte meiner bescheidenen Meinung nach das Verständnis einer Burp-Erweiterung und die Wartbarkeit des Codes erschweren.
Sie können jede Singleton-Klasse als einen notwendigen Verbindungspunkt mit Burp betrachten, der eindeutig sein muss. Von diesem Verbindungspunkt aus können Sie Ihren Code steuern und jede Art von objektorientiertem Design umsetzen.
MIT © Raul Sampedro