Since I got top 3 for SCTF and they required write-ups as proof for a couple of challenges, why not post them here as well?
Josh Template Viewer
This challenge was honestly pretty easy. After creating an account and logging in, we are directed to the following page:
A look at the code also tells us that the website uses JSON Web Tokens for handling authentication and authorization (signed using a presumably weak secret key), and that the homepage would show the flag if the uuid
field in the JWT payload was set to '0'
:
Decoding the JWT using jwt.io also confirms the above:
Let’s grab the JWT from the access_token
cookie and try brute forcing it with John and rockyou.txt
:
No dice. Let’s try again with the default wordlist:
I wasn’t sure how long this was gonna take, so I hopped off to play a match of Helldivers 2. When I came back a good 40 minutes later (I’m bad at keeping track of time ok I’m sorry), I was greeted with the following:
Awesome! Now that we have the secret, we can now forge our own JWT and set the uuid
field to '0'
:
Setting the access_token
cookie to the forged JWT and refreshing the page gives us the flag:
Note: I don’t think brute forcing the JWT Secret was the intended solution and that it was supposed to be path traversal, but hey if it works I’m not complaining.
BeepBoop
For some reason, this challenge felt way easier than Running Can. This challenge provides beepboop.zip
, which contains 2 audio files: beep.wav
and boop.wav
. The zip file is password-protected, but can be easily cracked with John the Ripper:
This tells shows that the password is bestmusic
(shocker). The file can now be unzipped:
This gives us the two audio files. Running strings
and binwalk
on both files yield nothing interesting, so let’s open up Sonic Visualiser. Adding a spectrogram and tweaking the Window options shows the first part of the flag:
The second part of the flag can be found encoded in boop.wav
using LSB steganography, and can be extracted using the following script I got off a Medium article: