Cookies
Desafío
Who doesn’t love cookies? Try to figure out the best one. http://mercury.picoctf.net:6418
Herramientas
- curl
Explicación
Bueno, esta explicación va dedicada a todos los que pusimos (y van a poner) “-1” en el campo para nombrar una cookie.
A priori, vamos a encontrarnos con el buscador de cookies, que por ahora no nos dice nada. Si vamos a inspeccionar la página y vamos a la sección de cookies, veremos que el valor de la cookie name es -1. Esto es algo sospechoso, porque no es un valor habitual.
Si prestamos atención, dentro del campo de texto hay un ejemplo: “snickerdoodle”. ¿Qué pasa si enviamos ese nombre para verificar la cookie? Al probar, veremos que la página cambia, pero lamentablemente nos dice que no es la cookie que estamos buscando.
Peeero peero pero vamos a notar que hay algunas diferencias importantes con respecto a antes.
Primero que si vemos la barra de navegacion, la url cambio y ahora incluye /check y segundo si inspeccionamos la página de nuevo, veremos que la cookie name cambió: pasó de ser -1 a 0. Por lo que ya tenemos más información de la que agarrarnos, Esto nos indica que “-1” era un valor inicial y “0” es el valor para “snickerdoodle” (que es válida, pero no la correcta).
Antes que nada, ¿Para qué sirven las cookies? En resumen, nos permiten mantener información/estados entre las peticiones HTTP (que por naturaleza no tienen estado). Por lo que si, por casualidad, adivinamos o encontramos una cookie (como un token, un ID de sesión, etc.), podríamos acceder a la información asociada a esa sesión.
Ahora sabemos que:
-
La página de validación está en /check.
-
Un nombre de cookie válido (como “snickerdoodle”) nos da un ID numérico (0).
-
Un ID inicial era -1.
Esto sugiere fuertemente que las cookies siguen un orden secuencial (0, 1, 2, 3…).
Podemos buscar la flag experimentando con el valor numérico de la cookie. Tenemos varias formas de hacerlo: usando curl para manipular las solicitudes HTTP, usando Burp Suite, o a manopla en el browser (editando la cookie manualmente).
La forma más fácil de ver todo es Burp Suite, ya que te permite “hilar fino” entre la solicitud y la respuesta (y te evita el dolor de cabeza de hacer un script). Pero en este caso, vamos a hacerlo con curl para que lo puedas ejecutar y listo.
#! /usr/bin/bash
for i in {1..30}
do
curl --cookie "name=${i}" http://mercury.picoctf.net:6418/check >> salida.txt ; clear
done
grep "picoCTF{" salida.txt
El script es sencillo:
-
Inicia un bucle for que cuenta del 1 al 30.
-
En cada iteración, usa curl para hacer una petición a /check.
-
—cookie “name=${i}”, que inyecta la cookie “name” con el valor numérico de la iteración (1 al 30).
-
Redirige (>>) toda la respuesta HTML a un archivo salida.txt.
-
Al final, grep busca el patrón “picoCTF{” dentro de todo el texto acumulado.
NOTA: curl por defecto envía un método GET. En este caso, para checkear la cookie se usa GET, pero si fuera con otro método (como POST), podríamos probarlo. Para saber qué métodos acepta un endpoint, podemos usar OPTIONS:
curl -i -X OPTIONS http://mercury.picoctf.net:6418/check
que nos daria como resultado los metodos permitidos:
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Allow: GET, HEAD, OPTIONS
Content-Length: 0
si todo fue bien deberias haber conseguido la flag.
Notas / Post-mortem
Aprendizajes adicionales…