web

jey is not my son

Find the year the flag was created, that’s the answer you seek. But beware: Jey is not not my son.

https://fortid-jey-is-not-my-son.chals.io/arrow-up-right

tldr;

The vulnerable piece of code is this line.

  • Our input with name and year is inserted into a code string (the DSL program) with no escaping. So the workaround this is terminate with the "...", close the filter(, and inject arbitrary query operators/pipelines. Our injection comes after that is the real exploit.

The fomula for it is going to be

  • flag" → closes the "... string.

  • ) → closes the original filter( call, so it becomes filter(.Name == "flag").

  • | map({Count: <PREDICATE>}) → payload pipeline; decide what number gets printed.

  • | filter(.Name not in [] or .Name == " → opens a new filter and leaves a string open to catch the remainder.

And build on that logic and plus the predicate of guessing character by character, we ultimately got the solve.

solve.py

  • FortID{B3_th3_0n3_wh0_1s_n0t_b1ind_1n_th3_n3w_3r4}

upload docs

We’ve come across a rather unusual solution for uploading documentation, and I’ve noticed several odd things about it.

Here’s what I know so far:

There’s an /admin?target_user={user_id} endpoint that simulates what an admin would see on the site. From there, the admin can view target_user the links. There’s also a /get_flag endpoint, which appears to work only within the local network.

Local port is 5000.

https://fortid-upload-docs.chals.io/arrow-up-right

tldr;

circle-info

The flag was hidden behind an internal admin-only endpoint /get flag ac- cessible only to the admin bot running on 127.0.0.1:5000.

Direct access or password resets were impossible. Instead, we abused a stored XSS gadget in the “username/link” feature that allowed us to load arbitrary JavaScript in the admin’s origin. Our payload fetched /get_flag and exfiltrated it to a webhook, yielding the flag.

  • FortID{50m371m35_15_b3773r_70_n07_v1b3_c0d3_4nd_0buf5c473}

Notes: From the page sources we observed that the application always includes (after you de-obfuscate the code with https://deobfuscate.io/arrow-up-right). /static/js/effect.js with window.stateObject["static/js/effect.js"].href without validation. And that is pretty much the vulnerability

solve.sh

  • FortID{50m371m35_15_b3773r_70_n07_v1b3_c0d3_4nd_0buf5c473}

Last updated