$ cat writeup.md…
$ cat writeup.md…
broncoctf2026
Task: two cryptic Discord clues (a snowflake ID and a <t:...:R> timestamp) form a pointer to a specific message. Solution: decode the snowflake to the BroncoCTF #announcements channel via the Discord invite API, resolve the timestamp to a message, and read the flag hidden in that message's edit history (admin edit-privilege abuse).
Some administrator has been going around doing some weird things lately. All they left me were these two cryptic clues. Allegedly, if you follow their trail, they'll lead you to a flag. What gives?
1160888390661714032
<t:1739660340:R>
Two Discord artifacts together point at a single Discord message. Following the trail (channel + timestamp) leads to an announcement that an admin edited to smuggle in the flag.
The two clues are both Discord-native formats:
1160888390661714032 — a Discord snowflake ID (18-19 digit integer). A snowflake encodes its creation time in the high bits:
timestamp_ms = (snowflake >> 22) + 1420070400000 # Discord epoch
This decodes to 2023-10-09 10:36:00 UTC — consistent with when the BroncoCTF Discord guild was created, but a snowflake alone doesn't tell you what kind of entity it is (user / channel / guild / message).
<t:1739660340:R> — Discord's relative-timestamp markup. The embedded unix timestamp 1739660340 = 2025-02-15 22:59:00 UTC, which falls inside the BroncoCTF 2025 competition weekend.
So one clue is an entity ID and the other is a point in time — together they describe which message to find (a channel) and when (a timestamp).
BroncoCTF is run by SCUBroncoSec (Santa Clara University Cyber Security Club — broncosec.com, github.com/SCUBroncoSec).
The official BroncoCTF Discord invite (from the CTFtime event page) is https://discord.gg/WT7HXqx8jP.
The unauthenticated Discord invite API resolves the invite to its target channel:
GET https://discord.com/api/v10/invites/WT7HXqx8jP?with_counts=true
The response shows:
11608875716987003581160888390661714032, type 0 (text), name announcementsSo clue 1 is the #announcements channel ID, and clue 2 is a timestamp of a message inside it.
Decode the snowflake and the timestamp:
#!/usr/bin/env python3 DISCORD_EPOCH = 1420070400000 import datetime snowflake = 1160888390661714032 ts_ms = (snowflake >> 22) + DISCORD_EPOCH print("snowflake created:", datetime.datetime.utcfromtimestamp(ts_ms / 1000), "UTC") # -> 2023-10-09 10:36:00 UTC unix = 1739660340 # from <t:1739660340:R> print("timestamp clue:", datetime.datetime.utcfromtimestamp(unix), "UTC") # -> 2025-02-15 22:59:00 UTC
Resolve the snowflake to the #announcements channel through the invite API:
curl -s 'https://discord.com/api/v10/invites/WT7HXqx8jP?with_counts=true' | python3 -m json.tool # channel.id == 1160888390661714032 (type 0, "announcements") # guild.id == 1160887571698700358 ("BroncoCTF")
Join discord.gg/WT7HXqx8jP, open #announcements, and scroll to the message posted at 2025-02-15 22:59:00 UTC.
Timezone caveat: Discord displays message times in the viewer's local timezone. In UTC+3 (MSK), 22:59 UTC = 01:59 the next day, so the target message appears under the 16 Feb 2025 day separator, not the 15th. Convert carefully or the message looks "missing".
The message at that time is from admin yoshie (role RHAB) and reads simply Restarting — but it carries an (edited) marker.
The "Admin Abuse": an admin abused edit privileges to edit an old announcement and hide the flag inside it. The edited message body contains the flag:
bronco{REDACTED}
The flag reads "who gave this man edit privileges" — a self-referential joke about the very abuse used to plant it.
1q9G1-vpY-B91zc8aTcR-ajvVCR63HkyU) holding all 61 BroncoCTF 2025 challenge files. That's just mirrored challenge material — the flag is not there.discordlookup.mesavirep.xyz, lookup.guru) were dead/parked; use the official Discord invite API instead.$ cat /etc/motd
Liked this one?
Pro unlocks every writeup, every flag, and API access. $9/mo.
$ cat pricing.md$ grep --similar