2024 Hackergame WP
总结一下参与2024 Hackergame的一些题目的WriteUp。
签到 50
链接后加 /?pass=true 即可得到flag。
喜欢做签到的 CTFer 你们好呀
点击主页承办单位的链接,进入终端后执行命令即可找到。
猫咪问答
- 在 Hackergame 2015 比赛开始前一天晚上开展的赛前讲座是在哪个教室举行的?(30 分)
提示:填写教室编号,如 5207、3A101。
答案:3A204
- 众所周知,Hackergame 共约 25 道题目。近五年(不含今年)举办的 Hackergame 中,题目数量最接近这个数字的那一届比赛里有多少人注册参加?(30 分)
提示:是一个非负整数。
答案: 2682
- Hackergame 2018 让哪个热门检索词成为了科大图书馆当月热搜第一?(20 分)
提示:仅由中文汉字构成。
答案:程序员的自我修养
- 在今年的 USENIX Security 学术会议上中国科学技术大学发表了一篇关于电子邮件伪造攻击的论文,在论文中作者提出了 6 种攻击方法,并在多少个电子邮件服务提供商及客户端的组合上进行了实验?(10 分)
提示:是一个非负整数。
答案:336
- 10 月 18 日 Greg Kroah-Hartman 向 Linux 邮件列表提交的一个 patch 把大量开发者从 MAINTAINERS 文件中移除。这个 patch 被合并进 Linux mainline 的 commit id 是多少?(5 分)
提示:id 前 6 位,字母小写,如 c1e939。
答案:6e90b6
- 大语言模型会把输入分解为一个一个的 token 后继续计算,请问这个网页的 HTML 源代码会被 Meta 的 Llama 3 70B 模型的 tokenizer 分解为多少个 token?(5 分)
提示:首次打开本页时的 HTML 源代码,答案是一个非负整数
答案:1833
1 | from transformers import AutoTokenizer |
打不开的盒
3D 查看器直接看。
每日论文太多了!
PDF 编辑移去遮挡即可获得。
比大小王
通过抓取流量分析得提交答案的 cookie 值正好是链接时返回的值,因此写脚本获取赛题内容,计算后提交即可。
1 | import json |
旅行照片 4.0
问题 1: 照片拍摄的位置距离中科大的哪个校门更近?(格式:X校区Y门,均为一个汉字)
东校区西门
问题 2: 话说 Leo 酱上次出现在桁架上是……科大今年的 ACG 音乐会?活动日期我没记错的话是?(格式:YYYYMMDD)
20240519
问题 3: 这个公园的名称是什么?(不需要填写公园所在市区等信息)
中央公园
问题 4: 这个景观所在的景点的名字是?(三个汉字)
坛子岭
问题 5: 距离拍摄地最近的医院是?(无需包含院区、地名信息,格式:XXX医院)
积水潭医院
问题 6: 左下角的动车组型号是?
CRH6F-A
铁路迷狂喜。
不宽的宽字符
utf-8 转 unicode
Z:\theflag -> 㩚瑜敨汦条.
PowerfulShell
1 | PowerfulShell@hackergame> ${-:1} |
Node.js is Web Scale
注入
1 | { |
访问 url+/execute?cmd=newCmd。在 POST /set 接口中,用户提供的键值对被直接写入到store对象中。当用户提供的键包含 proto__时,例如__proto.newCmd,代码会将该键值对挂载到 Object.prototype 上。这会导致所有对象都继承了 newCmd 属性,造成原型污染。
在 GET /execute 接口中,代码从 cmds 对象中获取命令:const cmd = cmds[key]; 。如果key不在cmds自身属性中,JavaScript 会沿原型链查找。由于 cmds 的原型链被污染,cmds[key] 可能获取到攻击者注入的命令。执行 execSync(cmd) 时,就会运行任意命令。
PaoluGPT
千里挑一
油猴脚本检测flag。
1 | (function() { |
窥视未知
分析服务器代码发现其并没有对传入的 conversation_id 进行过滤,因此使用其获得不可见的页面。
url后缀添加 /view?conversation_id=1’ OR shown = false– 查询即可。
强大的正则表达式
Easy
这题应该是 dfa 转正则,没搞明白,最后写了个又臭又长的匹配过了第一问。
1 | 1 |
惜字如金 3.0
A
交给 gpt 操作即可。
B
分析题目代码,一个 crc 校验 + 一个哈希,通过 z3 求解。
1 | from z3 import * |
求出后替换程序中的 poly ,提交即可。
C
通过分析代码,发现需要用到自定义 crc 校验值算法来求解,使其经过系列转换后输入能被解析成 ‘answer_c’ 。借用了一个模板实现,然后根据匹配的 hex 值来逐步爆破。
1 |
|
1 | import base64 |
最后需要在 flag{
后面爆破一位,使其匹配上 _
,最终解码得到答案。
优雅的不等式 400
easy
Please prove that pi>=2
Enter the function f(x): 4*((1-x2)(1/2)-(1-x))
Q.E.D.
Please prove that pi>=8/3
Enter the function f(x): (x-x2)4*(299+300*x2)/(1+x2)
Q.E.D.
hard
构造一种接近 pi 的数的算法,然后指定 n 值(确定要计算到小数点后多少位,30大概就能计算到题目要求的范围),通过 sympy 求解。
1 | import socket |
ZFS 文件恢复
Text File
binwalk 提取文件,发现第二个 zlib 文件中有两个 789c 开头,将第二个 789c 开头的部分提取出来,zlib 解压得到答案。
链上转账助手
转账失败
转账又失败
问就是这么输入就对了。
1 | Player bytecode: 608060405234801561001057600080fd5b50604051602080610123833981018060405281019080805182019291906020018051820192919050505080600081905550506100d58061004a6000396000f3fe6080604052600436106100295760003560e01c806360fe47b11461002e5780636d4ce63c1461004c575b600080fd5b610036610064565b60405161004391906100a2565b60405180910390f35b61005461006a565b005b60005481565b60008054905090565b6000819050919050565b61008a81610077565b82525050565b60006020820190506100a56000830184610081565b92915050565b600081905091905056fea2646970667358221220b7e5e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8 |
不太分布式的软总线
分析代码,这题要求我们通过 dbus 调用服务获取 flag。
What DBus Gonna Do?
1 | !/bin/bash |
If I Could Be A File Descriptor
1 |
|
Comm Say Maybe
1 |
|
关灯 300
z3 一把梭。
Easy
Medium
Hard
1 | from z3 import * |
禁止内卷
题目提示了文件路径,使用路径遍历漏洞覆盖正在运行的flask文件,会被热重载。
1 | curl -F "[email protected];filename=../web/app.py" https://chal02-fkdl7zuy.hack-challenge.lug.ustc.edu.cn:8443/submit |
1 | from flask import Flask, render_template, request, flash, redirect |
哈希三碰撞
三碰撞之一
IDA 分析第一个 elf,发现监测数据是在输入从十六进制转为二进制之后,因此可以构造大小写不同但是数据相同的十六进制字符串,即可求解。
1 | Which challenge (1 or 2): 1 |
零知识数独
数独高手 100
写一个程序解数独就行了。
1 | def is_valid(board, row, col, num): |
ZK 高手 150
搜了一下发现是零知识证明,需要在本地配置好环境后,构造input.json(问题和答案),然后进行证明。
1 | { |
1 | snarkjs wtns calculate sudoku.wasm input.json witness.wtns |
神秘代码2
base64解第一行,结果末尾的字母表换表解第二行。
先不说关于我从零开始独自在异世界转生成某大厂家的 LLM 龙猫女仆这件事可不可能这么离谱,发现 Hackergame 内容审查委员会忘记审查题目标题了ごめんね,以及「这么长都快赶上轻小说了真的不会影响用户体验吗🤣」
「行吧就算标题可以很长但是 flag 一定要短点」
丢给gpt解决第一问。原文如下:
1 | In the grand hall of Hackergame 2024, where the walls are lined with screens showing the latest exploits from the cyber world, contestants gathered in a frenzy, their eyes glued to the virtual exploits. The atmosphere was electric, with the smell of freshly brewed coffee mingling with the scent of burnt Ethernet cables. As the first challenge was announced, a team of hackers, dressed in lab coats and carrying laptops, sprinted to the nearest server room, their faces a mix of excitement and determination. The game was on, and the stakes were high, with the ultimate prize being a golden trophy and the bragging rights to say they were the best at cracking codes and hacking systems in the land of the rising sun. |
总结
ID: Neur0_5ama
分数:5550, 总排名:37 / 2460
2024 Hackergame WP