2020: RGBctf: countdown - 5225225
This commit is contained in:
parent
f0395722e1
commit
58e78c7c3d
|
@ -0,0 +1,40 @@
|
||||||
|
# Countdown
|
||||||
|
|
||||||
|
writeup by [5225225](https://www.5snb.club) for [BLÅHAJ](https://blahaj.awoo.systems)
|
||||||
|
|
||||||
|
**Web**
|
||||||
|
**455 points**
|
||||||
|
**63 solves**
|
||||||
|
|
||||||
|
> This challenge is simple. All you have to do is wait for the countdown to end to get the flag.
|
||||||
|
> The countdown ends one second before the end of the CTF, but you have fast fingers right?
|
||||||
|
|
||||||
|
## writeup
|
||||||
|
|
||||||
|
You're sent to a website that contains a javascript countdown to a date. Above that is the phrase
|
||||||
|
"Time is key.". Looking at the source code, it reads a cookie that contains 3 base64 parts joined
|
||||||
|
by dots, and only makes use of the first part. Decoding the first part of the cookie gives you a
|
||||||
|
JSON object describing the date the page counts down to, but changing it doesn't get the server to
|
||||||
|
return the flag.
|
||||||
|
|
||||||
|
The format was similar to that of a JSON Web Token, but it couldn't be a JWT.
|
||||||
|
|
||||||
|
Intentionally making the server return a 404 by going to a non-existent page gave us
|
||||||
|
|
||||||
|
> # Not Found
|
||||||
|
>
|
||||||
|
> The requested URL was not found on the server. If you entered the URL manually please check your
|
||||||
|
> spelling and try again.
|
||||||
|
|
||||||
|
Looking online for that string, most of the results mention Flask
|
||||||
|
(<https://github.com/pallets/flask>), a Python web framework. So the server's probably using flask.
|
||||||
|
|
||||||
|
Searches online leads us to itsdangerous (<https://itsdangerous.palletsprojects.com/en/1.1.x/>),
|
||||||
|
which is the library Flask uses to sign its cookies. The format looks to match, so we know it's a
|
||||||
|
Flask cookie.
|
||||||
|
|
||||||
|
To break it, I used flask-unsign (<https://github.com/Paradoxis/Flask-Unsign>), which is a tool
|
||||||
|
that can take a Flask cookie and crack the code using a wordlist. The built-in wordlist didn't
|
||||||
|
crack the cookie, but then I went back and read the page, and tried both "time" and "Time" as the
|
||||||
|
secret key. "Time" turned out to be the key, so I could then re-sign the cookie with a date in the
|
||||||
|
past, paste that into my browser, and refresh the page, showing the flag.
|
Loading…
Reference in New Issue