Actualizando cookies "al vuelo" con Repeater e Intruder (Burp Cookie JAR)

Cada vez es menos extraño encontrarse con aplicaciones web que modifican y validan un valor de cookie distinto en cada petición, de forma que normalmente cada nueva petición deberá contener la cookie enviada en la respuesta anterior. De esta manera se evitan vulnerabilidades de condiciones de carrera sin tener que modificar el código de la aplicación, ya que si se reciben varias peticiones simultáneas con el mismo valor de cookie sólo una tendrá éxito y las demás serán rechazadas.

Por ejemplo, una aplicación que funcione así enviará en la cabecera de la respuesta HTTP: "set cookies: uniqueID=Xyzabc123mnq" y si en la siguiente petición no se incluye ese uniqueID no tendrá el mismo comportamiento.

Esta implementación no afecta a los navegadores web ya que los valores de las cookies actualizadas se incluyen por defecto en la solicitud posterior. Sin embargo, si estamos auditando la aplicación web con Burp proxy, Intruder y Repeater no tienen esta propiedad por defecto y para poder lanzar ataques y realizar fuzzing respectivamente es necesario manejar sesiones y usar cookie-jar.

Ayer lo escenifican perfectamente
en el blog de McAfee:

Petición 1
Análisis de una aplicación de demo usando Repeater.



Petición 2
Copia del valor uniqueID 101 de la respuesta para usarlo en la petición posterior.



Petición 3
Si se envía la misma petición sin actualizar el valor de la cookie uniqueID la respuesta de la aplicación cambia:



Evidentemente cambiar este valor a mano usando Repeater puede ser un auténtico coñazo muy pesado, e igualmente la aplicación nos bloqueará Intruder al probar distintos payloads (XSS, SQLi o lo que sea). 


Afortunadamente Burp también permite copiar los valores de la cookie de las respuestas y añadirlos de forma automática en las siguientes peticiones. Sólo tenemos que usar cookie-jar y reglas de manejo de sesiones (session-handling).

Para ello, dentro de las Opciones vamos a la pestaña 'Sessions' y veréis que ya hay creada una regla llamada “Use cookies from the session handling cookie jar” que está habilitada por defecto para el 'spider' y el 'scanner'. Así que sólo tenemos que editarla y añadir el scope el 'intruder' y el 'repeater' y habilitarlo igualmente en Cookie Jar y ya lo tenemos:



Finalmente podéis usar logger++ (una extensión gratuita en la BApp store) para comprobar que las siguientes pruebas realizadas con repeater ya actualizan automáticamente los valores de la cookie:
 



Referencias:
- https://blogs.mcafee.com/mcafee-labs/efficient-application-testing-burps-cookie-jar/
- https://portswigger.net/burp/help/options_sessions.html
- http://resources.infosecinstitute.com/burps-session-handling-mechanisms/

Comentarios