Aperçu de l'extension Response Overview pour BurpSuite - Trouvez des réponses exotiques en regroupant les corps de réponse
Extension Response Overview pour BurpSuite
Auteur : Tobias "floyd" Ospelt, @floyd_ch, http://www.floyd.ch
Pentagrid AG, https://www.pentagrid.ch
Cette extension regroupe tous les corps de réponse par similarité et affiche un résumé, une requête/réponse par groupe. L'extension permet à un testeur d'obtenir une vue d'ensemble des réponses du site web testé depuis tous les outils (scanner, proxy, etc.). Elle fournit une "méthode de détection semi-automatisée" supplémentaire (par rapport aux méthodes de détection habituelles basées sur la réponse, sur le temps, sur l'interaction, etc.). Diverses optimisations existent, principalement pour des raisons de performance. La fonctionnalité "remove parameters" supprime les paramètres de requête reflétés de la réponse avant la comparaison.
Jusqu'à présent :
L'utilisation est très simple :
Cette extension analyse les réponses HTTP si :
Lorsque les contraintes de filtre ci-dessus sont satisfaites, les corps de réponse entrants (de tous les outils Burp !) sont comparés à tous les groupes que nous avons déjà créés. Un groupe est défini par son tout premier membre, que nous conservons en mémoire. Si la réponse que nous traitons est similaire à 95 % à ce premier membre, elle appartient à ce groupe et seul le compteur "Group Size" est incrémenté. Cela signifie également que nous ne stockerons pas cette réponse. Si la réponse n'est pas similaire à 95 % à aucun groupe, elle forme un nouveau groupe et en est le premier membre.
La première version d'une telle vue d'ensemble des réponses permettant de trouver des anomalies a été proposée en 2010 au projet w3af (voir aussi une discussion ici : https://github.com/andresriancho/w3af/issues/17345) et était écrite en Python. Elle n'a jamais été intégrée au mainline de w3af, je ne me souviens plus pourquoi. J'ai beaucoup appris sur difflib de Python à l'époque et j'ai optimisé les performances pour ce cas d'usage. J'ai écrit une extension similaire en Python pour Burp en 2019 et j'ai de nouveau beaucoup appris sur difflib de Python lorsque je travaillais pour modzero AG https://github.com/modzero/burp-ResponseClusterer. Cependant, à un moment donné, j'ai réalisé que l'extension pouvait consommer une partie des performances de Burp, ce que j'ai d'abord ignoré. En 2021, l'extension a complètement cessé de fonctionner car elle ne s'exécutait plus avec les versions plus récentes de Jython, et en revisitant le code, j'ai réalisé que j'avais codé une extension très inefficace en mémoire. Nous y voilà donc, c'est une nouvelle extension en 2021 en Kotlin avec de nouvelles fonctionnalités, apprenant encore beaucoup de difflib de Python et de différentes fonctionnalités. J'ai apporté une amélioration de performance car j'ai réalisé que certains calculs ne sont pas nécessaires si nous comparons toujours aux mêmes chaînes (comme déjà implémenté dans le code Python). Response Clusterer est mort, vive Response Overview.
En théorie, les paramètres par défaut pourraient entraîner des performances pas terribles de Burp. Cependant, cela est très peu probable. Dans un test où toutes les réponses avaient la taille maximale par défaut (environ 1 Mo) et devaient être comparées entre elles, la comparaison prenait jusqu'à 30 ms avec l'optimisation bByteCount précalculée (cas normal) et jusqu'à 80 ms sans cette optimisation (ne se produit qu'une fois pour chaque entrée). Multiplié par le nombre maximal de groupes (1000), cela signifie que dans le pire des cas absolu, cela pourrait représenter jusqu'à 80 secondes de temps de traitement. Comme il y a un thread séparé, ce serait supportable, car la comparaison suivante ne prendrait alors qu'un maximum de 30 secondes. Mais quelle application web a beaucoup de réponses différentes d'environ 1 Mo ? Espérons pas trop. N'oubliez pas non plus que si la longueur des réponses diffère de plus de 2 %, la correspondance de similarité ne prend aucun temps du tout grâce à l'optimisation veryQuickRatio.