
Response Overview Extension für BurpSuite – Exotische Antworten durch Gruppierung von Antwort-Bodies finden
Response Overview Extension für BurpSuite
Autor: Tobias "floyd" Ospelt, @floyd_ch, http://www.floyd.ch
Pentagrid AG, https://www.pentagrid.ch
Diese Extension gruppiert alle Response-Bodies nach Ähnlichkeit und zeigt eine Zusammenfassung, eine Anfrage/Antwort pro Gruppe. Die Extension ermöglicht es einem Tester, sich einen Überblick über die Antworten der getesteten Website aus allen Tools (Scanner, Proxy, etc.) zu verschaffen. Sie bietet eine zusätzliche "semi-automatisierte Erkennungsmethode" (im Vergleich zu den üblichen Erkennungsmethoden wie response-based, time-based, interaction-based, etc.). Es gibt verschiedene Optimierungen, hauptsächlich aus Performance-Gründen. Die Funktion "remove parameters" entfernt reflektierte Request-Parameter aus der Antwort vor dem Vergleich.
Bisher:
Die Verwendung ist sehr einfach:
Diese Extension analysiert HTTP-Antworten, wenn:
Wenn die oben genannten Filterbedingungen erfüllt sind, werden die eingehenden Response-Bodies (von allen Burp-Tools!) mit allen Gruppen verglichen, die wir bereits erstellt haben. Eine Gruppe wird durch ihr allererstes Mitglied definiert, das wir im Speicher behalten. Wenn die Antwort, die wir verarbeiten, zu 95 % mit diesem ersten Mitglied übereinstimmt, gehört sie zu dieser Gruppe und nur der Zähler "Group Size" wird erhöht. Das bedeutet auch, dass wir diese Antwort nicht speichern. Wenn die Antwort zu keiner Gruppe zu 95 % ähnlich ist, bildet sie eine neue Gruppe und ist deren erstes Mitglied.
Die erste Version einer solchen Response-Übersicht, die es ermöglicht, Anomalien zu finden, habe ich 2010 für das w3af-Projekt vorgeschlagen (siehe auch eine Diskussion hier: https://github.com/andresriancho/w3af/issues/17345) und sie war in Python geschrieben. Sie hat es nie in den Mainline-w3af geschafft, ich weiß nicht mehr warum. Damals habe ich viel über Pythons difflib gelernt und die Performance für den Anwendungsfall optimiert. Ich habe 2019 eine ähnliche Extension in Python für Burp geschrieben und wieder viel über Pythons difflib gelernt, als ich für die modzero AG arbeitete https://github.com/modzero/burp-ResponseClusterer. Irgendwann wurde mir jedoch klar, dass die Extension möglicherweise einen Teil der Burp-Performance frisst, was ich zunächst ignorierte. Im Jahr 2021 brach die Extension komplett zusammen, da sie mit neueren Jython-Versionen nicht mehr lief, und beim erneuten Durchsehen des Codes wurde mir klar, dass ich eine sehr speicherineffiziente Extension geschrieben hatte. Hier sind wir also, dies ist eine neue Extension aus dem Jahr 2021 in Kotlin mit neuen Funktionen, wobei ich wieder viel von Pythons difflib und verschiedenen Features gelernt habe. Ich habe eine Performance-Verbesserung vorgenommen, weil mir klar wurde, dass bestimmte Berechnungen nicht notwendig sind, wenn wir immer gegen dieselben Strings vergleichen (wie bereits im Python-Code implementiert). Response Clusterer ist tot, lang lebe Response Overview.
Theoretisch könnten die Standardeinstellungen zu einer nicht so großartigen Performance von Burp führen. Dies ist jedoch höchst unwahrscheinlich. In einem Test, bei dem alle Antworten die maximale Standard-Antwortgröße (etwa 1 MB) hatten und miteinander verglichen werden mussten, dauerte der Vergleich bis zu 30 ms mit vorberechneter bByteCount-Optimierung (Normalfall) und bis zu 80 ms ohne diese Optimierung (passiert nur einmal pro Eintrag). Multipliziert mit der maximalen Anzahl von Gruppen (1000) bedeutet dies im absoluten Worst Case bis zu 80 Sekunden Verarbeitungszeit. Da es einen separaten Thread gibt, wäre dies erträglich, da der nächste Vergleich dann nur noch maximal 30 Sekunden dauern würde. Aber welche Webanwendung hat viele verschiedene Antworten von etwa 1 MB? Hoffen wir, nicht zu viele. Vergiss auch nicht, dass der Ähnlichkeitsabgleich überhaupt keine Zeit in Anspruch nimmt, wenn die Länge der Antworten um mehr als 2 % abweicht, dank der veryQuickRatio-Optimierung.