The First Flag
Challenge Category: OSINT
Points: 50 pts
Time spent: 5-10 mins
Tools required: Browser DevTools (Console, Elements, Application)
Description: Entry challenge!
The challenge asked you to read the rules page carefully. This year the flag was not in the page source. A Griffin waited in the browser console.
The console game ran only during the event. It is no longer live on the rules page.
Step 0: Find the Griffin
The rules page had an HTML comment near the top:
<!-- The Griffin is listening. Open your console. -->
Open DevTools (F12) and go to the Console tab. The Griffin greets you:
Psst. The Griffin has your first flag. Type welcome()
Run welcome(), then introduce yourself with iam("your name").
Step 1: The hidden feather
The Griffin says a feather is hidden on the page, near “Eligibility”. In the Elements tab, look under the Eligibility/Team Formation heading. You find a hidden element:
<span id="griffin-feather" hidden data-word="wings"></span>
The word is in the data-word attribute, not the id. Submit it:
answer("wings")
Step 2: The gate
door() refuses you, because your role in localStorage is guest. Only griffins get in. Change the role and knock again:
localStorage.setItem("role", "griffin")
door()
You can also edit the value in Application > Local Storage.
Step 3: The riddle
The Griffin gives a base64 riddle. Decode it in the console:
atob("SSBoYXZlIGtleXMgYnV0IG9wZW4gbm8gbG9ja3MuIEkgaGF2ZSBzcGFjZSBidXQgaG9sZCBubyByb29tLiBZb3UgY2FuIGVudGVyLCBidXQgbmV2ZXIgbGVhdmUuIFdoYXQgYW0gST8=")
// "I have keys but open no locks. I have space but hold no room.
// You can enter, but never leave. What am I?"
answer("keyboard")
Flag
The Griffin prints the flag:
tribectf{3v3ry_h4ck3r_5t4rt5_w17h_4_c0n50l3}
Can you skip the game?
Partly. The answers are checked against SHA-256 hashes, so you cannot read them from the script. The flag is XOR-encrypted with the three answers joined (wingsgriffinkeyboard). The words are short and common, so a brute force works too. For 50 points, the game is the faster path.
Bonus: the console also answered to caw() and fly().