UMDCTF 2025
比赛地址:UMDCTF 2025
比赛时间:26 Apr 2025 06:00 CST - 28 Apr 2025 06:00 CST
Misc
find the seeds
Challenge
can u help Alice find her seeds in the bin? She’s pretty sure the bin hasn’t been dumped since it was generated.
1 | import random |
Solution
加密过程使用了 XOR 操作,将 plaintext 和一个由随机数生成器(random.getrandbits(8))生成的 keystream 进行逐字节异或操作,得到 ciphertext。
已知 XOR 的性质:如果 A ^ B = C,那么 C ^ B = A。因此,如果我们知道 ciphertext 和 keystream,可以通过 ciphertext ^ keystream 还原出 plaintext。
因此可以爆破加密时的时间戳,使用该时间戳重新生成 keystream,通过 ciphertext ^ keystream 还原出 plaintext。
1 | import random |
1 | Seed found: 1745447710 |
1 | UMDCTF{pseudo_entropy_hidden_seed} |
tiktok-ban
Challenge
Oh snap! Oh crap! TikTok is banned in Ohio!
nc challs.umdctf.io 32300
Solution
服务端运行了一个 dnsmasq 实例,配置了一个 值为 flag 的TXT 记录 tiktok.com 。
服务端首先读取 4 字节的长度信息(大端格式),然后根据该长度读取后续的数据。
如果数据中包含 tiktok\x03com(即 DNS 查询格式中的 tiktok.com),服务器会返回一段固定的错误消息,否则就返回 flag。
因此我们需要构造一个 DNS 请求,绕过检查查询 tiktok.com 的 TXT 记录,从而获取 flag。
注意到服务端使用 if b'tiktok\x03com' in req 进行检查,域名是不区分大小写的,然而这里的判断是区分大小写的,因此我们可以通过利用大小写绕过构造一个等价的域名。
1 | from pwn import * |
OSINT
swag-like-ohio
Challenge
swag like ohio. down in ohio. swag like ohio. down in ohio. anyway we seem to be on a bridge. what’s the address of the bridge?
flag will look like: UMDCTF{Boulder Bridge, Washington, DC 20008}

Solution

先识图找ohio找到这篇文章Vacancies — Marietta Main Street
再用这篇文章里的图接着搜

再找到维基百科上的这张图File:Ohio - Marietta - Dime Bank.jpg - Wikimedia Commons,得知这个建筑是 Marietta Dime Bank

在这里200 Putnam Street in Historic Downtown Marietta, OH找到地址 200 Putnam Street, Marietta, OH 45750

到谷歌地图直接搜

1 | UMDCTF{Putnam Bridge, Marietta, OH 45750} |
sunshine
Challenge
what a nice sunny day. what is the full address of house number 356?
flag will look like: UMDCTF{3983 Campus Dr, College Park, MD 20742}

Solution

搜索题目给定的这栋房子发现它是篮球篮球运动员 LeBron James 童年的住所
在第一个搜索结果Where LeBron James Lives: A Peek Into LeBron’s Homes Interbasket中发现 LeBron’s Childhood Home in Akron, Ohio
进一步搜索

在第一个搜索结果LeBron James’ childhood home in Akron, OH (Google Maps)中找到题目给定的地址(甚至街景都一模一样)

位于 356 Hillwood Dr, Akron, OH 44320美國
1 | UMDCTF{356 Hillwood Dr, Akron, OH 44320} |
beauty
Challenge
truly a beautiful panorama. ohio is not always ugly. i really wanna know who made this pano tho. what’s their name?
flag will look like: UMDCTF{Darryll Pines}

Solution

搜到这篇百科List of tallest buildings in Ohio - Wikipedia

找到这个建筑AEP Building - Wikipedia,然后到谷歌地图上搜

Battelle Riverfront Park - Google 地圖
1 | UMDCTF{Neil Larimore} |
the-master
Challenge
trust me bro, i know what im talking about. im the master when it comes to these things. what street are we on?
flag will look like:
UMDCTF{Campus Dr, College Park, MD 20742}

Solution

识图找到维基百科上的这张图片File:Lore City UMC.jpg - Wikimedia Commons
下面给出了拍摄这张图时所在的坐标GeoHack - File:Lore City UMC.jpg
打开谷歌地图[39°59’02.0”N 81°27’32.0”W - Google Maps](39°59’02.0”N 81°27’32.0”W - Google Maps)
最终可以定位到这里190 Main St - Google Maps
1 | UMDCTF{Main St, Lore City, OH 43755} |
Nyt
the-mini
Challenge
Joel Fagliano has nothing on me. (flag is all caps)
Solution

这是个填字游戏

并且它的 solution 被锁住了
然而这里的 key 只有 4 位数,因此直接爆破
在 GitHub 上找了个处理 .puz 的 Python 库alexdej/puzpy,然后就是写脚本调用接口爆破了
1 | import puz |
运行得到输出
1 | 谜题被锁定,尝试暴力破解... |
1 | UMDCTF{CANYOUBEATMYTIME} |
Reverse
deobfuscation
Challenge
the chall is not that complex. the key is to read ASSEMBLY!
Solution

入口函数的分析如图,只要提取固定数组 byte_402000 和 byte_402034,然后通过异或运算就可以还原出正确的输入,下面是提取出的 byte_402000 和 byte_402034 的内容
1 | .data:0000000000402000 20 byte_402000 db 20h ; DATA XREF: LOAD:00000000004000C0↑o |
编写脚本还原
1 | byte_402000 = [ |
1 | UMDCTF{r3v3R$E-i$_Th3_#B3ST#_4nT!-M@lW@r3_t3chN!Qu3} |
- 标题: UMDCTF 2025
- 作者: Aristore
- 创建于 : 2025-04-28 22:40:00
- 更新于 : 2025-11-03 19:55:14
- 链接: https://www.aristore.top/posts/UMDCTF2025/
- 版权声明: 版权所有 © Aristore,禁止转载。