1.湖心亭看雪

这是我第一次出题,没有多少经验,难度是按照去年的isctf出的。原本难度定的简单,可能对于一些老登和新神来说,可能就跟签到差不多了。

解题思路

解压之后有一个图片和一个task.py脚本

1
2
3
4
5
a = b'*********' #这个东西你以后要用到
b = b'blueshark'
c = bytes([x ^ y for x, y in zip(a, b)])
print(c.hex())
#c = 53591611155a51405e

根据提示,我们要把a求出来。这个代码的意思是a和b两个逐个异或得到c。很简单逆向过去答案a就是15ctf2025。注释说以后会用到,那所以就先放在这里。

然后剩下的就是一张图片,不论你用010还是随波逐流,你会发现图片后边有东西。

额外添加的东西具有zip压缩文件的特征,并且你会发现有一个flag.txt文件,所以我把他们提取出来,方式随意,用binwalk、foremost甚至手动也行。最后你会发现提取出来的东西啊,缺少了zip的文件头,导致它不能成为一个压缩文件。我们把文件头补上504b0304

我们发现这个那个文件被加密了,然后上文中提到有task.py求出来的有一组数据,但还没用。他有可能就是这个压缩包的密码。

解压之后看似是一篇小短文。但是当我们全选之后,会发现有很多隐藏的数据。根据隐藏数据的特征,我们推断它是snow隐写。同时根据题目的全部信息我们发现密码的信息只有15ctf2025一个。那我们猜测,隐写的密码也是15ctf2025

Snow隐写的提取信息指令是

1
snow.exe -C -p 15ctf2025 flag.txt

2.ezrce

设计这道题是为了新生考虑的,让他们了解了解什么是无参rce,并且让他们知道怎么运用。但是因为AI的问题,我的题目被打烂了。基本上我看到的wp有很多都是AI嗦出来的。那这我没话说。你在比赛里为了多拿分,用AI搜出来,我理解,但是我建议新生们在赛后好好复盘一下,详细了解它的原理。不然这道题相当于你还是不会,因为ai会了,永远是AI的,而不是你的。

以下是我的解题思路:

抓包,添加自创的 http 头

1
abc:system(“ls /”);

之后再 Var_dump(getallheaders());提取所有 http 头,(数组顺序我这里是逆序的)

接下来 reset()提取第一个(如果数组顺序是顺序的,则用 end())

1
Var_dump(reset(getallheaders()));

Var_dump 改为 eval 可以命令执行

查看flag的操作就很简单了,我就不赘述了。

当然在审wp的时候,我也看到了很多不同的答案。比如使用dirname()一层一层走到根目录的;在根目录下使用array_rand()抽签大法抽到flag的;使用get_defined_vars()再额外定义变量的……这些都是很好的方法。

总结

你为什么直接把题目扔给AI啊,旮旯CTF根本不是这样的!(꒪Д꒪)ノ你应该先点开容器,发现这是你没有见过的知识点,( • ̀ω•́ )✧然后在网上搜索文档。偶尔遇见不会的问题去更深度的搜索。(〃’▽’〃)认真的了解了这个知识点之后,在容器里输入payload,然后你才可以正式拿到flag啊。旮旯CTF根本不是这样的啊ヽ(`Д´)ノ我不接受!