Extensión Response Overview para BurpSuite: encuentra respuestas exóticas agrupando los cuerpos de las respuestas
Extensión de Resumen de Respuestas para BurpSuite
Autor: Tobias "floyd" Ospelt, @floyd_ch, http://www.floyd.ch
Pentagrid AG, https://www.pentagrid.ch
Esta extensión agrupa todos los cuerpos de las respuestas por similitud y muestra un resumen, una petición/respuesta por grupo. La extensión permitirá a un tester obtener una visión general de las respuestas del sitio web probado desde todas las herramientas (escáner, proxy, etc.). Proporciona un "método de detección semiautomatizado" adicional (en comparación con los métodos de detección habituales basados en respuestas, en tiempo, en interacción, etc.). Hay varias optimizaciones, principalmente por razones de rendimiento. La función "remove parameters" elimina los parámetros de petición reflejados de la respuesta antes de la comparación.
Hasta ahora:
El uso es muy sencillo:
Esta extensión analiza las respuestas HTTP si:
Cuando se satisfacen las restricciones de filtro anteriores, los cuerpos de las respuestas entrantes (¡de todas las herramientas de Burp!) se comparan con todos los grupos que ya hemos creado. Un grupo se define por su primer miembro, que mantenemos en memoria. Si la respuesta que estamos procesando es 95% similar a ese primer miembro, pertenece a ese grupo y solo se incrementa el contador "Group Size". Eso también significa que no almacenaremos esa respuesta. Si la respuesta no es 95% similar a ningún grupo, forma un nuevo grupo y es su primer miembro.
La primera versión de un resumen de respuestas de este tipo que te permite encontrar anomalías la propuse en 2010 al proyecto w3af (ver también una discusión aquí: https://github.com/andresriancho/w3af/issues/17345) y estaba escrita en Python. Nunca llegó al mainline de w3af, no recuerdo por qué. Aprendí mucho sobre difflib de Python en aquel entonces y optimicé el rendimiento para el caso de uso. Escribí una extensión similar en Python para Burp en 2019 y de nuevo aprendí mucho sobre difflib de Python cuando trabajaba para modzero AG https://github.com/modzero/burp-ResponseClusterer. Sin embargo, en un momento dado me di cuenta de que la extensión podría estar consumiendo parte del rendimiento de Burp, lo cual al principio ignoré. En 2021 la extensión se rompió por completo, ya que no funcionaba con versiones más nuevas de Jython, y al revisar el código me di cuenta de que había programado una extensión muy ineficiente en memoria. Así que aquí estamos, esta es una nueva extensión en 2021 en Kotlin con nuevas funcionalidades, aprendiendo de nuevo mucho de difflib de Python y de distintas funcionalidades. Hice una mejora de rendimiento porque me di cuenta de que ciertos cálculos no son necesarios si siempre comparamos contra las mismas cadenas (como ya estaba implementado en el código Python). Response Clusterer ha muerto, larga vida a Response Overview.
En teoría, la configuración por defecto podría dar lugar a un rendimiento no tan bueno de Burp. Sin embargo, es muy improbable que ocurra. En una prueba en la que todas las respuestas tenían el tamaño máximo por defecto (alrededor de 1MB) y había que compararlas entre sí, la comparación tardó hasta 30ms con la optimización precalculada bByteCount (caso habitual) y hasta 80ms sin esta optimización (solo ocurre una vez por cada entrada). Multiplicado por la cantidad máxima de grupos (1000), esto significa que en el peor caso absoluto podría suponer hasta 80 segundos de tiempo de procesamiento. Como hay un hilo separado, sería soportable, ya que la siguiente comparación entonces solo tardaría un máximo de 30 segundos. Pero, ¿qué aplicación web tiene muchas respuestas diferentes de alrededor de 1MB? Esperemos que no muchas. Tampoco olvides que si la longitud de las respuestas difiere en más del 2%, la coincidencia por similitud no tarda nada en absoluto debido a la optimización veryQuickRatio.