XUT_ / COURSES / PENETRATION TESTER

Exploiting Insecure Session Management

Vamos a resolver la siguiente máquina.


Enumeration

Para poder explotar un ciclo de vida de un manejo de sesiones vulnerable, necesitamos mapear el ciclo de vida para nosotros mismos y redactar notas detalladas. Una vez que entendamos lo que realiza el ciclo de vida, podemos empezar a buscar debilidades.

  1. Navegamos al sitio web que nos dan. Exploiting Insecure Session Management Si abrimos las herramientas de desarrollador, podemos ver que de primeras no nos dan ninguna cookie/token, por lo que sabemos que las sesiones no autentificadas no están siento controladas.
  2. Si le damos a Sign Up, vemos que hay dos maneras principales de hacerlo. Exploiting Insecure Session Management
    • Estudiante
    • Profesor Esto nos indica que incluso sin métodos de fuerza bruta, podemos lanzar el ciclo de vida del manejo de sesiones creando una cuenta de estudiante.
    1. Vamos a crear una cuenta de estudiante. Exploiting Insecure Session Management
    2. Hemos recibido una notificación de que se ha creado la cuenta. Vamos a iniciar sesión. Exploiting Insecure Session Management Exploiting Insecure Session Management Esto nos da algo de información:
      • Las cookies se usan para el manejo de sesión.
      • La flag HTTPOnly esta configurada lo que significa que no deberíamos ser capaces de usar JavaScript para leer el valor de la cookie.
      • El tiempo de expiración de la cookie se ve raro ya que el tiempo de creación y de expiración son el mismo.
    3. Con esta autentificación, tenemos acceso a más funcionalidades. Exploiting Insecure Session Management
    4. Viendo el apartado de red podemos ver que el control de sesión está reforzado por la cookie que está siendo transmitida en cada petición. Exploiting Insecure Session Management Algo interesante en lo que fijarse, es que aunque la fecha de expiración haya sido alcanzada, el mismo header de cookie se usa para refrescar la cookie al mismo valor. Esto puede apuntar a una cookie persistente. Veamos lo que pasa cuando eliminamos la cookie.
    5. Eliminamos la cookie en storage y hacemos la petición de modules otra vez. Exploiting Insecure Session Management Ahora ya no hay cookie en la petición.
    6. Parece que sigue cargando, pero ahora no podemos ver el número de alumnos matriculados en cada uno de los módulos. Exploiting Insecure Session Management Esto requiere más investigación ya que tenemos que ver qué acciones podemos realizar con una cuenta sin autentificar.
    7. Si presionamos el botón de log out podemos ver que nuestra sesión se borra completamente del lado del cliente. Exploiting Insecure Session Management Sin embargo debemos comprobar si también ha sido eliminada del lado del servidor.
    8. Para hacerlo vamos a iniciar sesión y a sustituir la cookie actual por la cookie pasada. Exploiting Insecure Session Management Parece que la terminación de sesión funciona porque recibimos error 500.
    9. Si vamos a local storage, vemos que hay cierta información siendo guardada. Exploiting Insecure Session Management
    10. Cambiaremos el rol de Student a Lecturer. Exploiting Insecure Session Management Parece que ahora tenemos acceso a más opciones, sin embargo no hay más información relevante.
    11. Cambiemos el valor del usuario de 2 a 1. Exploiting Insecure Session Management Nada cambia.

Deberemos volver más adelante pero todo esto nos dice que puede que las sesiones se estén manejando mediante tokens y no mediante cookies.

Echemos un vistazo al mapeo que hemos hecho:

Fase del CicloObservación
Session CreationSe usa una combinación de cookie y token.
Session CreationSe recibe un valor de sesión nuevo por cada inicio de sesión.
Session CreationEl valor de la sesión parece ser suficientemente random.
Session TrackingLas acciones no autentificadas no se trackean vía sesión.
Session TrackingLa cookie se manda en cada petición.
Session TrackingSe pueden hacer peticiones sin cookie.
Session TrackingLos valores del token inicial dictan la información visible.
Session ExpiryHay una descordinación entre lo tiempos de expiración del lado del cliente y del servidor.
Session ExpiryEl tiempo de expiración es muy largo.
Session TerminationLos usuarios pueden terminar su sesión forzosamente.
Session TerminationLas sesiones se terminan del lado del servidor pero reusar una sesión antigua conlleva a in error interno del servidor.

Dada toda esta información reportaríamos las siguientes vulnerabilidades en un reporte de seguridad:

  • Tiempo de sesión excesivo.

Deberíamos además investigar:

  • Controles de acceso en todos los endpoints API.
  • Logs de aplicaciones web por la responsabilidad de acciones.

Explotación

  1. Desde la sesión como "Lecturer" vamos al apartado de estudiantes y miramos el que se llama "X". Podríamos filtrar por nombre con Contains: X. Exploiting Insecure Session Management
CAUTION

Esta flag está buggeada.

  1. Si cambiamos el rol a "admin" vemos que sólo hay registrado 1. Exploiting Insecure Session Management
  2. Si vamos al apartado de tests podemos ver la mayor nota de Student1. Exploiting Insecure Session Management
  3. Además como en el otro examen no hay intentos también sabemos que los intentos totales fueron 4.
  4. Miramos las respuestas del examen. Exploiting Insecure Session Management