HgameCTF2024-week1-web/misc题复盘

本应该在假期写的复盘博客,结果由于懒加上练车就完全没写,这个比赛我也只在week1做的时间比较多,之后的几周基本都没怎么做,全在玩了(无奈.jpg)。但是假期就是要狠狠玩!开学了,开始补之前的落下的复盘。

一、web部分

先从简单到难逐渐复盘:

1.ezHTTP

根据题目也可以发现是简单的考察一些http协议具体内容,用burpsuite抓包,点开之后发现提示:请从vidar.club访问这个页面

所以用Referer头即可,如下:

用于模仿来源的http头一共有两个,分别是Origin与Referer,但是Origin只用在CORS跨域请求中,普通的请求用不到,所以本题用到了Referer。

可以看到回复如下,所以就简单的更改一下user-agent即可

回复如下,需要从本地访问,

下面这些都是可以当做本地访问的头,其中重要的三个我已经标出来了,挨个试即可,这题是用到了X-Real-IP才可以通过的

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
28
29
30
31
32
** Client-IP:127.0.0.1
** X-Real-IP: 127.0.0.1
** X-Forwarded-For: 127.0.0.1
Forwarded-For-Ip: 127.0.0.1
Forwarded-For: 127.0.0.1
Forwarded-For: localhost
Forwarded:127.0.0.1
Forwarded: localhost
True-Client-IP:127.0.0.1
X-Client-IP: 127.0.0.1
X-Custom-IP-Authorization : 127.0.0.1
X-Forward-For: 127.0.0.1
X-Forward: 127.0.0.1
X-Forward: localhost
X-Forwarded-By:127.0.0.1
X-Forwarded-By: localhost
X-Forwarded-For-Original: 127.0.0.1
X-Forwarded-For-original: localhost
X-Forwarded-For: localhost
X-Forwarded-Server: 127.0.0.1
X-Forwarded-Server: localhost
X-Forwarded: 127.0.0.1
X-Forwarded: localhost
X-Forwared-Host: 127.0.0.1
X-Forwared-Host: localhost
X-Host: 127.0.0.1
X-Host: localhost
X-HTTP-Host-Override : 127.0.0.1
X-Originating-IP: 127.0.0.1
X-Remote-Addr: 127.0.0.1
X-Remote-Addr : localhost
X-Remote-IP: 127.0.0.1

最后是给了一个bearer编码的flag,这还是第一次遇到,挺新奇的,找一个解码网址最后得到flag

得到flag

2.Bypass it

这题的提示是:This page requires javascript to be enabled :)显示js已经开启

而进入网页之后发现是一个登录页面,刚进来肯定是没有账户的,需要注册,但是点击注册js弹框显示不让注册,结合题目提示,猜测是需要禁用js,这就很简单了

直接在控制台禁用js,然后点击注册,发现成功进入网址,然后就是注册即可

注册完登录即可拿到flag

3.Select Courses

根据题目名字也可以知道这需要我们将课程全部选上才会有flag,但是会发现全是已满的课程,如下这时候

最开始我做的时候是直接在前端页面改成未满然后点点点的选,发现没用,之后在前端js代码一个生成课的函数,然后我就把之前收到的所有课程的选包里面的full改成0然后用函数发过去会发现又多了四个相同的未满课,但是此时选课还是不行,后来我就随便的点点点发现突然选上一个课,我以为我这种方法是对的。然后就不断发包然后点,最后也都做完了。但是不知道啥原理。直到看到了题解才发现原来是爆破。。。

当我们选课的时候是通过给后端发包实现,如下

后端也会返回你一个错误信息以及满的信息。

既然是爆破那就写一个脚本就可以通过了

1
2
3
4
5
6
7
8
9
10
11
12
13
import requests
url = "http://47.102.184.100:32022/api/courses"
data = {"id":1}
num = []
while True:
for i in range(1,6):
if i in num:
continue
data["id"] = i
response = requests.post(url, json=data)
if '"full":0' in response.text:
print(f"Response for id={i}: {response.text}")
num.append(i)

上述代码有部分参考了题解,当出现所有课程的id之后就选完了,如下提交即可获得flag

啊啊啊平台关了,我太拖延了,其他的web题都复现不了了。