UMDCTF 2025

UMDCTF 2025
Aristore比赛地址: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
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
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
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} |